Docker 镜像减肥指北:从「胖得像猪」到「瘦成闪电」

服务器基础 Aug 3, 2022

你见过 2GB 的 Hello World 吗?

第一次用 Docker 时,我写了个 Hello World,结果镜像 2GB。
这 Hello World 是包含了英汉大词典吗?

原来是因为用了 python:3.11 镜像——它自带了完整的 Debian 系统。
就好比你只是去楼下买个酱油,结果开了辆卡车出门。

减肥第一步:选对基础镜像

# 胖子版
FROM python:3.11  # ~900MB

# 健身版
FROM python:3.11-slim  # ~120MB

# 马拉松选手版
FROM python:3.11-alpine  # ~50MB

减肥第二步:多阶段构建

这就好比你先在厨房做菜(编译环境),做完只把菜端上餐桌(运行环境),厨房里的锅碗盆盆全扔了。

FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

FROM scratch
COPY --from=builder /app/myapp /myapp
CMD ["/myapp"]

镜像从 800MB 变成了 8MB。比一张高清照片还小。

减肥第三步:合并 RUN 命令

Docker 的每一层都是增量存储。

# 错误:创建 3 层
RUN apt-get update
RUN apt-get install -y curl
RUN rm -rf /var/lib/apt/lists/*

# 正确:只创建 1 层
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

你以为 rm -rf 删了就没了?Naive!在上一层里,这些文件还躺着呢。Docker 分层存储就像千层蛋糕。

减肥第四步:.dockerignore

node_modules/
.git/
*.md
.env
__pycache__/

结尾

记住:瘦镜像 = 启动快 = 部署快 = 多摸鱼五分钟。

Tags