创建Dockerfile交互式?

时间:2014-06-24 21:09:53

标签: containers docker

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

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

我认为很难设置这样的东西。

是否可以启动默认的操作系统映像,然后使用shell进行交互,进行一些修改,然后打印出diff(文件系统差异)?

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

但也许我错过了什么,因为我是码头工的新手。

3 个答案:

答案 0 :(得分:3)

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

当我创建一个新的docker镜像时,我倾向于打开两个窗口。一个用于我的docker run -i -t centos bash,我在那里编写所有命令以按照我想要的方式获取它,另一个用Dockerfile编写,所以我可以放入我做的任何事情。 在配置文件时,我将它们放在与图像上的文件/文件夹匹配的文件/文件夹中。

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

这非常有效,因为我可以在一个带有README.md的git存储库中包含所有这些,其中包含运行/构建映像所需的信息。


您可以做的另一件事是在完成要创建映像的更改后运行docker ps -a,并获取刚刚配置的容器映像的docker ID。您可以标记此新图片,或者使用docker run abc0123 bash启动它,就像使用普通泊坞窗图片一样。

问题在于,如果不带整张图像,下次就无法轻松构建它。

使用ADD的Dockerfiles是要走的路!

答案 1 :(得分:1)

如果您不想运行sed(用于保留默认文件及对其进行最小更改),您只需添加修改文件即可。

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

ADD vs RUN sed…的缺点是,如果新版本的基本图片出现问题,您将覆盖这些更改。

答案 2 :(得分:0)

Dockerfile(大部分)等同于一系列docker rundocker commit命令。您不希望查看docker diff以查看更改了哪些文件 - 您希望查看已发生的docker run个命令。您可以从主机shell历史记录中获取这些内容并将它们处理为Dockerfile。