在 Docker 构建过程中从主机复制文件以最小化图像大小

Omr*_*oth 5 docker

我正在创建一个容器映像,其中安装了两个大型(10GB)应用程序。我目前正在使用:

COPY <installer.file> <dest>

RUN <install application> \
   && rm <application installer file>
Run Code Online (Sandbox Code Playgroud)

然而,我的印象是,如果我能够做到以下几点:

RUN cp <installer files from host> \
   && <install application> \
   && rm <application installer file>
Run Code Online (Sandbox Code Playgroud)

我的图像文件会小得多。(澄清一下,这将删除其中包含安装程序文件的层。)

我知道在构建过程结束之前不会安装卷 - 还有其他方法可以做到这一点吗?

Mih*_*hai 2

您可以使用多阶段构建:

FROM some_image as build

COPY <installer.file> <dest>

RUN <install application> \
   && rm <application installer file>

FROM some_image

COPY --from=build / /
Run Code Online (Sandbox Code Playgroud)

这样,您的最终映像仅包含已安装的应用程序,而不包含中间层。

在最后一行中,您还可以仅复制实际安装应用程序的文件夹。