Dockerfile 构建从最终图像中删除源代码
Dockerfile build remove source code from final image
我是 Docker 的新手。我想通过使用 make 命令构建一个 c++ 库来构建一个 docker 图像。我在 Docker 文件中的做法是
- 从主机复制源代码
- 安装所需的包
- 运行 使
- 将库 (.so) 复制到图像中的不同文件夹中
- 删除源代码
Docker文件代码写在下面
我面临的问题是,即使删除了源代码,最终图像还是很大。
由于Docker文件的每一行都创建了不同的层,所以有一种方法可以使用curl或wget下载源代码,然后删除同一层中的源代码。但我不喜欢这个解决方案。
FROM alpine
RUN apk update && apk add <required_packages>
COPY source_code /tmp/source_code
RUN make -C /tmp/source_code && \
mkdir /libraries/
cp /tmp/lib/* /libraries/
rm -rf /tmp/*
我只想最小化最终图像的大小。这是我这样做的正确方法还是有更好的方法?请帮忙。
您可以进行多阶段构建,并将工件复制到新图像上。还要安装任何必需的运行时依赖项(如果有)。
FROM alpine AS builder
RUN apk add --no-cache <build_dependencies>
COPY source_code /tmp/source_code
RUN make -C /tmp/source_code && \
mkdir /libraries/
cp /tmp/lib/* /libraries/
rm -rf /tmp/*
FROM alpine
RUN apk add --no-cache <runtime_dependencies>
COPY --from=builder /libraries/ /libraries/
除了使用多阶段 Docker 构建之外,另一种压缩生成图像的方法是使用 --squash
构建选项。图像构建命令行示例:
docker image build --squash -t your-image .
当删除 Docker 镜像中的文件时,文件本身并没有真正消失,而是保留在之前的 Docker 文件系统层中,因此它们仍然占用 space。
压缩会折叠图像的所有文件系统层,因此使用 rm
删除的文件将从生成的单层中删除。这是从图像中删除源代码并压缩它的有效方法。
请注意,在实验性 Docker 功能中压缩,必须 。
有关 docker build --squash
的更多详细信息,请参阅:
我是 Docker 的新手。我想通过使用 make 命令构建一个 c++ 库来构建一个 docker 图像。我在 Docker 文件中的做法是
- 从主机复制源代码
- 安装所需的包
- 运行 使
- 将库 (.so) 复制到图像中的不同文件夹中
- 删除源代码
Docker文件代码写在下面
我面临的问题是,即使删除了源代码,最终图像还是很大。
由于Docker文件的每一行都创建了不同的层,所以有一种方法可以使用curl或wget下载源代码,然后删除同一层中的源代码。但我不喜欢这个解决方案。
FROM alpine
RUN apk update && apk add <required_packages>
COPY source_code /tmp/source_code
RUN make -C /tmp/source_code && \
mkdir /libraries/
cp /tmp/lib/* /libraries/
rm -rf /tmp/*
我只想最小化最终图像的大小。这是我这样做的正确方法还是有更好的方法?请帮忙。
您可以进行多阶段构建,并将工件复制到新图像上。还要安装任何必需的运行时依赖项(如果有)。
FROM alpine AS builder
RUN apk add --no-cache <build_dependencies>
COPY source_code /tmp/source_code
RUN make -C /tmp/source_code && \
mkdir /libraries/
cp /tmp/lib/* /libraries/
rm -rf /tmp/*
FROM alpine
RUN apk add --no-cache <runtime_dependencies>
COPY --from=builder /libraries/ /libraries/
除了使用多阶段 Docker 构建之外,另一种压缩生成图像的方法是使用 --squash
构建选项。图像构建命令行示例:
docker image build --squash -t your-image .
当删除 Docker 镜像中的文件时,文件本身并没有真正消失,而是保留在之前的 Docker 文件系统层中,因此它们仍然占用 space。
压缩会折叠图像的所有文件系统层,因此使用 rm
删除的文件将从生成的单层中删除。这是从图像中删除源代码并压缩它的有效方法。
请注意,在实验性 Docker 功能中压缩,必须
有关 docker build --squash
的更多详细信息,请参阅: