通州网站建设电话,二次开发是什么意思,网站开发费用记账,重庆网红景点排名Docker镜像的内部机制 镜像就是一个打包文件#xff0c;里面包含了应用程序还有它运行所依赖的环境#xff0c;例如文件系统、环境变量、配置参数等等。 环境变量、配置参数这些东西还是比较简单的#xff0c;随便用一个 manifest 清单就可以管理#xff0c;真正麻烦的是文… Docker镜像的内部机制 镜像就是一个打包文件里面包含了应用程序还有它运行所依赖的环境例如文件系统、环境变量、配置参数等等。 环境变量、配置参数这些东西还是比较简单的随便用一个 manifest 清单就可以管理真正麻烦的是文件系统。为了保证容器运行环境的一致性镜像必须把应用程序所在操作系统的根目录也就是 rootfs都包含进来。 虽然这些文件里不包含系统内核(因为容器共享了宿主机的内核)但如果每个镜像都重复做这样的打包操作仍然会导致大量的冗余。可以想象如果有一千个镜像都基于 Ubuntu 系统打包那么这些镜像里就会重复一千次 Ubuntu 根目录对磁盘存储、网络传输都是很大的浪费。 很自然的我们就会想到应该把重复的部分抽取出来只存放一份 Ubuntu 根目录文件然后让这一千个镜像以某种方式共享这部分数据。 这个思路也正是容器镜像的一个重大创新点分层术语叫“Layer”。 容器镜像内部并不是一个平坦的结构而是由许多的镜像层组成的每层都是只读不可修改的一组文件相同的层可以在镜像之间共享然后多个层像搭积木一样堆叠起来再使用一种叫“Union FS 联合文件系统”的技术把它们合并在一起就形成了容器最终看到的文件系统。 命令 docker inspect 来查看镜像的分层信息比如 nginx:alpine 镜像 docker inspect nginx:alpine 它的分层信息在“RootFS”部分 通过这张截图就可以看到nginx:alpine 镜像里一共有 6 个 Layer。 现在你也就明白之前在使用 docker pull、docker rmi 等命令操作镜像的时候那些“奇怪”的输出信息是什么了其实就是镜像里的各个 Layer。Docker 会检查是否有重复的层如果本地已经存在就不会重复下载如果层被其他镜像共享就不会删除这样就可以节约磁盘和网络成本。