本篇来简单了解下什么是镜像和镜像的几个基本操作命令

1.什么是image

 

nexus 镜像迁移到 harbor images镜像_nexus 镜像迁移到 harbor

尝试观察上面这个图,理解镜像有以下几个特点

1)镜像是文件和meta data的集合(root filesystem)

例如一个centos的镜像,里面包含一些最精简版的centos文件系统,还有其他软件包等文件。

2) 镜像是分层的,每层都可以添加删除改变文件,成为一个新的image

举例,我在1)中的centos这个基础镜像,在这之上,添加java环境,就可以制作成一个新的镜像文件。

3) 不同的image可以共享同一层layer

例如我有一个centos的基础镜像,这个镜像所在的层(layer),我可以共同开启一个java的镜像和一个tomcat的镜像。这就是不同镜像可以共享同一层的意思。

4) 镜像本身是只读的

Image本身是read-only这个怎么去理解呢,一个镜像文件制作出来之后,是不可以改变。启动镜像就产生了容器,如果镜像发生了改变就变成了其他的镜像。一个镜像,如果启动就变成了容器,如果容器关闭,这个镜像还在这里,不会发生变化,当然容器里面有变化。我个人理解可以这样去尝试理解:镜像是静态,不可改变的,容器是动态,可以操作。(容器后面介绍)

2. 如何获取image

在前面一篇末尾,我使用了一个命令 docker pull busybox来下载一个镜像。这里来解释一下这个命令。Docker表示调用的是docker这个CLI,以后执行任何docker命令,前面都需要添加docker这个前缀,pull是拉取的意思,如果你使用过git拉取代码,同样的意思,比较好理解。Busybox是一个镜像的名称,默认是从hub.docker.com这个仓库中下载一个叫busybox的镜像到你本地docker环境。

 

下面我演示下载一个jenkins的镜像操作

nexus 镜像迁移到 harbor images镜像_nexus 镜像迁移到 harbor_02

上面这个图,显示jenkins这个镜像使用了20个layer,可以说每一层都可以是一个镜像。这个下载速度取决你网速,我发现我在虚拟机里面下载很慢。这里说一下docker的优点,上面下载20个镜像,如果我下次下载一个其他镜像文件,例如centos,加入centos和jenkins两个镜像之间都相同的一部分layer是完全一样的,这样下次下载centos镜像的时候,在jenkins已经下载过的文件就不会重复下载。从这点也可以说明镜像是只读,如果这里不是只读,就无法同时给多个镜像提供,否则如果可写,那么centos和jenkins相同的文件就会乱套了,对不对。

 

如果你网速实在太慢,那你可以 docker pull hello-world

 

还有一种方法获取镜像,那就是使用DockerFile来build一个镜像出来,dockerfile是有语法的,后面我们再来学习。如果看过我pipeline教程的人,应该知道有一个jenkinsFile的概念,两个差不多的意思。

 

3.如何查看镜像

如果我们想查看docker里存在哪些镜像,你可以通过一下任意一个命令去查询。

nexus 镜像迁移到 harbor images镜像_Docker基础_03

 

nexus 镜像迁移到 harbor images镜像_image概述_04

上面的docker images 和 docker image ls 都可以查询出你环境下存在哪些镜像文件,就我个人,我喜欢使用第一种命令。

简单介绍下每个字段的含义,REPOSITORY,翻译过来是库的意思,这里只在镜像仓库中的名称是busybox;字段TAG是标记的意思,字段值latest,默认是这个latest tag,如果有其他tag,后面我们用多了不同镜像,可以看到其他tag值;IMAGE ID,就是镜像id,在镜像仓库中的一个唯一的ID,有点像git每次提到的commit的值一样。CREATED字段就是这个镜像是什么时候制作上传到仓库中的;SIZE就好说,镜像的文件大小。

Docker镜像先介绍到这里,后面继续学习镜像的知识。