通过Docker Compose部署则仅需做出如下改动:image: antonyleons/ward image: mysql # 改为 image: docker.xxx.xyz/antonyleons/ward image: docker.xxx.xyz/library/mysql。
前文说过,如果想要用docker运行一个程序,则必须先获取到这个程序的镜像,比如,如果我想要运行一个nginx容器,就必须先有一个nginx镜像,我们可以基于同一个nginx镜像,启动多个nginx容器,就好比基于同一套nginx模板,启动了多个nginx服务一样,此处我们也可以类比着“虚拟机”去理解,程序镜像就好比虚拟机的“模板机镜像”,我们可以通过“模板机镜像”快速的创建出可运行的“虚拟机”,docker也差不多,只不过docker是通过“程序镜像”创建出可运行的“程序容器”,最终对外提供服务,镜像是磁盘中的文件,基于镜像创建出容器,运行的容器就是内存中的进程。
通过上述实验可知,当一个镜像有多个标签时,在执行docker rmi 标签名删除镜像时,其实只是删除了对应镜像的某一个标签而已,当一个镜像只有唯一一个标签时,docker rmi 标签名才会删除对应的镜像。
承接上篇的docker简介,实际上,镜像(image)其实就是容器(container)的模板,容器都是通过镜像创建的,所以镜像中包含启动容器所需要的所有文件系统结构和内容。简单来讲,镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。
在docker中,镜像是分层的,一个镜像是由一个层或多个层组成的,每个层都有对应的数据,镜像中的完整数据是由所有层的数据组合而成的,这样说可能不太容易理解,不如咱们先把镜像分层的概念放一边,先来看一个魔术玩具,这个魔术玩具也是分层的,通过这个玩具去类比着理解镜像的层,会比较直观一点,下图就是这个玩具的照片。