由于docker图像由图层组成,而DockerFile创建的每个图像基本上都是图层集合(每个DockerFile行一个图层),我想知道是否可以提取相关图层,传输它们并使用这些图像重建图像图层以及基本图像。
这样可以在服务器上安全地创建单独的图像,仅传输相关的更改并重建生成的图像,这对于各种场景都是非常好的选择 - 包括我们正在考虑的场景。
答案 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容器/图像,它基本上将所有图层折叠成单个图层。通过比较两个不同的图像(基本图像+当前图像),可以轻松地计算文件系统差异并创建文件系统“补丁”,该补丁可以基于基本图像进行分发和使用以重新创建当前图像。剩下的就是提交当前容器,我们就完成了。