![eb35bfda78560ac90ab6985803aca1c0.png](https://i-blog.csdnimg.cn/blog_migrate/7f50891cf7a5c66ae980bc65895fb2ce.png)
这篇文章我们简单聊聊 docker 的镜像分层。
思考题
在第四篇文章容器与虚拟机中,我们说到 docker 其实就是把可执行程序及其所有的依赖打包成镜像文件,然后调用宿主机内核接口运行容器。可以想象,像 ubuntu等基础镜像,体积必然不小。那么,思考以下几个问题:
- 我们基于同一个镜像(ubuntu 18.4)启动了两个容器,会占用两倍磁盘空间吗?
- 我们在容器内修改或者新建了某个文件,要修改原镜像吗?
- 我们基于某镜像(ubuntu 18.04)新建一个镜像(myubuntu),需要将原镜像文件全部拷贝到新镜像中吗?
首先,让我们尝试思考下,如果我们去做,该如何高效的解决这些问题?
- 问题 1,只要将同一个镜像文件加载到内存不同位置就行了,没必要在磁盘上存储多份,可以节省大量存储空间。
- 问题 2,我们可以参考 Linux 内核管理内存的 Copy-On-Write 策略,也即读时大家共用一份文件,如果需要修改再复制一份进行修改,而大部分文件是其实不会修改的,这样可以最大限度节省空间,提升性能。
- 问题 3,我们可以将