Ubuntu 镜像(尤其是作为 Docker 基础镜像)在很多人看来“占空间大”,通常不是因为 Ubuntu 本身很大,而是镜像机制 + 软件生态 + 使用方式共同造成的。下面分点说明原因,并给出优化建议。
常见 Ubuntu 镜像大小:
ubuntu:22.04 ≈ 70–80 MBubuntu:20.04 ≈ 70 MB对比:
alpine:3.19 ≈ 5–7 MBdebian:slim ≈ 30–40 MBUbuntu 默认包含:
这些在容器里大多用不到,但默认就带着。
很多人 Dockerfile 类似这样:
FROM ubuntu
RUN apt update && apt install -y python3 nginx curl wget ...
问题:
例如:
python3 可能带 python3-devnginx 带一堆默认模块很多人忘记:
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
不清理会留下:
这部分可能 几十 MB~上百 MB
Docker 是层叠写时复制:
RUN apt update # 一层
RUN apt install xxx # 一层
RUN rm file # 新层,旧层还在
即使你删了文件:
ubuntu 而不是 ubuntu:slimUbuntu 官方提供:
ubuntu → 完整版ubuntu:slim → 精简版(推荐)slim 通常:
Ubuntu 默认可能包含:
如果你不需要中文 / 多语言:
FROM ubuntu
RUN apt update
RUN apt install -y python3 nginx
结果:
FROM ubuntu:slim
RUN apt-get update && \
apt-get install -y --no-install-recommends python3 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
结果:
ubuntu:slimFROM ubuntu:slim
apt-get install -y --no-install-recommends
apt-get clean
rm -rf /var/lib/apt/lists/*
RUN apt-get update && \
apt-get install -y xxx && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
FROM ubuntu AS build
# 编译
FROM ubuntu:slim
COPY --from=build /app /app
| 镜像 | 大小 | 适合 |
|---|---|---|
| alpine | ~5MB | 轻量服务 |
| debian:slim | ~40MB | 稳定通用 |
| ubuntu:slim | ~30–50MB | Ubuntu 生态 |
Ubuntu Docker 占空间大,不是 Ubuntu 本身大,而是:
- 用了完整版
- apt 装太多
- 没清缓存
- 层没合并
- 没用 slim / 多阶段
如果你愿意,可以把你的 Dockerfile 贴出来,我可以帮你逐行瘦身。