用 Docker 部署 Python 应用:从本地开发到云端运行的实用指南
一、为什么用 Docker 部署 Python 应用
Python 项目常遇到“在我机器上能跑,到服务器上就报错”的问题:Python 版本不同、依赖库版本冲突、系统缺少编译工具,都会导致部署失败。Docker 把应用和运行环境打包成镜像,镜像在哪里运行,结果都一样。对个人开发者和小团队来说,开发、测试、生产可以用同一份环境,大大减少排错时间。
二、准备工作
准备一台 Linux 服务器或本地 Linux 环境,安装 Docker Engine 与 Docker Compose。安装后先检查版本,确认命令可用:
docker --version
docker compose version
如果使用云服务器,记得在安全组放行应用端口,例如 8000 端口。
三、写一个最小可用的 Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]
三个注意点:使用 slim 基础镜像减小体积,先复制 requirements.txt 再安装依赖以利用镜像分层缓存,使用国内镜像源加速安装。
四、构建与运行
docker build -t myapp:1.0 .
docker run -d --name myapp -p 8000:8000 myapp:1.0
docker ps
curl http://localhost:8000/health
启动后用 docker ps 查看容器状态,用 docker logs -f myapp 跟踪日志,用 curl 请求健康检查接口确认服务可用。
五、用 Docker Compose 管理多服务
很多 Python 应用还要连接数据库或 Redis,可以用 Compose 一次启动多个容器:
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
执行 docker compose up -d 启动,docker compose down 停止并删除容器,数据卷默认保留,数据不会随容器删除而丢失。
六、Linux 上常用的排查命令
容器启动失败时,先看日志:docker logs --tail 200 容器名;端口被占用时检查监听端口:ss -tlnp | grep 8000;磁盘满了会导致镜像拉取失败:df -h 和 docker system df;内存不足时查看 free -h 与 docker stats。定期执行 docker system prune 清理无用镜像与缓存,但生产环境使用前要先确认。
七、三个常见坑
- 镜像里缺少系统依赖:有些 Python 库需要编译,应在 Dockerfile 中用 apt-get 安装 build-essential、libpq-dev 等系统包。
- 时区不对导致日志时间错乱:设置环境变量 TZ=Asia/Shanghai,并挂载 /etc/localtime,让容器时间与服务器保持一致。
- 代码改了但容器里还是旧版本:修改后需要重新构建镜像;docker run 时用 -v 挂载代码目录只适合本地开发调试,生产环境请使用新镜像。
八、小结
Docker 不是万能药,但它把“环境不一致”这一类问题几乎消灭了。先从一个最小的 Dockerfile 跑通,再逐步加入 Compose、健康检查与日志管理,Python 应用就可以从本地平滑地部署到任何一台 Linux 服务器或云主机上。建议把 Dockerfile、docker-compose.yml 和部署脚本一起放进代码仓库,让每一次部署都可重复、可回滚。
- 点赞
- 收藏
- 关注作者
评论(0)