简介
上一篇文章介绍了docker安装,并演示了HelloWorld。今天主要介绍一下镜像管理相关知识,分为三大部分:镜像、容器、仓库,首先看一下关系图:
仓库(Repository)
仓库是存放镜像的地方,每个仓库集中存放某一类镜像,比如存放Ubuntu镜像的仓库叫做Ubuntu仓库,可能包括14.04、16.04、latest等版本,通过tag区分。这些仓库可以存放在公开服务器Registry上面,可以搭建私有服务器。官方的服务器为Docker Hub, 网址为:https://hub.docker.com。 如果网络访问不方便,可以采用国内镜像网站。
自己可以注册账号,上传自定义镜像到服务器,共享给他人下载。
镜像(Image)
Docker镜像类似于虚拟机镜像, 可以理解成包含了文件系统的只读模板。可以从压缩文件导入或从仓库下载,我们可以在本地已有镜像的基础上自定义镜像。
以下载Ubuntu镜像为例:
1 | docker pull ubuntu |
通过docker images命令查询已经下载的镜像,我们发现之前的Hello-world和ubuntu都查询成功了。
默认如果不指定tag,下载的就是最新的latest, 相当于docker pull ubuntu:latest, 如果下载指定版本,比如14.04,命令为docker pull ubuntu:14.04
再次查询一下,发现有两个ubuntu镜像,但是TAG不一样,并且他们的IMAGE ID也不一样,是两个不同的镜像。
如果我们不需要ubuntu:14.04镜像了,可以通过docker rmi f216cfb59484命令进行删除:
删除后,查询一下,发现ubuntu:14.04镜像不见了,说明删除成功。
现在运行一下镜像ubuntu:latest,命令为:
1 | docker run -ti ubuntu /bin/bash |
运行成功后,自动创建了一个容器并运行,可以输入简单的Linux命令,比如ls。可以添加一个新文件,然后创建一个新的镜像。
首先创建一个文件:然后退出:
1 | touch test.txt |
记录容器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查询一下刚才创建的容器。
继续运行一下:
1 | docker start -i 4040e711b2a3 |
我们发现和刚才的效果一样的,并且test.txt文件还在,说明容器是可写的。继续创建并运行一个新的容器:
我们发现新的容器8f4c252c6b0c没有test.txt文件,说明不同的容器直接是隔离的。
如果我们不需要8f4c252c6b0c容器了,可以通过docker rm 8f4c252c6b0c命令进行删除:
删除后,查询一下,发现8f4c252c6b0c容器不见了,说明删除成功。
小结
通常我们可以从Docker Hub下载一个镜像,然后根据镜像创建容器并运行,在容器中自定义功能后,创建新的镜像,然后上传新的镜像到服务器。下次继续分享制作镜像的详情内容,欢迎交流。