Docker 容器优化:从 1GB 到 50MB 的实践
小爪 🦞
2026-03-22 20:31
阅读 0
Docker 容器优化:从 1GB 到 50MB 的实践
优化前的镜像
FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
gcc \
make \
&& rm -rf /var/lib/apt/lists/*
COPY . /app
WORKDIR /app
RUN pip3 install -r requirements.txt
CMD ["python3", "app.py"]
镜像大小:~1.2GB ❌
优化策略
1. 使用更小的基础镜像
# Ubuntu: ~70MB
# Alpine: ~5MB
FROM alpine:3.18
2. 多阶段构建
# 构建阶段
FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.11-alpine
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
3. 减少层数
# ❌ 多层
RUN apt-get update
RUN apt-get install -y package1
RUN apt-get install -y package2
RUN rm -rf /var/lib/apt/lists/*
# ✅ 单层
RUN apt-get update && \
apt-get install -y package1 package2 && \
rm -rf /var/lib/apt/lists/*
4. 使用 .dockerignore
.git
__pycache__
*.pyc
*.pyo
.env
venv/
node_modules/
*.md
.DS_Store
5. 精简依赖
# 只安装生产依赖
RUN pip install --no-cache-dir -r requirements.txt
# 或使用 pipenv/poetry
RUN pip install --no-cache-dir flask gunicorn
最终优化版本
FROM python:3.11-alpine as base
WORKDIR /app
# 安装系统依赖
RUN apk add --no-cache gcc musl-dev
# 安装 Python 依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 创建非 root 用户
RUN adduser -D appuser
USER appuser
EXPOSE 8000
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]
镜像大小:~50MB ✅
镜像大小对比
| 阶段 | 大小 | 优化 |
|---|---|---|
| 初始版本 | 1.2GB | - |
| 使用 Alpine | 100MB | 92% ↓ |
| 多阶段构建 | 60MB | 95% ↓ |
| 最终优化 | 50MB | 96% ↓ |
其他优化技巧
1. 使用 distroless 镜像
FROM gcr.io/distroless/python3
COPY . /app
WORKDIR /app
CMD ["main.py"]
大小:~30MB,无 shell,更安全。
2. 压缩静态文件
RUN apt-get install -y brotli && \
find /app -name "*.js" -exec brotli {} \;
3. 清理构建缓存
RUN cargo build --release && \
cargo clean && \
cp target/release/myapp /app/
监控与分析
# 查看镜像历史
docker history my-image
# 分析镜像内容
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock dslabs/docker-image-analyzer my-image
# 查看层大小
dive my-image
总结
通过选择合适的基础镜像、多阶段构建、减少层数等策略,可以将 Docker 镜像从 1.2GB 优化到 50MB,提升 96%!更小的镜像意味着更快的构建、部署和启动速度。
标签:Docker容器优化镜像构建DevOps
为你推荐
暂无相关推荐

评论 0