当前位置:嗨网首页>书籍在线阅读

11-Docker分层

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

1.2.5 Docker分层

Docker分层协助用户管理在大规模使用容器时会遇到的一个大问题。想象一下,如果启动了数百甚至数千个to-do应用,并且每个应用都需要将文件的一份副本存储在某个地方。

可想而知,磁盘空间会迅速消耗光!默认情况下,Docker在内部使用写时复制(copy-on-write)机制来减少所需的硬盘空间量(见图 1-9)。每当一个运行中的容器需要写入一个文件时,它会通过将该项目复制到磁盘的一个新区域来记录这一修改。在执行Docker提交时,这块磁盘新区域将被冻结并记录为具有自身标识符的一个层。

13.png

图1-9 启动时复制与写时复制对比

这一部分解释了Docker容器为何能如此迅速地启动——它们不需要复制任何东西,因为所有的数据已经存储为镜像。

提示

写时复制是计算技术中使用的一种标准的优化策略。在从模板创建一个新的(任意类型)对象时,只在数据发生变化时才能将其复制进来,而不是复制整个所需的数据集。依据用例的不同,这能省下相当可观的资源。

图1-10展示了构建的to-do应用,它具有我们所感兴趣的3个层。因为层是静态的,所以如果用户需要更改更高层上的任何东西,都可以在想引用的镜像之上进行构建。在这个to-do应用中,我们从公开可用的node镜像构建,并将变更叠加在最上层。

所有这3个层都可以被多个运行中的容器共享,就像一个共享库可以在内存中被多个运行中的进程共享一样。对于运维人员来说,这是一项至关重要的功能,可以在宿主机上运行大量基于不同镜像的容器,而不至于耗尽磁盘空间。

想象一下,将所运行的to-do应用作为在线服务提供给付费用户。你可以将服务扩散给大量用户。如果是在开发中,你可以一次在本地机器上启动多个不同的环境。如果是在进行测试,你可以比之前同时运行更多测试,速度也更快。有了分层,所有这些东西都成为可能。

14.png

图1-10 Docker中to-do应用的文件系统分层

通过使用Docker构建和运行一个应用程序,读者开始见识到Docker能给工作流带来的威力。重现并共享特定的环境,并能在不同的地方落地,让开发过程兼具灵活性和可控性。