如何传输单个图像层以便以后重建图像?

时间:2017-05-24 11:44:50

标签: image docker

由于docker图像由图层组成,而DockerFile创建的每个图像基本上都是图层集合(每个DockerFile行一个图层),我想知道是否可以提取相关图层,传输它们并使用这些图像重建图像图层以及基本图像。

这样可以在服务器上安全地创建单独的图像,仅传输相关的更改并重建生成的图像,这对于各种场景都是非常好的选择 - 包括我们正在考虑的场景。​​

3 个答案:

答案 0 :(得分:0)

Docker的文件系统和图层管理非常智能,可以为您完成此任务。

考虑这种情况,例如......创建一个Dockerfile FROM node:6.9.5并添加一些新的配置或库或其他。将生成的图像发布到Dockerhub ...称之为" my-user / my-image"仅举例来说。

现在转到已经有node:6.9.5图像的另一台计算机上。创建一个构建FROM my-user/my-image的新Dockerfile。构建此图像时,如果已经下载了node:6.9.5图像,Docker将不会再次下载catch (Exception $e) { $result->error = true; 图像。

这就是问题所在...... Docker图像层明确地相互关联。

如果图像中有3个图层(图层-a,图层-b,图层-c),则无法单独提取图层-b。这没有意义,因为layer-b依赖于layer-a的确切状态才能工作。同样,layer-c依赖于layer-b来工作。

每个连续层只是前一层与Dockerfile中下一条指令的结果之间的差异。

所以你想要做的事情的想法 - 提取图层 - 都不会像你想象的那样工作,并且已经由Docker本身处理。

答案 1 :(得分:0)

或许泊坞历史正是您所寻找的。它为您提供每个图层,通过更改触发它们的命令进行更改:

docker history myimagename
be51b77efb42        8 days ago          /bin/sh -c apt-get update && apt-get install    338.3 MB
4b137612be55        6 weeks ago         /bin/sh -c #(nop) ADD jessie.tar.xz in /        121 MB

请参阅:docker history

答案 2 :(得分:0)

我使用的简单直接版本是导出docker容器/图像,它基本上将所有图层折叠成单个图层。通过比较两个不同的图像(基本图像+当前图像),可以轻松地计算文件系统差异并创建文件系统“补丁”,该补丁可以基于基本图像进行分发和使用以重新创建当前图像。剩下的就是提交当前容器,我们就完成了。