如何通过Docker镜像瘦身工具降低存储成本教程

夏静小哥_3925

夏静小哥_3925

2026-04-07

922人浏览

原创

用好镜像瘦身工具可显著减少docker镜像体积,关键在构建阶段避免冗余:选-slim基础镜像(如python:3.11-slim)、用多阶段构建分离编译与运行、同一run指令内完成安装与清理、借助dive/docker scout分析层结构并清理冗余文件。

如何通过docker镜像瘦身工具降低存储成本教程

用好镜像瘦身工具,能显著减少Docker镜像体积,直接降低镜像仓库存储开销和拉取时间。关键不在删什么,而在构建阶段就避免冗余。

选择轻量基础镜像替代alpine或debian:slim

很多镜像默认基于完整版Ubuntu或CentOS,自带大量不使用的系统工具和文档。改用官方提供的-slim变体(如python:3.11-slim、node:20-slim)可减少30%~50%体积。alpine虽小,但glibc兼容性问题可能引发运行时异常,建议优先试slim,再评估是否需切alpine。

  • 检查当前基础镜像:运行docker history your-image-name,看最底层是否为ubuntu:22.04这类全量镜像
  • 替换示例:FROM ubuntu:22.04 → FROM ubuntu:22.04-slim
  • 注意:slim镜像不含man、vim、ps等调试工具,生产环境本就不该依赖它们

多阶段构建清除编译依赖

编译型语言(Go、Rust、C++)或前端项目(npm build)常把编译器、源码、临时文件全打进最终镜像。多阶段构建让编译和运行分离,只保留运行时必需的二进制和配置。

  • 第一阶段用golang:1.22编译,第二阶段用scratch或debian:slim仅拷贝可执行文件
  • Node.js项目:构建阶段装devDependencies,运行阶段用node:20-alpine并只复制dist/和node_modules/中真正需要的包
  • 避免在最终镜像中保留package-lock.json、.git、src/等非运行文件

清理包管理器缓存与临时文件

Dockerfile中每条RUN指令都会生成新层,若在不同层中安装再删除缓存,体积不会减少。必须把安装、使用、清理写在同一行。

  • APT:用&& apt-get clean -y && rm -rf /var/lib/apt/lists/*收尾
  • APK(Alpine):加&& apk del .build-deps(提前用apk add --virtual .build-deps标记编译依赖)
  • pip:用--no-cache-dir参数,避免生成__pycache__和缓存包
  • 禁止单独写RUN apt-get clean——它无法清除前一层已写入的数据

用dive或docker scout分析镜像层构成

工具不能自动瘦身,但能快速定位“谁占了最多空间”。先看清结构,再精准优化。

  • dive your-image-name:交互式查看每层文件变化,高亮新增/删除文件,按大小排序目录
  • docker scout cves your-image-name:顺便发现过时基础镜像带来的安全风险
  • 重点关注:重复的依赖包、未清理的日志目录(/var/log)、调试符号(.debug文件)、文档(/usr/share/doc)
PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

499

5

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

596

5

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

1076

5

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.05

771

5

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.05.21

1566

6

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

2025.06.09

4394

18

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

2025.06.10

1994

13

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

2025.06.17

3906

17

golang数组大全
golang数组大全

本专题整合了golang数组相关问题解决方法,想了解更多相关内容,请阅读下面的文章。

2025.06.20

4666

22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习