使用多个图层创建Docker镜像,我想将其转换为单层是否有任何docker构建命令来实现这个?我用谷歌搜索但无法找到任何东西
答案 0 :(得分:2)
我刚刚通过使用多阶段构建来解决方法(最后一个构建将只是前一个构建的 COPY
)
FROM alpine as build1
RUN echo "The 1st Build"
FROM scratch
COPY --from=build1 / /
答案 1 :(得分:1)
没有命令实现这一点,单层图像违背了docker的设计理念。这个Understand images, containers, and storage drivers doc描述了为什么泊坞窗图像有多个图层。简而言之,图像图层are one of the reasons Docker is so lightweight. When you change a Docker image, such as when you update an application to a new version, a new layer is built and replaces only the layer it updates.
此外,即使您的图像只有一个图层,当您使用该图像创建容器时,docker仍会在图像图层的顶部添加一个薄的可读/可写容器图层。
如果您只想移动图像并认为单个图层可以使其更容易,您可能应该尝试使用docker save命令来创建它的tar文件。
或者您有更复杂的要求,您可能需要使用VM映像而不是docker映像。
答案 2 :(得分:1)
第一个选项:
# docker image build .
# docker run <your-image>
# docker container export <container-id created from previous command> -o myimage.tar.gz
# docker image import myimage.tar.gz
导入的图像将是单层文件系统图像。
第二个选项:(不是完整的解决方案)-使用multi stage builds减少图像层数。
答案 3 :(得分:0)
在构建过程中,我们还可以传递--squash选项以使其成为单层图像。
实验(守护程序)API 1.25 +
将新建的层压缩为一个新层 https://docs.docker.com/engine/reference/commandline/image_build/