Docker 多阶段构建 - 排除 .git 文件夹
Docker multi-stage build - exclude .git folder
我想做一个 docker 多阶段构建,但是 rm/ignore .git 文件夹,以在 docker 图像上保存 space。
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
我假设多阶段构建从另一个阶段复制了 "final layer"?
从构建中排除文件的方法之一是使用 .dockerignore file。但是,这可能不是您所需要的,因为您在 映像准备期间 运行 正在 git 克隆 ,因此您实际上需要 .git
文件夹。
如果您想使用多阶段构建,那么您需要复制的是工件,而不是前一个构建到下一个构建的层。
另一个想法是 运行 一个浅层克隆 - git clone --depth=1
- 这应该会显着减少存储库的大小。
我意识到我在 OP 中寻求的这种技术根本行不通。大多数人将需要 .git 文件夹来签出正确的提交。克隆整个 repo 的重点是缓存它,以便我们可以在下次构建时检查所需的提交。
因此,我没有做我在 OP 中尝试做的事情,而是我过去使用的一种技术来获得良好的缓存和生成小图像,是这样的:
WORKDIR /app
ADD 's3://url/to/just/package.json' /app/package.json
RUN npm install --production
ARG commit_id
RUN aws s3 cp -c . 's3://url/to/whole/tarball'
所以如果 package.json 没有改变,你可以缓存依赖项,当你做一个构建时,你用 TTL 将精简的 tarball 推送到 s3,然后构建系统可以将 tarball 拉到图片。 tarball 没有 git 文件夹,可以根据需要排除一堆其他文件,这些文件通常由版本控制跟踪。
我想做一个 docker 多阶段构建,但是 rm/ignore .git 文件夹,以在 docker 图像上保存 space。
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
我假设多阶段构建从另一个阶段复制了 "final layer"?
从构建中排除文件的方法之一是使用 .dockerignore file。但是,这可能不是您所需要的,因为您在 映像准备期间 运行 正在 git 克隆 ,因此您实际上需要 .git
文件夹。
如果您想使用多阶段构建,那么您需要复制的是工件,而不是前一个构建到下一个构建的层。
另一个想法是 运行 一个浅层克隆 - git clone --depth=1
- 这应该会显着减少存储库的大小。
我意识到我在 OP 中寻求的这种技术根本行不通。大多数人将需要 .git 文件夹来签出正确的提交。克隆整个 repo 的重点是缓存它,以便我们可以在下次构建时检查所需的提交。
因此,我没有做我在 OP 中尝试做的事情,而是我过去使用的一种技术来获得良好的缓存和生成小图像,是这样的:
WORKDIR /app
ADD 's3://url/to/just/package.json' /app/package.json
RUN npm install --production
ARG commit_id
RUN aws s3 cp -c . 's3://url/to/whole/tarball'
所以如果 package.json 没有改变,你可以缓存依赖项,当你做一个构建时,你用 TTL 将精简的 tarball 推送到 s3,然后构建系统可以将 tarball 拉到图片。 tarball 没有 git 文件夹,可以根据需要排除一堆其他文件,这些文件通常由版本控制跟踪。