docker实现单机多版本python环境共存的核心是“每个版本一个独立容器”,通过官方镜像快速启动、dockerfile定制依赖、docker-compose编排多服务,并利用卷挂载持久化数据。

用 Docker 实现单机多版本 Python 环境共存,核心是“每个版本一个独立容器”,不依赖宿主机 Python,也不用 virtualenv 或 pyenv 做复杂切换——真正隔离、按需启动、即用即删。
用官方镜像快速拉起指定版本
Docker Hub 上的 python 官方镜像已预装各主流版本(如 3.8、3.9、3.11、3.12),标签明确(python:3.9-slim、python:3.11-bullseye)。无需自己编译或配置源,一条命令就能运行对应环境:
-
docker run -it --rm python:3.8 bash→ 进入 Python 3.8 的交互终端 -
docker run -it --rm -v $(pwd):/workspace python:3.11 python /workspace/script.py→ 挂载当前目录,用 3.11 执行脚本 - 加
--name mypy310可命名容器,方便后续docker exec -it mypy310 bash复用
用 Dockerfile 定制带依赖的专属环境
实际开发中常需固定版本 + 特定包(如 numpy==1.24 + torch==2.0)。这时写个简短 Dockerfile 更可靠:
FROM python:3.10-slim COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt WORKDIR /app
构建后:docker build -t myproj-py310 .,运行时直接 docker run -it --rm -v $(pwd):/app myproj-py310 python main.py。不同项目用不同 tag(如 myproj-py39、myproj-py312),互不干扰。
用 docker-compose 管理多环境协同场景
当需要同时跑 Python 服务 + Redis + MySQL(比如测试 Django 适配不同 Python 版本),docker-compose.yml 能统一编排:
version: '3.8'
services:
py39-app:
image: python:3.9-slim
volumes: ['./src:/app']
working_dir: /app
command: python app.py
redis:
image: redis:7-alpine
执行 docker-compose up -d py39-app 即可启动带 Redis 的 3.9 环境;换 3.11?改 image 字段再 up 即可。多个 compose 文件(docker-compose.py39.yml、docker-compose.py312.yml)也能并存。
小技巧:轻量交互与状态保留
不想每次重装依赖?可用 命名卷 或 本地目录挂载 保存 pip cache 和 venv:
-
docker volume create pip_cache,然后-v pip_cache:/root/.cache/pip加速重复构建 - 把
venv目录挂载到宿主机(如-v $(pwd)/.venv311:/app/.venv),退出容器后虚拟环境仍保留 - 用
docker commit [container-id] my-py311-with-reqs可将运行中的容器保存为新镜像(适合临时调试后固化)
不复杂但容易忽略:Docker 镜像本身是只读层,所有写操作都在容器层,关掉就丢——所以关键数据、代码、配置务必通过 volume 或 bind mount 显式持久化。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










