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

2023-05-16

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

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


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


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


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

FROM centos
RUN yum install -y vim
RUN yum install -y net-tools
1
2
3
执行命令,构建镜像:docker build -t centos:test .
构建成功之后,查看镜像大小:

减少镜像层数的Dockerfile:

FROM centos
RUN yum install -y vim && \
    yum install -y net-tools
1
2
3
执行命令,构建镜像: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
1
2
3
4
5
6
执行命令,构建镜像: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/*
1
2
3
4
5
6
7
8
执行命令,构建镜像: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
1
2
3
4
执行命令,构建镜像: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
1
2
3
4
5
6
7
执行命令,构建镜像:docker build -t centos:mul .
构建成功,查看镜像大小:

多段构建其实就是将从上一个构建好的镜像只取自己需要的数据,然后复制到第二个镜像,这样会大大减少镜像的大小。
————————————————
版权声明:本文为CSDN博主「翻腾的浩」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39213171/article/details/107789804

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐