
DevContainers — Cách Đóng Gói Môi Trường Phát Triển Thành Container
DevContainers (Dev Container Specification) là tiêu chuẩn mở cho phép bạn đóng gói toàn bộ môi trường phát triển — IDE, dependency, công cụ — vào một Docker container. Với một file cấu hình devcontainer.json, mọi thành viên đội nhóm đều nhận được môi trường dev nhận diện tuyệt đối: cài đặt đúng phiên bản, extension, biến môi trường và cả cấu hình máy ảo ảo.
DevContainer là gì?
- Định nghĩa chính thức: “Một tiêu chuẩn mở cho phép làm giàu container với nội dung cài đặt cho phát triển” (containers.dev).
- Thiết bị quản lý: Microsoft, duy trì tại GitHub devcontainers/spec.
- File cấu hình trung tâm:
devcontainer.json— định dạng JSONC (JSON with Comments). - Mục đích: Môi trường phát triển có thể tái tạo (reproducible dev environments) bằng Docker.
Ba chế độ điều phối
DevContainer hỗ trợ ba phương thức khởi tạo container:
- Image-based: Tham chiếu đến một Docker image trực tiếp qua thuộc tính
image. - Dockerfile-based: Xây dựng từ một Dockerfile thông qua
build.dockerfile. - Docker Compose-based: Thiết lập nhiều container thông qua
docker-compose.yml.
Chu trình sống động (lifecycle commands)
Các lệnh thực thi theo thứ tự sau:
onCreateCommand: Chạy lần đầu khi container được tạoupdateContentCommand: Khi nguồn cập nhật/thay đổipostCreateCommand: Sau khi container khởi tạopostStartCommand: Mỗi lần container khởi độngpostAttachCommand: Mỗi lần editor kết nối
Dev Container Features
Features là các đơn vị cài đặt tự chứa, có thể chia sẻ — ví dụ như công cụ, runtime, thư viện:
- Áp dụng như một bước build phụ sau image cơ sở
- Định dạng tham chiếu OCI:
ghcr.io/devcontainers/features/node:2 - Các feature chính thức bao gồm: Node.js, Python, Go, Rust, Java, Docker-in-Docker, GitHub CLI, AWS CLI, Azure CLI, Git, .NET, Ruby, CUDA…
- Danh sách đầy đủ tại containers.dev/features
VS Code và GitHub Codespaces
Dev Containers extension của VS Code cho phép mở thư mục làm việc trong container với hỗ trợ đầy đủ IntelliSense, code navigation và debugging:
- Cài extension → F1 → “Dev Containers: Open Folder in Container…”
- Tùy chỉnh VS Code thông qua
customizations.vscodetrongdevcontainer.json - Patch nhanh: sử dụng
Dev Containers: Rebuild Containertừ Command Palette
GitHub Codespaces cung cấp môi trường đám mây trên máy ảo GitHub:
- Cấu hình máy: 2-core đến 32-core, RAM 8GB–128GB, lưu trữ 32GB–128GB
- Phân hệ điều hành: luôn Linux (Ubuntu)
- Kết nối: trình duyệt, VS Code, hoặc GitHub CLI
- Sử dụng cùng
devcontainer.jsonvới cấu hình bổ sungcustomizations.codespaces - Hỗ trợ prebuilds để khởi động nhanh
CI/CD tích hợp
Với devcontainers/ci GitHub Action, cùng một cấu hình DevContainer được dùng để build CI:
- Nhất quán môi trường dev và CI
- Tận dụng cùng Dockerfile, features, cài đặt của dev
- Hỗ trợ cả GitHub Actions và Azure DevOps pipelines
Metadữ liệu trong image label
Không chỉ dừng lại ở file cấu hình, Dev Container cho phép nhúng cấu hình vào chính Docker image thông qua label devcontainer.metadata. Nhờ vậy, một image pre-built có thể tự khai báo cách nó nên được dùng trong môi trường phát triển — port nào cần forward, extension nào nên cài, lệnh nào nên chạy sau khi tạo.
Nhiều cấu hình trong một repository
Một repository có thể định nghĩa nhiều dev container khác nhau cho các vai trò khác nhau: một cấu hình cho backend, một cho frontend, một cho data engineering. Vị trí file được ưu tiên theo thứ tự:
.devcontainer/devcontainer.json.devcontainer.json.devcontainer/<folder>/devcontainer.json
Kết hợp với thuộc tính hostRequirements (số CPU, RAM, dung lượng ổ, GPU tối thiểu), các nhà cung cấp đám mây như GitHub Codespaces có thể tự động chọn máy ảo phù hợp với nhu cầu của project.
Hỗ trợ từ nhiều công cụ và nền tảng
- Visual Studio 2022 17.4+: Hỗ trợ dự án C++ với CMake Presets.
- IntelliJ IDEA: Hỗ trợ sớm qua remote SSH hoặc Docker local.
- Emacs: Extension
devcontainer.eltrên MELPA. - Dev Container CLI: Bản triển khai tham chiếu tại github.com/devcontainers/cli.
- Cachix devenv & Jetify Devbox: Nền tảng Nix tạo ra file dev container tự động.
- CodeSandbox: Môi trường đám mây dùng microVM + rootless Podman theo chuẩn Dev Container.
Ví dụ thực tế devcontainer.json
{
"name": "Full Stack Dev Container",
"image": "mcr.microsoft.com/devcontainers/typescript-node:20",
"features": {
"ghcr.io/devcontainers/features/docker-in-docker:2": {},
"ghcr.io/devcontainers/features/github-cli:1": {},
"ghcr.io/devcontainers/features/node:2": { "version": "20" }
},
"customizations": {
"vscode": {
"extensions": ["ms-python.python", "esbenp.prettier-vscode"],
"settings": { "editor.formatOnSave": true }
}
},
"forwardPorts": [3000, 5432],
"postCreateCommand": "npm install",
"shutdownAction": "none"
}


Ưu điểm chính
- Tái tạo tuyệt đối: “Làm việc ở đây” luôn đúng ở máy tính nào
- Mất thời gian setup = 0: Clone repo → mở trong container → code ngay
- Đa nền tảng: Cùng config chạy trên VS Code local, GitHub Codespaces, CI
- Features mở rộng: Dễ dàng thêm công cụ qua thư viện feature chuẩn
- Ngôn ngữ đa dạng: Hỗ trợ Node.js, Python, Go, Rust, .NET, Java, PHP…
DevContainer giải phóng các developer khỏi câu cửa miệng “Ở máy tôi chạy được” — thay vào đó là một chuẩn container hiện đại, có thể tái tạo và mở rộng. Với sự tích hợp sâu vào VS Code và GitHub Codespaces, đây trở thành lựa chọn tiêu chuẩn cho môi trường phát triển đồng nhất đội nhóm. Tìm hiểu thêm tại containers.dev, đặc tả kỹ thuật tại Dev Container Spec và hướng dẫn VS Code tại tài liệu Dev Containers của VS Code.
