Python服务如何构建docker镜像
1. 准备Python应用
首先确保你的应用有基本的项目结构:
my-python-app/
├── app.py # 主程序
├── requirements.txt # 依赖包
└── Dockerfile # Docker配置文件
2. 编写Dockerfile
# 使用官方Python基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制依赖文件
COPY requirements.txt .
# 安装依赖
RUN pip install --no-cache-dir -r requirements.txt
# 复制应用代码
COPY . .
# 暴露端口(如果应用需要)
EXPOSE 5000
# 设置环境变量
ENV PYTHONUNBUFFERED=1
# 运行应用
CMD ["python", "app.py"]
3. 准备依赖文件
requirements.txt 示例:
flask==2.3.0
requests==2.31.0
numpy==1.24.3
4. 示例应用 (app.py)
# Flask示例应用
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker!"
@app.route('/health')
def health():
return "OK", 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
5. 构建Docker镜像
# 构建镜像
docker build -t my-python-app .
# 指定版本号
docker build -t my-python-app:v1.0 .
# 构建时不使用缓存
docker build --no-cache -t my-python-app .
6. 运行容器
# 运行容器
docker run -d -p 5000:5000 --name my-app my-python-app
# 交互式运行(用于调试)
docker run -it --rm my-python-app /bin/bash
# 带环境变量运行
docker run -d -p 5000:5000 -e ENV=production my-python-app
7. 优化建议
多阶段构建(减小镜像体积)
# 构建阶段
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt
# 运行阶段
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
使用.dockerignore文件
创建 .dockerignore:
__pycache__
*.pyc
*.pyo
*.pyd
.git
.env
venv/
*.md
.gitignore
8. 高级配置示例
生产环境Dockerfile
FROM python:3.9-slim
# 安装系统依赖
RUN apt-get update && apt-get install -y \
gcc \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 复制并安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 创建非root用户
RUN useradd -m -u 1000 appuser
COPY . .
RUN chown -R appuser:appuser /app
USER appuser
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:5000/health')"
EXPOSE 5000
CMD ["python", "app.py"]
9. 常用命令总结
# 查看本地镜像
docker images
# 查看运行中的容器
docker ps
# 查看容器日志
docker logs my-app
# 停止容器
docker stop my-app
# 删除容器
docker rm my-app
# 删除镜像
docker rmi my-python-app
# 保存镜像为文件
docker save -o my-app.tar my-python-app
# 从文件加载镜像
docker load -i my-app.tar
10. 发布到镜像仓库
# 标记镜像
docker tag my-python-app username/my-python-app:latest
# 推送到Docker Hub
docker push username/my-python-app:latest
# 推送到私有仓库
docker tag my-python-app myregistry.com/my-python-app:latest
docker push myregistry.com/my-python-app:latest
注意事项
-
不要以root用户运行应用 - 使用非特权用户
-
使用特定版本的基础镜像 - 避免使用:latest
-
分层构建 - 将不常变更的层放在前面
-
清理缓存 - 使用--no-cache-dir减少镜像体积
-
添加健康检查 - 便于容器编排

浙公网安备 33010602011771号