Docker映像是通过基础映像通过层创建的,在导出过程中,每一层都被转储到最终存档中。
从理论上讲(对于本地开发环境而言),它可以节省驱动器空间。
分层是否可以改善容器的旋转时间?我可以想象,如果它们共享基本映像并且已经在运行中,则您可能无法解压缩1-2 GB的现代“ mikro服务”映像。
分层是否可以节省RAM?
我认为Docker分层是胡扯。我无法想象真正的Big Cloud提供商中的容器管理器会关心在物理主机上旋转具有与已经工作的容器相同的基本映像的容器。
直到最近Google才提供96种vCPU。我不知道通常的vCPU配置,但是可以想象,大型厂商要求使用4-8-16个vCPU,而这是每台主机所有可用CPU资源的一半/四分之一。容器管理器(例如Kubernates / Mesos)真的不仅考虑到可用资源,而且还考虑到了已经在使用的基本映像吗?
答案 0 :(得分:1)
我认为您对docker图像层感到困惑。
首先,它们不会被存档或打包(仅当您将其导出到tarball中时)。节省空间不是docker层的主要目的。
但是仍然会。就像您要运行4个MySQL容器一样,docker不会创建要运行4次MySQL的文件副本。另一个好处是可重用性。
例如,如果您有两个图像,并且两个图像都使用ubuntu:latest
图像,即使您会看到图像大小,也可以说是500和600mb。由于ubuntu的图片大小约为250mb,因此您的实际图片大小分别约为250mb和450mb。
这在您更新映像并尝试将其部署到云中时会有所帮助。如果这些层已经在远程中,则Docker将不会推送整个映像。它将仅推送在最新图像中找到的修改后的图层。
第二件事,分层不会节省RAM。这完全取决于应用程序。层只是文件系统。这提供了运行应用程序所需的文件。