Docker配置Python环境
前提准备
配置 Docker
自定义容器构建
容器配置
文件目录:
.
├── .devcontainer/ <-- 新建这个文件夹
│ └── devcontainer.json <-- 新建这个文件 (核心配置)
├── dockerfiles/
│ └── Dockerfile <-- 你的 Dockerfile
├── docker-compose.yml <-- 你的 Compose 文件
└── requirements.txt <-- 依赖文件
devcontainer.json文件:
负责指挥 VS Code,告诉它连接到 docker-compose.yml 启动的服务,并在里面开始工作
{
"name": "Python Full Dev",
// 指向上一级目录的 docker-compose 文件
"dockerComposeFile": "../docker-compose.yml",
// 这里必须匹配 docker-compose.yml 中的 service 名字
"service": "python-dev-service",
// 告诉 VS Code 项目根目录在容器里的路径 (匹配 docker-compose 的 volumes)
"workspaceFolder": "/app",
// 个性化配置:自动安装 VS Code 插件
"customizations": {
"vscode": {
"extensions": [
"ms-python.python", // Python 核心插件
"ms-python.debugpy", // 调试工具
"njpwerner.autodocstring" // (可选) 自动生成文档注释
]
}
},
// 容器创建后的操作
// 例如:每次重新构建容器后,自动再次安装依赖,防止 requirements.txt 更新后容器没更新
"postCreateCommand": "pip install -r requirements.txt",
//以此用户连接 (Python 镜像默认 root,开发环境通常用 root 比较方便处理权限)
"remoteUser": "root"
}
Dockerfile文件:
负责读取 requirements.txt 并将这些包安装到基础 Python 镜像中,创建出开发环境镜像
# 使用完整版 Python (基于 Debian),包含 GCC 等常用工具
FROM python:3.11
# 设置工作目录
WORKDIR /app
# 环境变量设置
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_ROOT_USER_ACTION=ignore
# 更新 pip
RUN pip install --upgrade pip
# 1. 复制依赖文件 (依赖于 docker-compose 的 context 设置)
COPY requirements.txt .
# 2. 安装依赖
# 即使 requirements.txt 是空的,这一步也不会报错
RUN pip install --no-cache-dir -r requirements.txt
# 这里的 CMD 其实会被 Dev Containers 覆盖,但为了 standalone 运行保留它
CMD ["tail", "-f", "/dev/null"]
docker-compose.yml文件:
负责根据镜像启动容器服务,并将你本地的项目目录实时同步到容器内部。
version: '3.8'
services:
python-dev-service:
# 容器名称
container_name: my_python_dev
build:
# 【重要】上下文设为根目录,这样 Dockerfile 才能访问 requirements.txt
context: .
dockerfile: dockerfiles/Dockerfile
# 将当前根目录挂载到容器内的 /app
volumes:
- .:/app
# 映射端口 (根据你的项目需求修改)
ports:
- "8000:8000"
# 也就是通常说的 "sleep infinity",保持容器不退出
command: tail -f /dev/null
requirements.txt文件:
列出所需的包,暂时不需要设计
创建容器步骤
- 点击 VSCode 左下角「打开远程窗口」
- 点击「在容器中重新打开」
测试是否安装成功
目录:
.
└── test.py
在终端执行,观察输出即可知道是否安装成功
python test.py

浙公网安备 33010602011771号