创buildDockerfile交互?

如果你看dockerfiles,通常会包含这样的行:

sed 's/main$/main universe/' -i /etc/apt/sources.list 

我认为这样做很难。

是否有可能启动一个默认的操作系统映像,然后用shellinput它,做一些修改,然后打印diff(filesystem diff)?

diff应该用作dockerfile来重新创build图像。

但也许我错过了一些东西,因为我是docker工人。

您可以通过多种方式创build泊坞窗图像。

当我创build一个新的docker图像时,我倾向于打开两个窗口。 一个是我的docker run -i -t centos bash ,在那里我正在写所有的命令来按照我想要的方式来得到它,另一个是Dockerfile,所以我可以放入任何我做的事情。 当涉及到configuration文件时,我将它们放在与图像上的文件/文件夹相匹配的文件/文件夹中。

例如,如果我更改/etc/something/file.conf ,我将在与我的Dockerfile相同的目录中的etc/something/file.conf中创build该文件,然后使用Dockers ADD命令在每次构build时添加它。

这工作得很好,因为我可以在一个包含我需要运行/构build映像所需的信息的README.md的git存储库中拥有所有这一切。


另一件你可以做的就是在完成你想创build一个映像的更改之后,运行docker ps -a ,并获取刚才configuration的容器映像的docker ID。 你可以标记这个新镜像,或者像docker run abc0123 bash一样docker run abc0123 bash

这样做的问题在于,如果不带下整个图像,下次你将无法轻松地构build它。

带ADD的Dockerfiles是要走的路!

如果您不想运行sed (用于保存默认文件并对其进行最小更改),则可以简单地添加修改文件。

为此,您可以docker run -it --rm thebaseimage /bin/sh (或提供的任何其他shell)并对其进行编辑。 然后将其复制到容器外(或者docker export )并在构build中使用它。

ADDRUN sed…的不利之处在于,如果基础镜像的新版本发生变化,您将覆盖这些更改。

Dockerfile(大部分)等同于一系列docker docker rundocker commit命令。 你不会想看docker diff来查看哪些文件发生了变化 – 你想看看发生了什么docker run命令。 您可以从您的主机shell历史logging中获得这些信息,并将它们处理成一个Dockerfile。