使用 curl 优化 docker 图像构建大小
Optimize docker image build size with curl
我需要在 docker 上安装最新版本的 curl
使用以下内容时 docker 大小约为 140MB
FROM debian:10.7
RUN apt-get update && \
apt-get install --no-install-recommends -y curl wget ca-certificates
这里使用curl 7.64
使用以下
FROM debian:10.7
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.74.0 && \
./configure && make && make install && \
apt-get purge -y --auto-remove build-essential && \
docker 图像大小为 240MB
,我试图删除将大小从 440
减小到 240
的构建要素,有没有办法删除这个额外的 ~100MB
?
您应该将 rm -rf /var/lib/apt/lists/*
包含到您的 运行 指令中以删除 apt 索引文件,并可能包含 apt-get clean
以删除任何其他剩余的包文件。
除此之外,您还可以尝试使用 slim 图像版本,根据 Docker Hub debian:10.7-slim 几乎是一半大小(~24Mb vs ~48Mb)
最后,您可以从生成的映像中在容器上执行 du -h | sort -h
以找出剩余的 space 用法。
事实上,您已经接近解决方案了。漏掉的是删除curl源码包
所以接下来应该使图像缩小:
FROM debian:10.7
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.73.0 && \
./configure && make && make install && \
apt-get purge -y --auto-remove build-essential && \
cd .. && rm -fr curl-7.73.0.tar.gz curl-7.73.0
没有卷曲:
$ docker images abc:1
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 1 d742bfdf5fa6 25 seconds ago 148MB
使用 curl & 源包删除:
$ docker images abc:2
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 2 afe3d404852a 27 minutes ago 151MB
另外,如果在Dockerfile中用rm -rf /var/lib/apt/lists/*
删除apt缓存,if会更小:
$ docker images abc:3
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 3 5530b0e9b44f 2 minutes ago 134MB
另一种解决方案可能使用 multistage-build,您可以使用 ./configure --prefix=xxx
设置默认安装位置,然后 stage1
仅用于构建 curl
,而 stage2
将 xxx 文件夹从 stage1
复制到最终图像。
按照 atline 的建议使用多阶段构建:
FROM debian:10.7 AS builder
WORKDIR /app
RUN mkdir /app/usr2
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.73.0 && \
./configure --prefix=/app/usr2 && make install
FROM debian:10.7
RUN apt-get update && \
apt-get install --no-install-recommends -y wget ca-certificates &&\
rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/usr2/. /usr
最终大小为 129MB
我需要在 docker 上安装最新版本的 curl
使用以下内容时 docker 大小约为 140MB
FROM debian:10.7
RUN apt-get update && \
apt-get install --no-install-recommends -y curl wget ca-certificates
这里使用curl 7.64
使用以下
FROM debian:10.7
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.74.0 && \
./configure && make && make install && \
apt-get purge -y --auto-remove build-essential && \
docker 图像大小为 240MB
,我试图删除将大小从 440
减小到 240
的构建要素,有没有办法删除这个额外的 ~100MB
?
您应该将 rm -rf /var/lib/apt/lists/*
包含到您的 运行 指令中以删除 apt 索引文件,并可能包含 apt-get clean
以删除任何其他剩余的包文件。
除此之外,您还可以尝试使用 slim 图像版本,根据 Docker Hub debian:10.7-slim 几乎是一半大小(~24Mb vs ~48Mb)
最后,您可以从生成的映像中在容器上执行 du -h | sort -h
以找出剩余的 space 用法。
事实上,您已经接近解决方案了。漏掉的是删除curl源码包
所以接下来应该使图像缩小:
FROM debian:10.7
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.73.0 && \
./configure && make && make install && \
apt-get purge -y --auto-remove build-essential && \
cd .. && rm -fr curl-7.73.0.tar.gz curl-7.73.0
没有卷曲:
$ docker images abc:1
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 1 d742bfdf5fa6 25 seconds ago 148MB
使用 curl & 源包删除:
$ docker images abc:2
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 2 afe3d404852a 27 minutes ago 151MB
另外,如果在Dockerfile中用rm -rf /var/lib/apt/lists/*
删除apt缓存,if会更小:
$ docker images abc:3
REPOSITORY TAG IMAGE ID CREATED SIZE
abc 3 5530b0e9b44f 2 minutes ago 134MB
另一种解决方案可能使用 multistage-build,您可以使用 ./configure --prefix=xxx
设置默认安装位置,然后 stage1
仅用于构建 curl
,而 stage2
将 xxx 文件夹从 stage1
复制到最终图像。
按照 atline 的建议使用多阶段构建:
FROM debian:10.7 AS builder
WORKDIR /app
RUN mkdir /app/usr2
RUN apt-get update && \
apt-get install --yes --no-install-recommends wget build-essential ca-certificates libcurl4 && \
wget https://curl.se/download/curl-7.73.0.tar.gz && \
tar -xvf curl-7.73.0.tar.gz && cd curl-7.73.0 && \
./configure --prefix=/app/usr2 && make install
FROM debian:10.7
RUN apt-get update && \
apt-get install --no-install-recommends -y wget ca-certificates &&\
rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/usr2/. /usr
最终大小为 129MB