如何使docker图层成为单层图层

时间:2016-09-26 05:05:23

标签: docker artifactory

使用多个图层创建Docker镜像,我想将其转换为单层是否有任何docker构建命令来实现这个?我用谷歌搜索但无法找到任何东西

4 个答案:

答案 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/