【问题标题】:Propgate changes from base image to "child" image, Docker将更改从基本映像传播到“子”映像,Docker
【发布时间】:2015-10-19 14:19:40
【问题描述】:

我正在使用docker,我想知道是否可以将更改传播到基本图像的“子”图像。希望下面的一系列操作可以更清楚地说明我的意思。

docker run -i -t baseimage               // start up baseimage

<detach while leaving baseimage running>

docker commit <baseimage id> childimage  // new image created from baseimage

docker run -i -t baseimage               // start up baseimage

touch test.txt                           // make some small change

<detach while leaving baseimage running>

docker commit <baseimage id> baseimage   // save base image

docker run -i -t childimage              // start up childimage

ls test.text                             // test.txt isn't there

我想这样做的原因是我有一个基础图像,我从中创建了几个子图像。只有在我创建了子图像之后,我才意识到我需要在所有这些图像上安装 java。对我来说,以某种方式将 java 安装到基础映像并将其传播给“孩子”会容易得多,而不是遍历每个子映像并安装 java。

我承认我是 docker 新手,这可能吗?如果不是,您将如何一次修改多个具有相同更改的图像?那可能吗?谢谢。

【问题讨论】:

  • 当您设计 docker 继承层次结构时,无需手动传播任何内容,因为子项会在实例化时自动获取其父 docker 文件的任何内容。
  • 并非如此。由子镜像创建的容器没有从基础镜像继承 test.txt 文件
  • 是的,因为你没有读过我的第一句话“当你设计你的 docker 继承层次结构时”——使用 Dockerfile。
  • 即使您基于 Dockerfile 构建镜像,您仍然需要重新构建子镜像,然后才能将父镜像中的更改考虑在内。

标签: linux docker parent-child propagation image-file


【解决方案1】:

运行 docker 容器与以“实例”类型的方式创建它们的图像相关。这意味着您不能以预期的方式“传播”变化。 你最好使用Dockerfile 来描述如何构建你的 docker 镜像,而不是手动修改正在运行的容器。

【讨论】:

  • 谢谢。看起来 dockerfile 是要走的路。
【解决方案2】:

没有。

容器是短暂的,您可以将它们扔掉并重新开始,而不是尝试修补它们。

改为使用 Dockerfile 为您的容器创建映像。当您想要进行更改时,请更新 Dockerfile 并将旧容器替换为新版本。

【讨论】:

  • 谢谢。我会做一个dockerfile
猜你喜欢
  • 2018-08-23
  • 2020-12-20
  • 2016-06-05
  • 2022-10-27
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多