当前位置:   article > 正文

Docker镜像大小优化

docker镜像大小优化

如何缩小镜像的体积大小?

1)尽可能的使用小体积的基础镜像
2)尽可能减少Dockerfile文件中的指令数量
3)构建镜像步骤最后添加清空系统和应用程序的缓存的命令
4)使用多级(多阶段)构建  FROM  AS 别名   
                                               COPY --from 别名

 多阶段构建

我们在构建 docker 镜像时,希望最后得到的镜像越小越好。Dockerfile创建镜像的原理是逐行指令添加一层镜像,所以要尽可能减少Dockerfile文件中的指令数量。之前文章提到过的“&&”和“;” ,两个都表示连接,但是“&&”表示前面指令执行成功之后再执行后面的指令,“;”表示无论前面的指令是否成功都继续执行;后面的指令。

在多阶段构建中,可以通过 FROM 指令在Dockerfile中生成多个阶段,每个阶段都是新的阶段,但是可以COPY上一个阶段的结果/值使用,直到到最后阶段显示/留下所有内容:

先 docker pull openjdk:8-jdk-alpine 下载一个微型jdk镜像

然后在tomcat 的 Dockerfile中直接FROM指定已经下载好的jdk镜像创建test1镜像

  1. 1 #FROM centos:7
  2. 2 #MAINTAINER this is tomcat image from centos7
  3. 3 #ADD jdk-8u91-linux-x64.tar.gz /usr/local/
  4. 4 #ENV JAVA_HOME=/usr/local/jdk1.8.0_91 &&\
  5. 5 #JRE_HOME=${JAVA_HOME}/jre &&\
  6. 6 #CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib &&\
  7. 7 #PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
  8. 8 #
  9. 9 FROM openjdk:8-jdk-alpine
  10. 10 ADD apache-tomcat-9.0.16.tar.gz /usr/local/
  11. 11 EXPOSE 8080
  12. 12 ENTRYPOINT ["/usr/local/apache-tomcat-9.0.16/bin/catalina.sh","run"]

然后再不指定jdk镜像创建一个镜像test2

 明显test1比test2小很多!

也可以通过 AS <NAME> 在FROM指令中添加命名阶段,比如上一篇中创建了一个php镜像

镜像大小达到了1.34G,使用 多阶段构建命名测试大小:

  1. FROM centos:7 AS xny
  2. MAINTAINER this is php image
  3. RUN yum -y install gd \
  4. libjpeg libjpeg-devel \
  5. libpng libpng-devel \
  6. freetype freetype-devel \
  7. libxml2 libxml2-devel \
  8. zlib zlib-devel \
  9. curl curl-devel \
  10. openssl openssl-devel \
  11. gcc gcc-c++ make pcre-devel
  12. ADD php-7.1.10.tar.bz2 /usr/local/src/
  13. WORKDIR /usr/local/src/php-7.1.10
  14. RUN ./configure \
  15. --prefix=/usr/local/php \
  16. --with-mysql-sock=/usr/local/mysql/mysql.sock \
  17. --with-mysqli \
  18. --with-zlib \
  19. --with-curl \
  20. --with-gd \
  21. --with-jpeg-dir \
  22. --with-png-dir \
  23. --with-freetype-dir \
  24. --with-openssl \
  25. --enable-fpm \
  26. --enable-mbstring \
  27. --enable-xml \
  28. --enable-session \
  29. --enable-ftp \
  30. --enable-pdo \
  31. --enable-tokenizer \
  32. --enable-zip && make -j4 && make install
  33. FROM centos:7
  34. COPY --from=xny /usr/local/php/ /usr/local/php/
  35. ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
  36. ADD php.ini /usr/local/php/lib/
  37. ADD php-fpm.conf /usr/local/php/etc/
  38. ADD www.conf /usr/local/php/etc/php-fpm.d/
  39. RUN useradd -M -s /sbin/nologin nginx
  40. EXPOSE 9000
  41. ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]

第一阶段命名 xny

第二阶段 COPY --from=xny指定上一阶段的结果 将上一阶段所需要的文件复制到本阶段镜像中

也可以COPY --from=0  0指向上一个阶段,也可以将之前阶段的文件复制到这个新阶段

下面 docker build -t php2:centos7

 371MB和1.34G还是相差非常大的!

也可以拷贝外部镜像的文件

上一篇做LNMP时创建了nginx镜像,我要用nginx镜像中 /usr/local/nginx/conf/中的nginx.conf文件作为test2的nginx.conf文件使用

  1. FROM centos:7
  2. MAINTAINER this is nginx image
  3. RUN yum -y update
  4. RUN yum -y install pcre-devel zlib-devel gcc gcc-c++ make
  5. RUN useradd -M -s /sbin/nologin nginx
  6. ADD nginx-1.12.0.tar.gz /opt/
  7. WORKDIR /opt/nginx-1.12.0
  8. RUN ./configure \
  9. --prefix=/usr/local/nginx \
  10. --user=nginx \
  11. --group=nginx \
  12. --with-http_stub_status_module
  13. RUN make
  14. RUN make install
  15. FROM centos:7
  16. COPY --from=nginx:lnmp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf
  17. ENV PATH /usr/local/nginx/sbin:$PATH
  18. EXPOSE 80
  19. EXPOSE 443
  20. RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
  21. ADD run.sh /run.sh
  22. RUN chmod 755 /run.sh
  23. CMD ["/run.sh"]
  24. #CMD ["/usr/local/sbin/nginx", "-g", "daemon off;"]

然后进行构建:docker build -t nginx:test2 .

 也可以构建指定的阶段

构建镜像时,不必构建整个Dockefile,可以指定目标进行构建,比如之前的php第一阶段起了xny名称,可以只构建第一阶段:

docker build --target xny -t testimage:test

补充;

一、apt安装中可以使用 --no--install-recommends 标志

表示不需要安装一些不需要但推荐的包,在安装多个包时有帮助!

二、在 RUN命令之后使用 COPY命令,这种情况下 docker 将能更好地使用缓存功能。

三、减少标准输出的内容,使用yum clean all删除缓存和上传的压缩包

四、使用Docker镜像缩容工具:Dive 、fromlatest.io 、Docker Slim 等

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/57188
推荐阅读
相关标签
  

闽ICP备14008679号