将Dockerfile转换为Bash脚本

15

是否有简单的方法将Dockerfile转换为Bash脚本,以便在实际操作系统上安装所有软件?原因是Docker容器我无法更改,我希望之后可以更改一些东西,如果它们没有起作用。


你可以自己运行Dockerfile中的命令,但是你不能将其基于的镜像“转换”为脚本。如果你不喜欢Docker镜像的工作方式,修改Dockerfile并重试即可。 - Etan Reisner
4个回答

6
简而言之 - 不行。
通过像 dockerfile-parse 这样的工具解析 Dockerfile,您可以运行单独的 RUN 命令,但这不会复制 Dockerfile 的输出。
您必须正在运行相同版本的相同操作系统。 ADDCOPY 命令影响文件系统,该文件系统处于自己的命名空间中。在容器外运行这些命令可能会破坏主机系统。您的主机还将在容器映像中不存在的位置上有文件。 VOLUME 挂载也会影响文件系统。 FROM 映像(可能又是其他映像的后代)可能已安装其他应用程序。
如果存在大型安装或下载步骤,则编写 Dockerfile 可能是一个缓慢的过程。为了减轻这种情况,请尝试将新软件包作为新的 RUN 命令添加(以利用缓存),并逐步添加功能,只有在功能完成时才优化/压缩层。
你可能还想使用类似ServerSpec这样的工具来获取针对容器镜像的TDD方法,以防止开发过程中的回归。
最佳实践文档在此处注意事项原始文章

3
当然,您可以将Dockerfile转换为bash脚本命令。这只是确定翻译意思的问题。所有Docker安装都会应用更改到“文件系统层”,这意味着所有更改都可以在真实的操作系统中实现。
这个过程的一个例子在这里: https://github.com/thatkevin/dockerfile-to-shell-script 这是如何进行翻译的示例。

3
基本上,您可以使用“docker export”复制Docker容器的文件系统,然后将其写入循环设备:
docker build -t <YOUR-IMAGE> ...
docker create --name=<YOUR-CONTAINER> <YOUR-IMAGE>
dd if=/dev/zero of=disk.img bs=1 count=0 seek=1G
mkfs.ext2 -F disk.img
sudo mount -o loop disk.img /mnt
docker export <YOUR-CONTAINER> | sudo tar x -C /mnt
sudo umount /mnt

将Docker容器转换为原始文件系统映像。
更多信息请参见: http://mr.gy/blog/build-vm-image-with-docker.html

0

您可以像这样在Dockerfile中安装应用程序

FROM <base>

RUN apt-get update -y
RUN apt-get install <some application> -y

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接