DevOps 生态介绍(十二):docker 优化(压缩镜像包的大小)

在日常工作中,docker build 构建的镜像有时会很大,今天这篇文章主要介绍docker build 镜像优化。今天这篇文章会给出案例来前后对比构建的镜像大小差别。

Docker 镜像优化好处

减少镜像体积

提升构建速度

降低网络传输时间

提高容器启动速度

Docker优化案例

我这里先上案例,下面在详细介绍

优化前Dockerfile:image_name :project_server_1:latest

复制代码
FROM  ubuntu/jdk:21-24.04_stable
LABEL version=1.0.1

LABEL maintainer="zhangsan"
USER root

WORKDIR /data/app/
RUN apt update -y 
RUN apt install -y vim
Run apt install -y curl
Run apt install -y wget

COPY xxx-server-1.0.0-SNAPSHOT.jar ./
EXPOSE 8083 14031 14032 14033 14034 14035

优化后Dockerfile:image_name :project_server_2:latest

复制代码
FROM eclipse-temurin:21-jre 
LABEL version=1.0.1

LABEL maintainer="zhangsan"
USER root

WORKDIR /data/app/
RUN apt update  && apt install vim curl wget -y && apt-get clean  && rm -rf /var/lib/apt/lists/*

COPY xxx-server-1.0.0-SNAPSHOT.jar ./
EXPOSE 8083 14031 14032 14033 14034 14035

查看两个镜像大小:

Docker优化方法:

1:在第一步FROM 这边更换更小的基础镜像

官方镜像通常会提供 -slim-alpine 等瘦身版本,

如果是java项目的话,可以选择Eclipse Temurin镜像。此镜像是OpenJDK发行版。

2:减少镜像层数

RUN 执行的命令最好在一条命令上,不然每次都有镜像大小

优化前:

RUN apt update -y
RUN apt install -y vim
Run apt install -y curl
Run apt install -y wget

优化后:

RUN apt update && apt install vim curl wget -y && apt-get clean

命令:docker history image_name 此命令可以看到镜像每层构建的详细命令及每层大小

3:清理缓存

复制代码
#基础镜像是ubuntu:
apt-get clean  && rm -rf /var/lib/apt/lists/*

#基础镜像是redhat
yum clean all && rm -rf /var/cache/yum/*

4:COPY 时 不需要把无用的文件拷贝进来

我这边环境是java 环境,只需要将构建好的jar包copy进来即可,配置文件也不需要拷贝进来,配置文件在k8s环境中用comfigmap来管理即可

5:使用.dockerignore

不管是java后端项目还是前端项目都是构建后拷贝项目文件即可,但是比如python项目,不需要编译,直接靠谱的是整个项目,这样就需要用到.dockerignore来忽略一些文件不拷贝进来,比如:.git logs 之类的无用的文件

下一批文章将介绍

"DevOps 生态介绍(十三):Uptime Kuma 监控小工具推荐"