当前位置:   article > 正文

dockerfile镜像优化_编写dockerfile时,为了更好的将镜像分层,减少修改镜像的成本。在编写dockerfile时

编写dockerfile时,为了更好的将镜像分层,减少修改镜像的成本。在编写dockerfile时


在使用dockerfile编写容器镜像的时候,不使用优化的话,制作完成之后的镜像是非常大的,对于我这种初学者而言,官网上的几百M的一个纯净版镜像,在自己编译的时候,动不动就能编译出来几G的大小的文件来,所以对于dockerfile而言,优化是非常重要的,优化一般大致分为三个部分: 1、减少/合并镜像层,2、将不需要的有输出信息的执行丢掉,3、多阶段构建。这三种优化方式

下面将三种方式都试用一下,看看各自的大小

先看一下不做优化的镜像文件的大小,用正常的步骤封装一个PHP容器镜像

FROM centos:7
ADD php-7.1.10.tar.bz2 /tmp
RUN yum -y install gcc gcc-c++ make \
    gd-devel libxml2-devel libcurl-devel \
    libjpeg-devel libpng-devel openssl-devel bison
RUN mkdir -p /usr/local/php/etc
WORKDIR /tmp/php-7.1.10
RUN ./configure --prefix=/usr/local/php \
    --with-mysql-sock=/usr/local/mysql/mysql.sock \
    --with-mysqli --with-zlib --with-curl \
    --with-gd --with-jpeg-dir --with-png-dir \
    --with-freetype-dir --with-openssl --enable-fpm \
    --enable-mbstring --enable-xml --enable-session \
    --enable-ftp --enable-pdo \
    --enable-tokenizer --enable-zip
RUN make
RUN make install
COPY php.ini /usr/local/php/etc/php.ini
COPY php-fpm.conf /usr/local/php/etc/php-fpm.conf
RUN cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
RUN sed -i 's/127.0.0.1/0.0.0.0/g' /usr/local/php/etc/php-fpm.d/www.conf
WORKDIR /usr/loacl/php/
EXPOSE 9000
CMD ["sbin/php-fpm","-c","etc/php-fpm.conf"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
docker build -t php:1 .
.....
docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
php                       1         9cfdb75a9e39   27 seconds ago   1.25GB
  • 1
  • 2
  • 3
  • 4
  • 5

当前未优化的大小是1.25G的大小

一、减少/合并镜像层

这个步骤就是相对简单,就是将相同的命令指令进行合并,或者去除不必要的指令,因为每一层指令都会生成一层镜像层,每一层镜像层都会基于之前的镜像层来占用内存,所以,可以将相同的指令进行合并,以及压缩包等,使用完之后没有需要就进行删除。减少当前镜像层的容量

FROM centos:7
ADD php-7.1.10.tar.bz2 /tmp
RUN yum -y install gcc gcc-c++ make \
    gd-devel libxml2-devel libcurl-devel \
    libjpeg-devel libpng-devel openssl-devel bison && \
    cd /tmp/php-7.1.10 && \
    ./configure --prefix=/usr/local/php \
    --with-mysql-sock=/usr/local/mysql/mysql.sock \
    --with-mysqli --with-zlib --with-curl \
    --with-gd --with-jpeg-dir --with-png-dir \
    --with-freetype-dir --with-openssl --enable-fpm \
    --enable-mbstring --enable-xml --enable-session \
    --enable-ftp --enable-pdo \
    --enable-tokenizer --enable-zip && \
    make && \
    make install && \
    rm -rf /tmp/php* && \
    yum -y remove gcc gcc-c++ make && \
    yum clean all
EXPOSE 9000
CMD ["/sbin/php-fpm","-c","etc/php-fpm.conf"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
docker build -t php:2 .
.....
docker images
REPOSITORY                TAG       IMAGE ID       CREATED              SIZE
php                       2         09243b76aa7d   49 seconds ago       583MB
  • 1
  • 2
  • 3
  • 4
  • 5

二、将不必要的命令输出信息屏蔽

这个优化可以在上面的优化的基础上,进一步优化,可以将yum安装,make编译步骤等等方式都进行不显示。也可以进一步的减少镜像的容量的大小。例如 &> /dev/null 以这种方式,将输出结果输入到该文件内

FROM centos:7
ADD php-7.1.10.tar.bz2 /tmp
RUN yum -y install gcc gcc-c++ make \
    gd-devel libxml2-devel libcurl-devel \
    libjpeg-devel libpng-devel openssl-devel bison &> /dev/null && \
    cd /tmp/php-7.1.10 && \
    ./configure --prefix=/usr/local/php \
    --with-mysql-sock=/usr/local/mysql/mysql.sock \
    --with-mysqli --with-zlib --with-curl \
    --with-gd --with-jpeg-dir --with-png-dir \
    --with-freetype-dir --with-openssl --enable-fpm \
    --enable-mbstring --enable-xml --enable-session \
    --enable-ftp --enable-pdo \
    --enable-tokenizer --enable-zip &> /dev/null  && \
    make &> /dev/null && \
    make install &> /dev/null && \
    rm -rf /tmp/php* && \
    yum -y remove gcc gcc-c++ make &> /dev/null && \
    yum clean all &> /dev/null
EXPOSE 9000
CMD ["/sbin/php-fpm","-c","etc/php-fpm.conf"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
docker build -t php:3 .
.....
images
REPOSITORY                TAG       IMAGE ID       CREATED              SIZE
php                       3         3056fd161039   About a minute ago   604MB
  • 1
  • 2
  • 3
  • 4
  • 5

三、多阶段构建

使用FROM命令,构建出多个镜像,将指定的镜像做为其他镜像的基础镜像来使用,在后面再调用这个基础镜像,这样容器镜像内存的大小就只有很小的一部分

FROM centos:7 as build
ADD php-7.1.10.tar.bz2 /tmp
RUN yum -y install gcc gcc-c++ make \
    gd-devel libxml2-devel libcurl-devel \
    libjpeg-devel libpng-devel openssl-devel bison &> /dev/null && \
    cd /tmp/php-7.1.10 && \
    ./configure --prefix=/usr/local/php \
    --with-mysql-sock=/usr/local/mysql/mysql.sock \
    --with-mysqli --with-zlib --with-curl \
    --with-gd --with-jpeg-dir --with-png-dir \
    --with-freetype-dir --with-openssl --enable-fpm \
    --enable-mbstring --enable-xml --enable-session \
    --enable-ftp --enable-pdo \
    --enable-tokenizer --enable-zip &> /dev/null  && \
    make &> /dev/null && \
    make install &> /dev/null && \
    rm -rf /tmp/php* && \
    yum -y remove gcc gcc-c++ make &> /dev/null && \
    yum clean all &> /dev/null

FROM centos:7
EXPOSE 9000
COPY --from=build /usr/local/php /usr/local/php
CMD ["/sbin/php-fpm","-c","etc/php-fpm.conf"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在下面调用构建好的基础镜像

docker build -t php:4 .
.....
docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
php                       4         068279b7a3e3   14 seconds ago   371MB
  • 1
  • 2
  • 3
  • 4
  • 5

这个的镜像包,相较于原来的,就是很小了,前第一种跟第二种优化方式,区别不是很大

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

闽ICP备14008679号