

Docker là công nghệ container hóa ứng dụng, cho phép đóng gói phần mềm cùng toàn bộ phụ thuộc vào một đơn vị độc lập gọi là container. Nhờ vậy, cùng một ứng dụng chạy giống nhau trên máy lập trình viên, máy chủ staging lẫn production, mà không cần cài đặt lại thủ công từng thư viện.
Docker ra đời từ năm 2013 và nhanh chóng trở thành công cụ chuẩn trong ngành phần mềm. Điểm mạnh của nó nằm ở khả năng cô lập tài nguyên, triển khai tính bằng giây và mức hiệu suất cao hơn hẳn máy ảo truyền thống.
Docker hoạt động như thế nào
Docker Engine gồm ba thành phần chính: Docker client là công cụ dòng lệnh bạn gõ, Docker daemon (tên tiến trình là dockerd) chịu trách nhiệm tạo và quản lý container, còn registry là kho lưu trữ image. Khi bạn chạy lệnh docker run nginx, daemon sẽ tải image nginx về máy, tạo một container từ image đó và khởi động tiến trình nginx bên trong.
Ba khái niệm then chốt cần phân biệt:
- Image: lớp chỉ đọc chứa hệ thống file cùng cấu hình ứng dụng. Image bất biến, chia sẻ được và được định danh bằng tag ví dụ
nginx:1.25-alpine. - Container: instance đang chạy được tạo từ image. Mỗi container có hệ thống file riêng ở lớp ghi, có thể bắt đầu và dừng độc lập.
- Registry: nơi lưu trữ và phân phối image. Docker Hub là registry công khai phổ biến nhất, còn ACR hay ECR là các lựa chọn riêng tư cho doanh nghiệp.
Cơ chế cô lập của Docker dựa trên hai tính năng của nhân Linux: namespaces tạo ra không gian tên riêng cho tiến trình, mạng và điểm gắn kết, còn cgroups giới hạn tài nguyên CPU và RAM. Nhờ đó, nhiều container dùng chung một kernel mà vẫn không nhìn thấy hệ thống file của nhau.
Container so với máy ảo truyền thống
| Tiêu chí | Docker container | Máy ảo ảo hoá (VM) |
|---|---|---|
| Thời gian khởi động | vài giây | vài phút |
| Hệ điều hành | chia sẻ kernel của host | mỗi VM có OS riêng |
| Kích thước tối thiểu | vài chục MB | vài GB |
| Mức cô lập | ở tầng tiến trình | ở tầng phần cứng |
| Mật độ đóng gói | rất cao | thấp |
Sự khác biệt này giải thích vì sao một server 8 vCPU và 16 GB RAM có thể chạy hàng chục container dịch vụ, trong khi chỉ vài VM cùng cấu hình. Tuy nhiên container không phải lựa chọn tốt cho mọi bài toán: nếu ứng dụng cần một hệ điều hành hoàn toàn khác, hoặc cần mức cô lập tương đương hypervisor thì VM vẫn phù hợp hơn.
Dockerfile và quy trình build image
Dockerfile là file văn bản mô tả từng bước để tạo image. Mỗi lệnh tạo một lớp riêng, nhờ đó Docker cache lớp cũ và chỉ build lại phần thay đổi.
Một ví dụ tối giản cho ứng dụng Python:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Năm lệnh trên lần lượt chọn image nền, đặt thư mục làm việc, sao chép mã nguồn, cài thư viện và chỉ định lệnh khởi chạy. Thứ tự COPY requirements.txt trước COPY . . rất quan trọng: nó giúp Docker tái sử dụng cache của lớp cài thư viện mỗi khi bạn chỉ sửa mã nguồn.
Docker Compose cho ứng dụng nhiều dịch vụ
Một ứng dụng thực tế thường cần database, cache, message queue và web server. Docker Compose gom các dịch vụ này lại trong một file YAML và chạy chúng bằng một lệnh duy nhất.
services:
web:
image: nginx:alpine
ports: ["80:80"]
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Lệnh docker compose up -d sẽ tải image, tạo network nội bộ để các container giao tiếp với nhau theo tên dịch vụ, rồi chạy chúng nền. Lệnh docker compose down dọn dẹp toàn bộ container và network. Nhờ Compose, môi trường dev của bạn được mô tả bằng code thay vì bằng tài liệu viết tay.
Khi nào nên dùng Docker
- CI/CD: mỗi lần commit build một image và gắn tag theo phiên bản, triển khai lại trở nên nhất quán.
- Micro-services: mỗi service chạy trong container riêng, tách biệt failure và dễ scale độc lập.
- Môi trường dev: loại bỏ triệu chứng “chạy được trên máy tôi” vì mọi thành viên dùng chung image.
- Ứng dụng legacy: đóng gói phần mềm cũ lên container mà không cần nâng cấp hệ điều hành của server.
Bắt đầu nhanh trên Ubuntu
Cài đặt Docker Engine bằng gói chính thức của Ubuntu rất đơn giản:
sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
Sau khi đăng xuất và đăng nhập lại để nhóm mới có hiệu lực, kiểm tra cài đặt với docker run hello-world. Nếu lệnh in ra thông điệp chào mừng, Docker đã sẵn sàng. Bước tiếp theo là viết Dockerfile đầu tiên và build image riêng của bạn.
Kinh nghiệm thực tế
Luôn đặt .dockerignore để loại bỏ thư mục node_modules hay .git khỏi build context, giúp build nhanh hơn và image nhỏ hơn. Ưu tiên image dạng alpine hoặc slim thay cho bản đầy đủ. Cuối cùng, đừng để bí mật nằm trong Dockerfile vì chúng sẽ bị ghi vào lịch sử image.
Tài liệu tham khảo


