Dockerfile优化镜像大小

本文探讨了如何通过简化RUN指令、丢弃不必要的输出、利用多阶段构建等方法,显著减少Docker镜像大小,提升构建效率。实例展示了从基本构建到高级优化的步骤和效果对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、无优化构建镜像

二、不需要输出的指令丢入/dev/null

三、减少RUN构建

四、多阶段构建


一、无优化构建镜像

[root@docker ~]#mkdir /mnt/nginx
[root@docker ~]#cd /mnt/nginx/ 
[root@docker nginx]#vim Dockerfile

FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
#关闭debug日志
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc 
RUN ./configure --prefix=/usr/local/nginx 
RUN make
RUN make install
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@docker nginx]#docker build -t nginx:v1 .
#构建镜像
[root@docker nginx]#docker images   #查看大小
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        v1        61893d48f2cf   6 minutes ago   469MB  

二、不需要输出的指令丢入/dev/null

[root@docker ~]#mkdir /mnt/nginx
[root@docker ~]#cd /mnt/nginx/
[root@docker nginx]#rz -E
rz waiting to receive.
[root@docker nginx]#ls
nginx-1.22.0.tar.gz
[root@docker nginx]#vim Dockerfile

FROM centos:7
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && yum clean all
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc
RUN ./configure --prefix=/usr/local/nginx &> /dev/null
RUN make &> /dev/null
RUN make install &> /dev/null
RUN rm -rf /mnt/nginx/nginx-1.22.0
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx""-g","daemon off;"]

[root@docker nginx]#docker build -t nginx:v2 .
#构建镜像
[root@docker nginx]#docker images   #查看大小对比发现减少了100多MB
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginx        v2        fd74f489dc08   About a minute ago   311MB

 

三、减少RUN构建

[root@docker nginx]#vim Dockerfile
FROM centos:7
ADD nginx-1.22.0.tar.gz /mnt/nginx
WORKDIR /mnt/nginx/nginx-1.22.0
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
 yum clean all && \
 sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
 ./configure --prefix=/usr/local/nginx &> /dev/null && \
 make &> /dev/null && make install &> /dev/null &&\
 rm -rf /mnt/nginx/nginx-1.22.0
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@docker nginx]#docker build -t nginx:v3 .
#构建镜像
[root@docker nginx]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginx        v3        2247fd0e7f54   About a minute ago   309MB
nginx        v2        fd74f489dc08   11 minutes ago       311MB

 

四、多阶段构建

[root@docker nginx]#vim Dockerfile

FROM centos:7 as build 
ADD nginx-1.22.0.tar.gz /mnt/nginx 
WORKDIR /mnt/nginx/nginx-1.22.0
RUN yum install -y gcc pcre pcre-devel devel zlib-devel make &> /dev/null && \
yum clean all &&\
sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && \
./configure --prefix=/usr/local/nginx &> /dev/null && \
make &>/dev/null && \
make install &>/dev/null && \
rm -rf /mnt/nginx/nginx-1.22.0
FROM centos:7
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
COPY --from=build /usr/local/nginx /usr/local/nginx
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

[root@docker nginx]#docker build -t nginx:v4 .
#构建镜像
[root@docker nginx]#docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        v4        39550a9162bc   11 minutes ago   205MB
nginx        v3        2247fd0e7f54   19 minutes ago   309MB
nginx        v2        fd74f489dc08   28 minutes ago   311MB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值