当前位置: 首页 > article >正文

Docker 镜像体积优化实践:从基础镜像重建到层压缩的全流程指南

​ 由于最近在发布的时候发现docker镜像体积变得越来越大,导致整个打包发布流程变得非常耗时了。所以又接到一个差事,优化最终镜像体积。顺便也记录一下docker镜像体积优化的一些步骤。

大概步骤可以分为以下几个步骤:

  • 重做基础镜像,因为原基础镜像提交就已经占用了500M,所以计划使用alpine重新制作。
  • 优化Dockerfile文件,合并一些指令来减小镜像层数,删除一些临时文件等。
  • 最后是对基于重制的基础镜像打包发布镜像后进行镜像层数压缩(docker-squash)。
一、重做基础镜像

文件目录如下:

1730446104208-2024-11-115:28:25.png

Dockerfile-alpine-openjdk

我这基础镜像需要安装 jdk8、 python2、系统级cron组件(supercronic)

FROM  docker.m.daocloud.io/alpine:3.14

LABEL maintainer="傲寒 <wanngziyi@gmail.com>"

# 设置工作目录
WORKDIR /opt/aohan

COPY ./get-pip.py /opt/aohan/
COPY ./supercronic /usr/local/bin/supercronic

# 替换 Alpine 的默认镜像源为国内源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    # 安装openjdk8 python2
    && apk add --no-cache openjdk8 python2 shadow bash curl tzdata \
    && ln -sf /bin/bash /bin/sh \
    && chmod +x /usr/local/bin/supercronic \
    # 安装pip
    && python get-pip.py -i https://pypi.tuna.tsinghua.edu.cn/simple \
    && rm get-pip.py \
    && pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ \
    && python2 -m pip install six requests jinja2

# 设置 环境变量
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
ENV PATH=$JAVA_HOME/bin:$PATH
ENV PS1='[\u@\h \W]\$ '

# 默认命令
CMD ["/bin/bash"]

使用docker build 命令镜像制作

# 不使用缓存
docker build --no-cache -f ./Dockerfile-alpine-openjdk -t openjdk8-python2:v1.0.0 .

效果还不错只有200M 比之前的小了快300M

image-20241101154056188-2024-11-115:41:42.png

二、Dockerfile优化

我们自己的不方便展示主要就是

  • 使用上边新的基础镜像。

  • 优化指令减少层数。

  • 删除临时文件。

三、压缩镜像
1、docker-squash是什么?
  1. 定义
    • docker-squash是一个用于压缩 Docker 镜像的工具。Docker 镜像是由一系列的层(layers)组成的,在构建和使用过程中,这些层会逐渐累积。docker-squash可以将这些多层的 Docker 镜像压缩成一个单一层的镜像,从而减小镜像的大小。
  2. 工作原理
    • 当构建 Docker 镜像时,每一个指令(如RUNCOPY等)都会在基础镜像之上创建一个新的层。随着时间的推移和构建步骤的增加,镜像会包含许多层。docker-squash通过将这些层合并,消除了层与层之间的冗余部分。例如,如果一个镜像有多个层,其中有些层可能包含相同的文件或者依赖,docker-squash会把这些重复的部分整合,生成一个更紧凑的镜像。
2、安装使用
pip install docker-squash

然后直接使用,其他参数可以查阅一下文档。

docker-squash -t 新镜像名称 原镜像名称

以下是压缩结果 压缩了36.9% 一下减少600M 效果还是非常不错的。

1730447743812-2024-11-115:55:44.png

效果不错这下又可以交差,又能开开心心划水。


http://www.kler.cn/a/381290.html

相关文章:

  • 深度体验SCNet超算平台:SCNet「AI跃升季」·谁是下一个“AI”跃人?
  • HiveSQL 中判断字段是否包含某个值的方法
  • 开源办公软件 ONLYOFFICE 深入探索
  • 推荐一款PowerPoint转Flash工具:iSpring Suite
  • Logstash 安装与部署(无坑版)
  • useRoute和useRouter
  • 56. 数组中只出现一次的数字
  • JavaScript知识点梳理及案例实践
  • Rust数据NoSQL 数据库的使用
  • Pod安装软件将CDN改为国内的镜像
  • 智谱发布AI助理,帮人类敲响AGI的大门
  • 什么是开源软件(OSS)?
  • 【Linux】linux c语言调用send()接口内核调用流程
  • 从实验室到生活:超分子水凝胶湿电发电机的应用之路
  • 使用免费的飞书机器人,实现消息推送实时通知
  • golang 中map使用的一些坑
  • c#(asp.net) 如何计算两个日期之间相隔天数
  • 计算机网络:网络层 —— 边界网关协议 BGP
  • 【skyvern 部署】自动化
  • VLAN 高级技术 ——QinQ的配置
  • 深度解析阿里的Sentinel
  • Flutter下拉刷新上拉加载的简单实现方式一
  • 重学Android:从位运算到二进制表示(零)
  • QT pro项目工程的条件编译
  • vue--vueCLI
  • 企业CRM管理系统PHP源码/PHP客户关系CRM客户管理系统源码