本文将通过一个 Flask Web应用 的实例,详细讲解如何使用Docker实现Python应用的 容器化部署,涵盖环境配置、镜像优化、多阶段构建等实用技巧。
一、环境准备
-
安装Docker
- Windows/Mac 下载Docker Desktop
- Linux:
bashCopy Code
curl -fsSL https://get.docker.com | bash -s docker sudo systemctl enable --now docker
-
验证安装
bashCopy Code
docker --version # 输出版本信息如 Docker 24.0.7 docker run hello-world # 运行测试容器
二、创建Python应用
-
项目结构
textCopy Code
myapp/ ├── app.py ├── requirements.txt └── Dockerfile
-
示例代码 (
app.py
)pythonCopy Code
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return "Hello, Dockerized Python App!" if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
-
依赖文件 (
requirements.txt
)textCopy Code
flask==3.0.2 gunicorn==21.2.0
三、编写Dockerfile
dockerfileCopy Code
# 第一阶段:构建环境 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-slim WORKDIR /app # 从builder阶段复制已安装的包 COPY --from=builder /root/.local /root/.local COPY . . # 确保脚本可执行并设置PATH ENV PATH=/root/.local/bin:$PATH # 暴露端口 & 启动命令 EXPOSE 5000 CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
关键参数解析:
--user
: 避免全局安装,减少权限问题--no-cache-dir
: 禁用缓存,减小镜像体积- 多阶段构建:分离构建与运行环境,最终镜像仅保留必要文件
四、构建与运行
-
构建镜像
bashCopy Code
docker build -t my-python-app:1.0 .
-
运行容器
bashCopy Code
docker run -d -p 5000:5000 --name myapp my-python-app:1.0
-
访问应用
浏览器打开http://localhost:5000
,显示 "Hello, Dockerized Python App!"
五、高级配置技巧
-
使用
.dockerignore
textCopy Code
__pycache__ *.pyc .git .env
-
设置中国时区
dockerfileCopy Code
RUN apt-get update && apt-get install -y tzdata ENV TZ=Asia/Shanghai
-
多服务编排 (
docker-compose.yml
)yamlCopy Code
version: '3.8' services: web: build: . ports: - "5000:5000" environment: - FLASK_ENV=production redis: image: redis:alpine volumes: - redis_data:/data volumes: redis_data:
六、常见问题排查
问题现象 | 解决方案 |
---|---|
ModuleNotFoundError | 检查requirements.txt 是否包含所有依赖 |
端口冲突 | 修改主机端口 -p 8080:5000 |
容器立即退出 | 添加-it 参数查看实时日志 |
镜像体积过大 | 使用Alpine基础镜像或多阶段构建 |
七、性能优化建议
-
选择更小的基础镜像
dockerfileCopy Code
FROM python:3.11-alpine # 镜像体积仅约120MB
-
合并RUN指令
dockerfileCopy Code
RUN apt-get update \ && apt-get install -y --no-install-recommends gcc python3-dev \ && pip install -r requirements.txt \ && apt-get purge -y gcc python3-dev \ && rm -rf /var/lib/apt/lists/*
-
使用Gunicorn配置
bashCopy Code
# 启动4个工作进程,监听5000端口 CMD ["gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "app:app"]
八、监控与管理
-
查看运行中的容器
bashCopy Code
docker ps
-
查看容器日志
bashCopy Code
docker logs -f myapp
-
进入容器调试
bashCopy Code
docker exec -it myapp /bin/bash
通过以上步骤,您已掌握 Docker部署Python应用的核心流程。建议结合自身项目需求调整配置,并持续关注镜像安全与性能优化。