栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

dockerfile镜像优化

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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"]
docker build -t php:1 .
.....
docker images
REPOSITORY                TAG       IMAGE ID       CREATED          SIZE
php                       1         9cfdb75a9e39   27 seconds ago   1.25GB

当前未优化的大小是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"]
docker build -t php:2 .
.....
docker images
REPOSITORY                TAG       IMAGE ID       CREATED              SIZE
php                       2         09243b76aa7d   49 seconds ago       583MB
二、将不必要的命令输出信息屏蔽

这个优化可以在上面的优化的基础上,进一步优化,可以将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"]
docker build -t php:3 .
.....
images
REPOSITORY                TAG       IMAGE ID       CREATED              SIZE
php                       3         3056fd161039   about a minute ago   604MB
三、多阶段构建

使用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"]

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/728818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号