【说人话】Docker中容器和镜像的关系

原文链接如下,本篇文章根据自己的理解,重新整合了文章中的精华部分:

Docker中容器和镜像的关系【通俗易懂】:https://blog.51cto.com/zhaoshilei/2474706

自己初学Docker时,身为小白的自己对Docker中的容器与镜像感到迷惑,二者的关系经常傻傻分不清楚,参考了官方文档与各路大佬的博客文章后,有了些许的认识:

首先要知道一个完整的docker由以下4部分组成:

  • Docker Client客户端

  • Docker Daemon守护进程

  • Docker Image镜像

  • Docker Container容器

另外,整个Docker的生命周期是由三部分组成的:镜像(image) + 容器(container)+ 仓库(repository)

docker镜像实际上是由一层一层的系统文件组成,这种层级的文件系统被称为Union FS(Union file system 统一文件系统),镜像可以基于dockerfile构建,dockerfile是一个描述文件,里面包含了若干条密令,每条命令都会对基础文件系统创建新的层次结构。

有了上面的基本知识后,再结合下面的这张图就可以理清二者的关系啦:

在这里插入图片描述

结合上面的图,我们很容易得到如下结论:

Docker容器 = 镜像 + 读写层

容器是由镜像实例化而来的。

简单来说,镜像文件,容器是进程。

容器是基于镜像创建的, 即容器中的进程依赖镜像中的文件。

上面三句话可以按照下面的文字去理解:

docker的镜像概念类似虚拟机的镜像。它是一个只读模版,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

docker利用容器来运行应用,即docker容器是 由docker镜像创建的运行实例。

docker容器类似虚拟机,可以执行包含启动(start)、停止(stop)、重启(restart)、删除(remove)等操作。每个容器间又是相互隔离的。其中,每一个容器会运行特定的应用,当然每个容器还包含特定应用的代码及所需的依赖文件。

因此,我们可以把容器看作是一个小型简易版的linux环境(包含root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

上面提到过,docker的生命周期由三个部分组成——镜像、容器与仓库,其中最核心的两个部分为镜像(image)与容器(container)

我们可以认为镜像运行起来就是容器。为什么这么说呢?

这是因为docker提供了一个很简单的机制来创建镜像或更新现有的镜像。用户甚至可以从其他人那里下载一个已经做好的镜像直接使用(镜像是只读的,可以理解为静态文件)。而容器相对于镜像来说它是动态的,容器在启动时创建了一层可写层作为最上层,因此容器基于镜像而又不同于镜像,容器的心脏是镜像,而四肢则是自定义的。

在容器服务运行的过程中,容器会基于原始镜像有所改变,比如安装了程序,添加了某些文件,当然也可以提交回去(commit)成为镜像。举个简单的例子:比如某个镜像只包含一个完整的ubuntu操作系统,那么基于该镜像的某个容器可以在此基础上安装substrate工具开发区块链,而基于该镜像的另一个容器则可以安装nginx服务器,对个人域名进行反向代理。


读到这,相信你对Docker中容器与镜像的关系就略懂一二了吧

猜你喜欢

转载自blog.csdn.net/LYBzhangYF/article/details/120117358