Hướng dẫn thiết lập Dev Containers trong VS Code với Docker: Chuẩn hóa môi trường phát triển đồng nhất cho toàn bộ đội ngũ lập trình

Docker tutorial - IT technology blog
Docker tutorial - IT technology blog

Bối cảnh & Tại sao cần

Nếu từng làm việc nhóm trong một dự án phần mềm, hẳn bạn không còn lạ gì cảnh tượng: tính năng chạy mượt trên máy bạn lập trình viên A, nhưng chuyển sang máy bạn B hay tester thì lập tức đỏ rực lỗi. Câu trả lời quen thuộc luôn là: “Ủa lạ vậy, bên máy em vẫn chạy bình thường mà!”

Hãy hình dung mỗi chiếc máy tính cá nhân giống như một căn bếp riêng. Người dùng bếp gas, người dùng bếp từ; người xài dao Đức, người xài chảo gang. Dù chung một công thức nấu ăn, món hoàn thiện ở mỗi bếp vẫn có thể cháy khét hoặc lệch vị vì dụng cụ khác nhau. Trong lập trình cũng vậy. Sự chênh lệch giữa macOS, Windows, Linux, hay khác biệt nhỏ ở bản vá Python (như 3.11.2 với 3.11.6) và các thư viện C-binding đều có thể bẻ gãy ứng dụng.

Với các dự án phức tạp, hướng dẫn một thành viên mới cài cắm môi trường thường ngốn từ 1 đến 2 ngày làm việc. Tệ hơn, nếu phải fix bug gấp cho một repo cũ dùng Node 14 hay Python 3.8, bạn lại hì hục gỡ phiên bản hiện tại để hạ cấp. Rủi ro xung đột dependency trên máy thật là rất lớn.

Dev Containers (Development Containers) xử lý triệt để bài toán này. Toàn bộ runtime, package quản lý và công cụ dòng lệnh được đóng gói gọn gàng bên trong một container Docker độc lập. VS Code trên máy thật sẽ gắn kết trực tiếp vào bên trong container đó. Kết quả thực tế? Thời gian onboarding nhân sự mới trong team rút ngắn từ 2 ngày xuống còn vỏn vẹn 10 phút. Thành viên mới chỉ cần clone mã nguồn về và bấm mở, mọi thứ đã sẵn sàng để code.

Cài đặt công cụ

Trước khi bắt đầu cấu hình, máy tính của bạn cần sẵn sàng hai công cụ nền tảng:

  1. Docker Desktop (trên Windows/macOS) hoặc Docker Engine (trên Linux). Đảm bảo tiến trình Docker daemon đang chạy bình thường.
  2. Visual Studio Code bản mới nhất.

Sau đó, bạn mở VS Code, chuyển tới tab Extensions (Ctrl + Shift + X trên Windows/Linux hoặc Cmd + Shift + X trên macOS). Tìm extension Dev Containers của Microsoft (ID: ms-vscode-remote.remote-containers) rồi bấm Install.

Mở terminal máy tính và gõ lệnh sau để xác nhận Docker đã phản hồi tốt:

docker --version
docker ps

Nếu màn hình in ra phiên bản và bảng danh sách container rỗng mà không báo lỗi quyền truy cập, bạn đã đủ điều kiện để đi tiếp.

Cấu hình chi tiết

Toàn bộ thiết lập của Dev Containers nằm tại thư mục .devcontainer/ ở root dự án, bên trong chứa tệp devcontainer.json:

my-project/
├── .devcontainer/
│   └── devcontainer.json
├── src/
│   └── app.py
└── README.md

Tệp devcontainer.json đóng vai trò bản đặc tả kỹ thuật: container chạy base image nào, cài sẵn extension gì cho VS Code, ánh xạ cổng mạng ra sao và khởi chạy script nào lúc dựng máy.

Mẫu cấu hình cho dự án Python

{
  "name": "Python 3.11 Workspace",
  "image": "mcr.microsoft.com/devcontainers/python:1-3.11-bullseye",
  "customizations": {
    "vscode": {
      "settings": {
        "python.defaultInterpreterPath": "/usr/local/bin/python"
      },
      "extensions": [
        "ms-python.python",
        "ms-python.black-formatter",
        "njpwerner.autodocstring"
      ]
    }
  },
  "forwardPorts": [8000],
  "postCreateCommand": "pip install --upgrade pip && if [ -f requirements.txt ]; then pip install -r requirements.txt; fi",
  "remoteUser": "vscode"
}

Chi tiết các thông số quan trọng

  • image: Image nền của container. Ở đây, toàn bộ thành viên sẽ code trên môi trường Debian Linux đồng nhất, chạy sẵn Python 3.11.
  • customizations.vscode.extensions: Các extension VS Code tự động tải vào bên trong container. Cả team sẽ dùng chung một chuẩn format code (như Black) mà không cần ai phải tự cài thủ công.
  • forwardPorts: Cổng mạng được thông ra máy thật. Ví dụ khi backend chạy FastAPI ở port 8000, bạn gõ http://localhost:8000 trên trình duyệt máy chủ là xem được kết quả.
  • postCreateCommand: Chuỗi lệnh chạy đúng một lần ngay sau khi container khởi tạo thành công. Ta dùng dòng này để cài toàn bộ thư viện trong requirements.txt.

Kích hoạt môi trường Dev Container

Sau khi lưu file cấu hình, bạn bấm tổ hợp phím F1 (hoặc Ctrl + Shift + P / Cmd + Shift + P), tìm và chọn:

Dev Containers: Reopen in Container

VS Code sẽ kéo image, dựng container rồi mount toàn bộ thư mục code của bạn vào trong. Nhìn xuống góc trái dưới cùng của giao diện, bạn sẽ thấy biểu tượng kết nối chuyển sang màu xanh lá cây kèm tên Dev Container: Python 3.11 Workspace. Từ lúc này, mọi thao tác terminal trong VS Code đều thực thi thẳng bên trong Linux container.

Kiểm tra & Giám sát

Sau khi container dựng xong, hãy kiểm chứng lại môi trường. Mở terminal tích hợp trong VS Code (Ctrl + `) và chạy cụm lệnh:

# Kiểm tra thông tin kernel OS
uname -a

# Kiểm tra phiên bản Python
python --version

# Xác minh đường dẫn thực thi binary
which python

Đầu ra trả về thông tin Linux và Python 3.11 chuẩn xác. Dù máy ngoài của bạn chạy chip Apple Silicon M-series hay Windows 11 x86_64, code vẫn chạy trên đúng một runtime duy nhất.

Theo dõi tài nguyên và dọn dẹp

Chạy container đồng nghĩa với việc tiêu tốn thêm RAM và CPU. Khi mở nhiều project cùng lúc, bạn nên để mắt tới mức độ chiếm dụng phần cứng.

Bật một cửa sổ terminal ở máy ngoài (host machine) và chạy lệnh:

docker stats

Bảng hiển thị sẽ cập nhật liên tục mức tiêu thụ CPU và dung lượng RAM (thường chỉ tốn khoảng 300MB – 800MB RAM cho một workspace Python cơ bản).

Nếu bạn sửa đổi devcontainer.json (như bổ sung thêm port hoặc extension), không cần dựng lại bằng tay từ đầu. Chỉ việc bấm F1 và chọn Dev Containers: Rebuild Container. Mã nguồn trên máy bạn vẫn giữ nguyên vẹn.

Cuối ngày làm việc, khi muốn đóng container để giải phóng tài nguyên cho máy tính, bạn ấn F1 rồi chọn Dev Containers: Reopen Folder Locally. Container sẽ tự động dừng lại, hoàn trả bộ nhớ RAM sạch sẽ cho hệ điều hành chủ.

Share: