0%

(二)Docker从入门到精通—容器镜像仓库

简介

上一篇文章介绍了docker安装,并演示了HelloWorld。今天主要介绍一下镜像管理相关知识,分为三大部分:镜像、容器、仓库,首先看一下关系图:

1

仓库(Repository)

仓库是存放镜像的地方,每个仓库集中存放某一类镜像,比如存放Ubuntu镜像的仓库叫做Ubuntu仓库,可能包括14.04、16.04、latest等版本,通过tag区分。这些仓库可以存放在公开服务器Registry上面,可以搭建私有服务器。官方的服务器为Docker Hub, 网址为:https://hub.docker.com。 如果网络访问不方便,可以采用国内镜像网站。
自己可以注册账号,上传自定义镜像到服务器,共享给他人下载。

镜像(Image)

Docker镜像类似于虚拟机镜像, 可以理解成包含了文件系统的只读模板。可以从压缩文件导入或从仓库下载,我们可以在本地已有镜像的基础上自定义镜像。
以下载Ubuntu镜像为例:

1
docker pull ubuntu

2

通过docker images命令查询已经下载的镜像,我们发现之前的Hello-world和ubuntu都查询成功了。
默认如果不指定tag,下载的就是最新的latest, 相当于docker pull ubuntu:latest, 如果下载指定版本,比如14.04,命令为docker pull ubuntu:14.04
3

再次查询一下,发现有两个ubuntu镜像,但是TAG不一样,并且他们的IMAGE ID也不一样,是两个不同的镜像。
如果我们不需要ubuntu:14.04镜像了,可以通过docker rmi f216cfb59484命令进行删除:
4

删除后,查询一下,发现ubuntu:14.04镜像不见了,说明删除成功。
现在运行一下镜像ubuntu:latest,命令为:

1
docker run -ti ubuntu /bin/bash

5

运行成功后,自动创建了一个容器并运行,可以输入简单的Linux命令,比如ls。可以添加一个新文件,然后创建一个新的镜像。
6

首先创建一个文件:然后退出:

1
2
touch test.txt
exit

记录容器ID为4040e711b2a3之后,执行命令

1
docker commit -m "Add test.txt" -a "beyondspider" 4040e711b2a3 ubuntu:test

在ubuntu:latest镜像基础上创建了一个新的镜像ubuntu:test。
可以把刚才创建的镜像导出到本地压缩文件,或者上传到Docker Hub,这里就不做演示了。

容器(Container)

Docker容器类似于一个轻量级的沙箱,可以看作简易版的Linux系统环境,容器是从镜像创建的实例,会在镜像的最上层创建一个可写层,镜像是只读的,不会改变。
一个镜像可以创建多个容器,不同容器是相互隔离互不可见的。可以对容器进行启动、停止、删除等操作。
刚才的命令

1
docker run -ti ubuntu /bin/bash

其实包括两个动作,首先执行了命令创建容器:

1
docker create -ti ubuntu /bin/bash

然后执行了命令运行容器:

1
docker start

首先docker ps -a查询一下刚才创建的容器。
7

继续运行一下:

1
docker start -i 4040e711b2a3

8

我们发现和刚才的效果一样的,并且test.txt文件还在,说明容器是可写的。继续创建并运行一个新的容器:
9

我们发现新的容器8f4c252c6b0c没有test.txt文件,说明不同的容器直接是隔离的。
如果我们不需要8f4c252c6b0c容器了,可以通过docker rm 8f4c252c6b0c命令进行删除:
10

删除后,查询一下,发现8f4c252c6b0c容器不见了,说明删除成功。

小结

通常我们可以从Docker Hub下载一个镜像,然后根据镜像创建容器并运行,在容器中自定义功能后,创建新的镜像,然后上传新的镜像到服务器。下次继续分享制作镜像的详情内容,欢迎交流。