DevContainers 统一开发环境
FreeGuideOnline
最新
2026-07-11
json { "name": "Node.js & TypeScript", "image": "mcr.microsoft.com/devcontainers/typescript-node:0-18", "features": { "ghcr.io/devcontainers/features/node:1": { "version": "lts" }, "ghcr.io/devcontainers/features/git:1": {} }, "customizations": { "vscode": { "extensions": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode" ], "settings": { "editor.formatOnSave": true } } }, "forwardPorts": [3000], "postCreateCommand": "npm install" }
**关键字段说明:**
- **`image`**:直接使用预构建的开发容器镜像。
- **`build.dockerfile`**:如果自定义 Dockerfile,用 `build` 替代 `image`。
- **`features`**:引入独立维护的特性,自动安装指定版本的工具。
- **`customizations.vscode`**:配置 VS Code 专属的扩展和设置,进入容器后会自动安装。
- **`forwardPorts`**:将容器内端口映射到宿主机,方便预览 Web 应用。
- **`postCreateCommand`**:容器创建后立即运行的命令,常用于安装依赖。
### 步骤 3:在容器中重新打开项目
1. 点击 VS Code 左下角的绿色远程连接按钮。
2. 选择 **Reopen in Container**。
3. VS Code 会自动构建镜像(如果需要)、启动容器,并将窗口连接到容器内。
4. 观察到左下角显示“Dev Container: 项目名”,就代表环境已准备就绪。
此后,终端中运行的任何命令都在容器内执行。你可以在容器内安装额外软件,但若不写入 Dockerfile 或特性,这些更改在容器重建后会丢失。
---
## 进阶场景
### 使用 Dockerfile 自定义环境
当基础镜像无法满足需求时,在 `.devcontainer` 下创建 `Dockerfile`,并在 `devcontainer.json` 中引用:
```json
{
"name": "Custom Python Dev",
"build": {
"dockerfile": "Dockerfile"
},
"customizations": {
"vscode": {
"extensions": ["ms-python.python"]
}
}
}
示例 Dockerfile:
FROM mcr.microsoft.com/devcontainers/python:3.11
RUN apt-get update && apt-get install -y \
graphviz \
&& rm -rf /var/lib/apt/lists/*
使用 Docker Compose 管理多容器
如果你的应用需要数据库、缓存等服务,可以使用 Docker Compose。在 .devcontainer 下放置 docker-compose.yml,并在 devcontainer.json 中指定服务和如何连接:
{
"name": "App with PostgreSQL",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/workspace",
"customizations": { ... }
}
docker-compose.yml 示例:
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- ..:/workspace:cached
command: sleep infinity
links:
- db
db:
image: postgres:latest
environment:
POSTGRES_PASSWORD: devpass
此时工作区会挂载到 app 容器内,而数据库在另一个独立容器中运行,两者可以通过内部网络通信。
添加常用特性(Features)
DevContainer 特性是预配置的安装脚本,避免了手动编写复杂安装步骤的麻烦。在 features 字段中声明即可:
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/terraform:1": {}
}