Docker中镜像与容器之间的区别


容器与镜像图解

什么是镜像?

  镜像就是一堆只读层的统一视角(并非是一个单独的文件,而是具有层级结构)。

     如图所示,我们可以看见多个只读层,重叠在一起。除了最下面的一层,其他层都会有一个指针指向下一层。并且能够在主机(运行Docker的机器)的文件系统访问到。统一文件系统(union file system)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
 
你可以在你的主机文件系统上找到有关这些层的文件。需要注意的是,在一个运行中的容器内部,这些层是不可见的。在我的主机上,我发现它们存在于/var/lib/docker目录下。 

什么是容器?

  容器的定义和镜像的定义几乎一摸一样,也是一堆只读层的统一视角,唯一的区别在于容器最上面那一层是可读可写的。

 

要点:容器 = 镜像 + 可读层。并且容器的定义并没有提及是否要运行容器

总结:可以将镜像是文件,容器是进程。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件(镜像就是容器的系统文件),这里的文件包括进程运行所需要的可执行文件,依赖软件,库文件,配置文件等等。也可以将容器看做是镜像运行的一个实例,或者是文件与进程的关系。

每运行一个容器,都会在镜像上加一个可写层,但这一层并不会改变镜像本身,这也就是为什么,有时候你如果同一个镜像,启动多个容器,里面的内容不会变,但是如果将可写层持久化,就要通过commit命令来把可写层写到磁盘,即生成新的镜像。

  

 

 

 
原文地址:https://www.cnblogs.com/ltyc/p/14069618.html