docker容器技术系列三:docker镜像

本系列教程由旺旺知识库授权进行发布 前面基本概念部分我们已经介绍了docker镜像就是一个只读模板,可以从镜像启动一个容器实例。我们也发现,在启动容器的过程中,如果镜像不存在,docker会自动从默认镜像仓库(默认为官方Docker Hub)下载相应的镜像,然后再启动容器。

现在我们来探讨更多镜像的操作

1、列出本地已有的镜像

[root@localhost ~]# docker images


REPOSITORY   TAG         IMAGE ID      CREATED         VIRTUAL SIZE
centos       latest      ce20c473cd8a  2 weeks ago     172.3 MB

2、从默认镜像仓库搜索镜像

[root@localhost ~]# docker  search redis
  • *说明:没有/分隔前缀的,表示官方镜像,我们尽量选择官方镜像或者下载量较高的镜像使用。

3、下载镜像到本地

[root@localhost ~]# docker  pull redis
  • 下载过程如下图:
  • 下载过程要耐心等待,因为从国外的服务器下载,速度是很慢的,好在我们仅需下载几个基本镜像即可,后期均可通过这些基本镜像仅需修改,修改我们所需的即可。
  • 下载完成后,查看如下:
[root@localhost ~]# docker images

REPOSITORY  TAG         IMAGE ID        CREATED      VIRTUAL SIZE
redis       latest      c08dd1f8fad9    12 days ago  109.2 MB
centos      latest      ce20c473cd8a    2 weeks ago  172.3 MB
  • *注:也可以会看到新增了3个镜像,实际上这三个镜像都是对应的一个(注意看image ID),这是镜像的tag,类似软连接。下一条将讲解。

4、给镜像添加tag

  • tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。
  • 如上图,通过docker images命令,我们可以看到一个镜像有如下几个关键信息:
REPOSITORY :包含仓库信息,如docker.io/redis ,表示docker.io仓库的redis名称镜像。

TAG:同一个名称的镜像可能有多个版本,默认为latest版本(最新版),TAG就标明了版本

IMAGE ID :镜像唯一ID
  • 因此可以通过两个方法确定某个唯一的镜像:
1、REPOSITORY:TAG :如docker.io/centos:6.62、IMAGE ID : 如12c9d795d85a

*注意:如果直接使用“REPOSITORY”,则默认“TAG”为“latest”,如镜像redis就标识“redis:latest”
  • 镜像的名称“REPOSITORY:TAG ”可以用下面的命令重命名:
  • 将同一IMAGE_ID的所有tag,合并为一个新的
# docker tag 195eb90b5349 seanlook/ubuntu:rm_test
  • 新建一个tag,保留旧的那条记录
# docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag

5、将容器的修改提交到镜像

  • 在上一步中,如果已经为镜像tag指定了仓库信息,这可以使用下面命令提交镜像到仓库中:
  • 如下是提交已经镜像到一个私有仓库,私有仓库的搭建参考后文
# docker push  192.168.1.200:5000/centos:6.6

6、存出或载入镜像

  • 保存镜像为tar文件:
  • 如果要导出镜像到本地文件,可以使用docker save命令。
# docker save -o redis.tar redis
  • 载入镜像:
  • 可以使用docker load从导出的本地文件中再导入到本地镜像库,例如
# docker load --input redis.tar
或
# docker load < redis.tar
  • 这将导入镜像以及其相关的元数据信息(包括标签等)。
  • *注:通过存出和载入镜像,可以在没有搭建私有仓库的情况下,快速在不同主机之间拷贝镜像。

7、删除镜像

  • 如果要移除本地的镜像,可以使用docker rmi命令。
# docker rmi redisUntagged: redis:latest
Deleted: c08dd1f8fad9ff2622a1b5d74650a8e494ee380b74030e21584fea05079c2818
Deleted: 1749db59d6f291dc5b9b76610f33a15421170b711a07e0e4a835edb43c2d52f1
Deleted: e1c16660ac6110b9defa97ec9883e85f680459a951bd3c9aa9a02a4aa81034e7
Deleted: 134e55bc9c437b5a822885b879d34dc7f0bb189406ff6bfe33889e56e75fd7ba
Deleted: 3968e93424409ba4c7ebfb73dc8ca8b20ac1c1f622ea0ce1753efe6e57f5bb5e
Deleted: 57f1a903e59a508e0690c226b8e3016a125d98c2e42f9fc03efe871b85e35052
`
  • *注意:
  • 1)在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。
  • 2)docker rm命令是移除容器。

8、镜像的原理

  • Docker 镜像是怎么实现增量的修改和维护的? 每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。

通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。 Docker 在 AUFS 上构建的容器也是利用了类似的原理。

关于马哥linux运维

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-11-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏纯洁的微笑

Docker(五):Docker 三剑客之 Docker Machine

上篇文章Docker(四):Docker 三剑客之 Docker Compose 介绍了 Docker Compose,这篇文章我们来了解 Docker Mac...

48090
来自专栏搜云库

Docker Hub 仓库使用,及搭建 Docker Registry

目前 Docker 官方维护了一个公共仓库 Docker Hub,其中已经包括了数量超过 15,000 的镜像。大部分需求都可以通过在 Docker Hub 中...

57150
来自专栏Pythonista

docker网络

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。

49150
来自专栏算法修养

Docker 学习应用篇之二: Docker的介绍和安装

   之前说过Docker的好处,Docker可以集装箱化的部署应用程序。那么Docker是通过什么实现的呢。要理解Docker内部构建,需要先理解Docker...

443100
来自专栏zhisheng

Mac 安装 Docker 及常用命令

背景 微服务 + 容器,完美的一对!必须得好好学习学习。 安装步骤 Mac 下 Docker 的安装真心建议跟着官方的文档走一遍,官网已经讲的很详细了。 htt...

45170
来自专栏应兆康的专栏

Docker 简介与安装

Github:https://github.com/yingzk/MyDocker 1. Docker 简介 Docker是一个开源(Github地址: htt...

359120
来自专栏Java架构师进阶

Spring Boot 集成Mybatis实现主从(多数据源)分离方案

参考资料:https://store.docker.com/images/mysql

16850
来自专栏吴柯的运维笔记

Docker安装及基本指令教程

? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟...

41380
来自专栏云计算教程系列

如何在CentOS 7上安装和使用Docker Compose

Docker是一个很棒的工具,但要真正充分发挥其潜力,最好是应用程序的每个组件都在自己的容器中运行。对于具有大量组件的复杂应用程序,编排所有容器以一起启动和关闭...

86000
来自专栏应兆康的专栏

Docker 简介与安装

Github: https://github.com/yingzk/MyDocker

455230

扫码关注云+社区

领取腾讯云代金券