首页 > 解决方案 > Docker 多阶段构建 - 排除 .git 文件夹

问题描述

我想做一个 docker 多阶段构建,但 rm/ignore .git 文件夹,以节省 docker 映像的空间。

FROM ubuntu as first
WORKDIR /app
RUN git clone <repo>

FROM golang as second
WORKDIR app
COPY --from=first /app .

COPY 是否有一些 --exclude 选项?这是一个相关问题:https ://forums.docker.com/t/dockerignore-in-multi-stage-builds/57169

另一种可能性是手动删除 .git 文件夹:

FROM ubuntu as first
WORKDIR /app
RUN git clone <repo>
RUN rm -rf .git

我假设多阶段构建从另一个阶段复制“最终层”?

标签: gitdockerdocker-multi-stage-build

解决方案


从构建中排除文件的一种方法是使用.dockerignore 文件。但是,这可能不是您在准备映像期间运行 git clone所需要的,因此您实际上需要该.git文件夹。

如果您想使用多阶段构建,那么您需要将上一个构建的工件而不是层复制到下一个构建。

另一个想法是运行一个浅克隆——git clone --depth=1这应该会显着减少存储库的大小。


推荐阅读