#yyds干货盘点#Docker分层设计要点

网友投稿 261 2022-10-21

#yyds干货盘点#Docker分层设计要点

为了实现“一次构建,到处运行”的目标,我们需要把这些依赖全部打包到一起,以屏蔽环境的差异性。解决部署包过大使分发下载慢的问题,Docker引入了分层的概念。把一个应用分为任意多个层,比如操作系统是第一层,依赖的库和第三方软件是第二层,应用的软件包和配置文件是第三层。如果两个应用有相同的底层,就可以共享这些层。

为了避免冲突问题,Docker参考了Java的子类继承机制,设计了有优先级的层次,上层和下层有相同的文件和配置时,上层覆盖下层,以上层的数据为准。

在Docker的官方仓库里,只需有完整的文件系统和程序包,没有动态生成新文件的需求。当把它下载到宿主机上运行以对外提供服务时,有可能修改文件(比如应用启动参数、日志输出),需要有空白层用于写时拷贝。Docker把这两种不同的状态做了区分,分别叫作镜像(image)和容器(container)。

镜像是指分层的、可被LXC/Libcontainer 理解的文件存储格式。仓库中的应用都是以镜像的形式存在的,把镜像从Docker镜像仓库中下载到本地宿主机,以这个镜像为模板启动应用,就叫作容器。镜像是只读的,容器是可读写的。

Docker中的镜像分为基础镜像(base image)和扩展镜像。基础镜像为上层应用提供操作系统内核,通常是各种Linux发行版的Docker镜像,比如 Ubuntu、Debian、CentOS 等。Linux系统包含内核空间kernel和用户空间rootfs两部分,容器只使用各自的rootfs,但共用宿主机的kernel。一台宿主机上的所有容器都共用宿主机的kernel,在容器中无法对kernel升级。

若多个镜像从相同的基础镜像构建而来,那么Docker宿主机只需在磁盘上保存一份基础镜像,同时内存中也只需加载一份基础镜像,就可以为所有容器服务了,而且镜像的每一层都可以被共享。创建镜像时,分层可以让Docker只保存我们添加和修改的部分内容。

当一个容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。容器层可以读写,容器所有文件变更都发生在这一层,而镜像层只允许读取。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:五分钟带你快速学习Spring IOC
下一篇:初识kubernetes1——安装K8S集群
相关文章

 发表评论

暂时没有评论,来抢沙发吧~