创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中使用它。
ADD
和RUN sed…
的不利之处在于,如果基础镜像的新版本发生变化,您将覆盖这些更改。
Dockerfile(大部分)等同于一系列docker docker run
和docker commit
命令。 你不会想看docker diff
来查看哪些文件发生了变化 – 你想看看发生了什么docker run
命令。 您可以从您的主机shell历史logging中获得这些信息,并将它们处理成一个Dockerfile。