docker(四)镜像的优化

构建镜像的几个原则

●选择最精简的基础镜像
选择体积最小的基础镜像可有效降低镜像体积。如:alpine、busybox等

●减少镜像的层数
镜像是一个分层存储的文件,并且镜像对层数也是有一定数量的限制,当前镜像的层数最高是127层,
如果不多加注意,将会导致镜像越来越臃肿。
在使用dockerfile构建镜像时,dockerfile中的每一条指令都会生成一个层,
因此可以通过合并dockerfile中可合并的指令,减少最终生成镜像的层数。

●清理镜像构建的中间产物
构建镜像的过程中,当dockerfile的指令执行完成后,删除镜像不需要用的的文件。
如使用yum安装组件,最后可使用yum clean all镜像清理不需要的文件或者使用系统rm命令删除不需要的源文件等。

●注意优化网络请求

●尽量去构建缓存;
我们可以利用构建的缓存来加快镜像构建速度,Docker构建默认会开启缓存,缓存生效有三个关键点,
镜像父层没有发生变化,构建指令不变,添加文件校验和一致。
只要一个构建指令满足这三个条件,这一层镜像构建就不会再执行,它会直接利用之前构建的结果。
某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效。
我们应该把变化最少的部分放在Dockerfile的前面,这样可以充分利用镜像缓存。
dockerfile中有可能导致缓存失效的命令WORKDIR、CMD、ENV、ADD等,
像这些命令最好放到dockerfile底部,以便在构建镜像过程中最大限度使用缓存

●使用多阶段构建镜像

实例分析

(1)编写yum文件

在这里插入图片描述
(2)编写dockfile文件并创建

[root@server1 docker]# vim Dockerfile
FROM rhel7
COPY dvd.repo /etc/yum.repos.d/
RUN  yum install -y gcc pcre-devel zlib-devel 
ADD nginx-1.16.1.tar.gz /mnt   ##ADD比COPY更强大,如果文件是可识别的压缩文件,会帮忙解压
WORKDIR /mnt/nginx-1.16.1
RUN sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc     ##关闭debug日志
RUN ./configure --prefix=/usr/local/nginx
RUN make
RUN make install
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)测试
在这里插入图片描述
(4)查看此时镜像大小
在这里插入图片描述
(5)镜像优化之将RUN都放在一行,减少镜像层数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(6)镜像优化之删除中间产物

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(7)镜像优化之使用多阶段构建
在这里插入图片描述
在这里插入图片描述
测试

在这里插入图片描述
(8)镜像优化之从底层优化
在这里插入图片描述

下载镜像

在这里插入图片描述
编写dockerfile

FROM nginx as base
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
ARG Asia/Shanghai
RUN mkdir -p /opt/var/cache/nginx && \
    cp -a --parents /usr/lib/nginx /opt && \
    cp -a --parents /usr/share/nginx /opt && \
    cp -a --parents /var/log/nginx /opt && \
    cp -aL --parents /var/run /opt && \
    cp -a --parents /etc/nginx /opt && \
    cp -a --parents /etc/passwd /opt && \
    cp -a --parents /etc/group /opt && \
    cp -a --parents /usr/sbin/nginx /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpcre.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libz.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libc.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libdl.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libpthread.so.* /opt && \
    cp -a --parents /lib/x86_64-linux-gnu/libcrypt.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libssl.so.* /opt && \
    cp -a --parents /usr/lib/x86_64-linux-gnu/libcrypto.so.* /opt && \
    cp /usr/share/zoneinfo/${TIME_ZONE:-ROC} /opt/etc/localtime
FROM gcr.io/distroless/base
COPY --from=base /opt /
ENTRYPOINT ["nginx", "-g", "daemon off;"]

在这里插入图片描述
创建
在这里插入图片描述

查看
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值