1

我正在使用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 新手,所以这可能吗?如果不是,您将如何一次修改多个具有相同更改的图像?那可能吗?谢谢。

4

2 回答 2

3

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

于 2015-07-28T20:27:25.963 回答
1

不。

容器是短暂的,你把它们扔掉然后重新开始,而不是试图修补它们。

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

于 2015-07-28T20:31:12.960 回答