Docker镜像大小优化的方法

利用Squash功能 (1.13 后新增的试验功能)

1、Docker Daemon 进程启动前,要将 experimental 参数设置为 true;
docker v20版本是通过修改/etc/docker/daemon.json开启:

{
    
    
  "experimental": true
}

2、编写的dockerfile没有与之前没有差异
3、编译时,增加--squash参数

docker build --squash -t xxx:xxx  .

squash功能一方面压缩了镜像的大小,另一方面保存了镜像的构建信息,但是该方法属于实验特性,需要谨慎使用。

使用较小的基础镜像

  • 系统镜像使用Ubuntu、CentOs、Alpine、scratch、buybox等
  • 许多官网镜像都提供slim版本
    上述方式的缺点在于,基础镜像由于体积小,可能会缺失我们需要的依赖或工具,需要逐步补充,耗费的工作量较大。

Dockerfile指令优化

指令拼接

定义 Dockerfile 时,多次使用RUN指令会生成多个镜像层,使得镜像臃肿。应该将多个指令拼接合并为一个RUN(通过运算符&&/来实现).

指令优化

如果在 RUN 命令中执行 aptapk 或者 yum ,可以借助指令自身的配置选项减少镜像层数量及镜像大小。

  • 执行 apt-get install -y时增加选项--no-install-recommends ,可以不用安装建议性(非必须)的依赖,也可以在执行 apk add时添加选项--no-cache达到同样效果;
  • 执行 yum install -y时候, 同时安装多个工具,比如 yum install -y gcc gcc-c++ make ;
  • 组件的安装和清理要串联在一条指令里面,如 apt-get install zip && rm -rf /var/cache/apk/*

利用export和import指令

#  启动一个容器
docker run -d --name test test:2.0
# 利用export和import将容器导出变为镜像
docker export test | docker import - test:3.0

该方法也能有效降低镜像大小,但会丢失镜像的构建信息。

猜你喜欢

转载自blog.csdn.net/Loiterer_Y/article/details/121928584