Docker镜像瘦身

  1. 别再用肥大的基础镜像了

刚开始学Docker那会儿,图省事直接,装个Nginx都能搞出700MB的大家伙。后来才发现,很多官方镜像都有slim或alpine版本。

比如Node.js项目,用直接900MB+,换成,瞬间降到100MB以内。Alpine Linux用的是musl libc和BusyBox,该有的都有,不该有的一概没有。不过要注意,有些依赖glibc的应用在Alpine上可能需要重新编译。

  1. 多阶段构建是神器

这是我学到的最大杀器。以前是在一个镜像里又编译又运行,搞得镜像里一堆编译依赖根本用不上。

这样最终镜像只包含运行需要的node_modules和代码,什么gcc、python这些编译工具全被隔离在构建阶段,根本不会进最终镜像。

  1. 合理利用.dockerignore文件

这玩意就跟.gitignore一样重要,但很多人都会忽略。如果不写.dockerignore,时会把当前目录所有文件都发给Docker daemon,包括node_modules、.git、日志文件这些垃圾。

少传点无用文件,构建速度能快不少,镜像也能更干净。

  1. 合并RUN指令减少镜像层

Dockerfile里每一条RUN、COPY、ADD都会创建一个新的镜像层。层数多了,镜像自然就胖了。

记住清理缓存和临时文件,apt-get装完记得clean,npm装完记得cache clean。

  1. 选择更小的基础镜像

除了Alpine,还有其他选择:

:空镜像,Go语言写的静态编译程序可以直接FROM scratch

:Google出的,只包含应用和运行时,没有shell、包管理器等

对于Go应用:

用scratch镜像,最终镜像就只有一个可执行文件,小到令人发指。

  1. 其他小技巧

用定期清理悬空镜像

可以把所有层压成一层(不过这个功能要开启实验特性)

用工具分析镜像每层内容,看看哪里占空间最多

昨天把我那个8G的镜像按这些方法一顿操作,最终瘦身到300MB,成就感爆棚。镜像瘦身不只是为了省磁盘空间,更是为了安全(减少攻击面)和快速部署。大家还有什么瘦身妙招,欢迎在评论区分享!

相关推荐
不会就选b18 分钟前
linux之进程管理(二)--替换
linux·运维·服务器
倔强的石头10624 分钟前
【Linux指南】动静态库系列(二):从源码复用到目标文件复用:为什么需要把 .o 打包成库
linux·运维·服务器
步步精BBJconn33 分钟前
从GPU服务器到数据中心:AI服务器高压连接器的应用与发展趋势
大数据·运维·服务器·人工智能·科技·物联网
java_logo2 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
码农学院3 小时前
基于运维监控体系的网络品牌推广方案:从架构设计到技术实现
运维·网络
大耳朵-小飞象12 小时前
电力安全运维的智能密码:BACS如何破解设备全生命周期管理难题,让电网安全“看得见、管得住”?
运维·安全·智慧城市·能耗系统·楼宇智控·未来生活
极客侃科技12 小时前
制造企业 MES/APS 选型:SAP PP/DS 集成、ERP-MES 边界划分与一体化架构要点
运维·架构·制造
生活爱好者!15 小时前
我把NAS当作下载机,docker一键部署qb
运维·docker·容器
java_logo16 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程