Dockerfile最小化构建镜像:减少层数、清理无用数据、多段构建

9 篇文章 0 订阅
2 篇文章 1 订阅

       docker的官方虽然有数十万计的免费镜像,但是出于某些安全考虑,一般不会使用免费镜像,因此这就需要我们自己制作镜像,制作的镜像如果很大,那么在镜像上传、下载的时候是很不方便的,因此我们需要精简我们制作的镜像,在满足需要的情况下,镜像越小越好。

       镜像小有很多好处,例如快速部署、快速回滚。减少服务中断时间,同时镜像仓库占用磁盘空间也少了。



最小化构建镜像

最小化构建镜像,我们一般从下边三个方面进行操作:

1.减少层数

docker的构建中,Dockerfile中一个RUN会在镜像上构建一层,因此需要将多个RUN合并执行,减少镜像层数。


未减少镜像层数之前的Dockerfile:

FROM centos
RUN yum install -y vim
RUN yum install -y net-tools

执行命令,构建镜像:docker build -t centos:test .
构建成功之后,查看镜像大小:
在这里插入图片描述


减少镜像层数的Dockerfile:

FROM centos
RUN yum install -y vim && \
    yum install -y net-tools

执行命令,构建镜像:docker build -t centos:small .
构建成功,查看镜像大小:
在这里插入图片描述
可以看到,通过减少层数有效的减少了镜像的大小。




2.清理无用数据

一次RUN形成新的一层,如果没有在同一层删除,无论文件是否最后删除,都会带到下一层,所以要在每一层清理对应的残留数据,减小镜像大小。


未清理当前镜像层数的缓存的Dockerfile:

FROM centos
RUN yum install epel-release -y && \
    yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
    libcurl-devel libjpeg-devel libpng-devel openssl-devel \
    libmcrypt-devel libxslt-devel libtidy-devel autoconf \
    iproute net-tools telnet wget curl

执行命令,构建镜像:docker build -t centos:notclear .
构建成功,查看镜像大小:
在这里插入图片描述


清理当前镜像层数的缓存的Dockerfile:

FROM centos
RUN yum install epel-release -y && \
    yum install -y gcc gcc-c++ make gd-devel libxml2-devel \
    libcurl-devel libjpeg-devel libpng-devel openssl-devel \
    libmcrypt-devel libxslt-devel libtidy-devel autoconf \
    iproute net-tools telnet wget curl && \
    yum clean all && \
    rm -rf /var/cache/yum/*

执行命令,构建镜像:docker build -t centos:clear .
构建成功,查看镜像大小:
在这里插入图片描述
可以看到镜像的大小明显减少了



3.多段构建

多段构建多用于需要编译安装的软件,或者是一些需要解压缩的软件,比如下边,我们采用多段构建编译一个jdk的镜像:

未采用多段构建的Dockerfile:

FROM centos AS jdk
COPY jdk-8u231-linux-x64.tar.gz /usr/local/src
RUN cd /usr/local/src && \
    tar -xzvf jdk-8u231-linux-x64.tar.gz -C /usr/local

执行命令,构建镜像:docker build -t centos:notmul .
构建成功,查看镜像大小:
在这里插入图片描述

采用多段构建的Dockerfile:

FROM centos AS jdk
COPY jdk-8u231-linux-x64.tar.gz /usr/local/src
RUN cd /usr/local/src && \
    tar -xzvf jdk-8u231-linux-x64.tar.gz -C /usr/local

FROM centos
COPY --from=jdk /usr/local/jdk1.8.0_231 /usr/local

执行命令,构建镜像:docker build -t centos:mul .
构建成功,查看镜像大小:
在这里插入图片描述
多段构建其实就是将从上一个构建好的镜像只取自己需要的数据,然后复制到第二个镜像,这样会大大减少镜像的大小。

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值