如果查看dockerfiles,通常包含这样的行:
sed 's/main$/main universe/' -i /etc/apt/sources.list
我认为很难设置这样的东西。
是否可以启动默认的操作系统映像,然后使用shell进行交互,进行一些修改,然后打印出diff(文件系统差异)?
diff应该用作dockerfile来重新创建图像。
但也许我错过了什么,因为我是码头工的新手。
答案 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 run
和docker commit
命令。您不希望查看docker diff
以查看更改了哪些文件 - 您希望查看已发生的docker run
个命令。您可以从主机shell历史记录中获取这些内容并将它们处理为Dockerfile。