在日常工作中,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 监控小工具推荐"