当前 Dockerfile 的问题:
任何代码修改都会导致
COPY . /app重新运行,但apt之类的不需要重新安装镜像包含 Python 编译工具链(
slim已经较小,但还可以更小)
优化技巧:
| 问题 | 优化方法 |
|---|---|
| 体积大 | 使用 alpine 基础镜像(约 50MB vs 122MB) |
| 依赖变化频繁 | 先 COPY requirements.txt 安装依赖,再 COPY . |
| 构建缓存失效 | 把变化少的指令放前面,变化多的放后面 |
第 15 步操作:优化镜像
1. 先停掉并删除当前容器
docker stop my-app docker rm my-app
2. 创建一个优化版 Dockerfile
cat > Dockerfile.optimized << 'EOF' # Alpine 版本更小 FROM python:3.9-alpine WORKDIR /app # 先复制依赖文件(如果以后加 requirements.txt,这步会缓存) COPY app.py . # 容器启动命令 CMD ["python", "app.py"] EOF
3. 构建优化版镜像
docker build -t my-python-app:alpine -f Dockerfile.optimized .
4. 对比镜像大小
docker images | grep my-python-app
5. 运行优化版容器
docker run -d --name my-app-alpine -p 8001:8000 my-python-app:alpine
6. 测试
curl http://localhost:8001
