1.什么是image
尝试观察上面这个图,理解镜像有以下几个特点
1.1镜像是文件和meta data的集合(root filesystem)
例如一个centos的镜像,里面包含一些最精简版的centos文件系统,还有其他软件包等文件。
1.2镜像是分层的,每层都可以添加删除改变文件,成为一个新的image
在centos这个基础镜像之上,添加java环境,就可以制作成一个新的镜像文件。
1.3不同的image可以共享同一层layer
例如我有一个centos的基础镜像,这个镜像所在的层(layer),我可以共同开启一个java的镜像和一个tomcat的镜像。
这就是不同镜像可以共享同一层的意思。
1.4镜像本身是只读的
Image本身是read-only这个怎么去理解呢,一个镜像文件制作出来之后,是不可以改变。启动镜像就产生了容器,如果镜像发生了改变就变成了其他的镜像。一个镜像,如果启动就变成了容器,如果容器关闭,这个镜像还在这里,不会发生变化,当然容器里面有变化。
2. 如何获取image
使用了一个命令 docker pull busybox来下载一个镜像。这里来解释一下这个命令。Docker表示调用的是docker这个CLI,以后执行任何docker命令,前面都需要添加docker这个前缀,pull是拉取的意思,如果你使用过git拉取代码,同样的意思,比较好理解。Busybox是一个镜像的名称,默认是从hub.docker.com这个仓库中下载一个叫busybox的镜像到你本地docker环境。
下面我演示下载一个nginx的镜像操作
[root@ai ~]# docker pull nginx
上面这个图,显示jenkins这个镜像使用了7个layer,可以说每一层都可以是一个镜像,这个下载速度取决你网速。
这里说一下docker的优点,上面下载7个镜像,如果我下次下载一个其他镜像文件,例如centos,假如centos和nginx两个镜像之间都相同的一部分layer是完全一样的,这样下次下载centos镜像的时候,在jenkins已经下载过的文件就不会重复下载。
3.如何查看镜像
如果我们想查看docker里存在哪些镜像,你可以通过docker images命令去查询。
[root@ai ~]# docker images
简单介绍下每个字段的含义:
- REPOSITORY,翻译过来是库的意思,这里只在镜像仓库中的名称是busybox;
- TAG字段是标记的意思,字段值latest,默认是这个latest tag,如果有其他tag,后面我们用多了不同镜像,可以看到其他tag值;
- IMAGE ID,就是镜像id,在镜像仓库中的一个唯一的ID,有点像git每次提到的commit的值一样;
- CREATED字段,就是这个镜像是什么时候制作上传到仓库中的;
- SIZE字段是指,镜像的文件大小。