有没有简单的方法将Dockerfile转换为Bash脚本,以便在真实操作系统上安装所有软件?原因是我不能改变码头工人的容器,如果他们没有成功,我希望事后改变一些东西。
答案 0 :(得分:2)
简而言之 - 不。
通过使用诸如dockerfile-parse之类的工具解析Dockerfile,您可以运行单独的RUN
命令,但这不会复制Dockerfile的输出。
您必须运行相同操作系统的相同版本。
ADD
和COPY
命令会影响文件系统,该文件系统位于自己的命名空间中。在容器外部运行这些可能会破坏您的主机系统。您的主机也会在容器映像不存在的位置放置文件。
VOLUME
次坐载也会影响filesytem。
FROM
图像(可能是其他图像的后果)可能还安装了其他应用程序。
如果有大型安装或下载步骤,编写Dockerfiles可能会很慢。为了缓解这种情况,请尝试将新软件包添加为新的RUN
命令(以利用缓存)并逐步添加功能,仅在功能完成时优化/压缩层。
您可能还希望使用类似ServerSpec的内容来获取容器图像的TDD方法,并防止在开发过程中出现回归。
最佳做法文档here,gotchas和original article。
答案 1 :(得分:2)
基本上,您可以使用“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容器转换为原始文件系统映像。
答案 2 :(得分:1)
您当然可以将 Dockerfile 转换为 bash 脚本命令。这只是确定翻译的含义的问题。所有 docker 安装,将更改应用于“文件系统层”,这意味着所有更改都可以在真实操作系统中实现。
此过程的示例如下: https://github.com/thatkevin/dockerfile-to-shell-script 这是您将如何进行翻译的示例。
答案 3 :(得分:0)
您可以像这样在
中安装dockerfile中的应用程序FROM <base>
RUN apt-get update -y
RUN apt-get install <some application> -y