用 Docker Compose 固化 Python 开发环境

举报
yd_251192881 发表于 2026/10/29 22:36:35 2026/10/29
【摘要】 把 Python 版本、依赖和测试环境固化到 Docker Compose,并记录缓存、挂载和生产镜像的常见用法。

“代码在我电脑上能跑”常见的原因不是代码不同,而是 Python 版本、系统库或依赖安装顺序不同。把开发环境写进 Docker Compose,可以让新成员用两条命令得到相同的运行条件。

先创建 Dockerfile:

FROM python:3.12-slim

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1

WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["python", "-m", "pytest"]

把依赖安装放在复制源代码之前,可以复用 Docker 的层缓存。requirements.txt 没有变化时,修改业务代码不会重复下载依赖。PYTHONUNBUFFERED=1 让容器日志及时输出,排查启动问题时更直接。

再创建 compose.yaml:

services:
  app:
    build: .
    working_dir: /app
    volumes:
      - .:/app
    command: python -m pytest

日常使用时,先执行:

docker compose build
docker compose run --rm app

第一条命令构建镜像,第二条命令在临时容器中运行测试。需要开发服务时,把 command 改成项目启动命令,再执行 docker compose up。源代码通过绑定挂载进入容器,修改文件不需要重建镜像;依赖发生变化时,重新执行 docker compose build。

还要添加 .dockerignore,至少排除 .git、.venv、__pycache__ 和本地缓存。否则这些目录会增大构建上下文,甚至覆盖容器内的依赖。绑定挂载会覆盖 /app 下的同名内容,因此虚拟环境应留在宿主机项目目录之外,或者直接让容器管理依赖。

Compose 适合统一开发和测试条件,但不能保证生产环境完全一致。生产镜像应固定 Python 补丁版本或镜像摘要,去掉源代码挂载,并使用独立的启动命令。把这几项约定写进仓库后,环境问题就更容易复现,也更容易交给下一位开发者处理。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。