
Docker cho người mới — từ khái niệm đến thực hành. Docker là công nghệ đóng gói ứng dụng vào container, giúp chạy phần mềm giống nhau trên mọi máy tính. Bài viết này hướng dẫn từng bước: cài đặt Docker, viết Dockerfile, chạy container đầu tiên và các lệnh thường dùng — đủ để bạn tự tin làm việc với Docker trong dự án thực tế.
Container là gì? Vì sao cần Docker?
Trước Docker, bài toán kinh điển: code chạy trên máy mình nhưng không chạy trên server. Nguyên nhân: phiên bản hệ điều hành, thư viện, cấu hình khác nhau. Container giải quyết bằng cách đóng gói ứng dụng cùng toàn bộ môi trường chạy — thư viện, runtime, cấu hình — vào một gói duy nhất.
So với máy ảo truyền thống:
- Nhẹ hơn: máy ảo cần cả hệ điều hành riêng (nhiều GB), container dùng chung kernel máy chủ
- Khởi động nhanh: container bật trong vài giây, máy ảo mất vài phút
- Tiết kiệm tài nguyên: chạy hàng chục container trên một server
- Nhất quán: cùng image = cùng môi trường, hết chuyện “chạy được trên máy tôi”
Cài đặt Docker
Trên Ubuntu/Debian (server phổ biến nhất):
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
Trên Windows/macOS: tải Docker Desktop và cài đặt theo hướng dẫn. Kiểm tra cài đặt thành công:
docker --version
docker run hello-world
Lệnh thứ hai tải image hello-world và chạy thử — nếu thấy thông báo chào mừng nghĩa là Docker hoạt động.
Khái niệm cốt lõi
- Image: bản thiết kế chỉ đọc, chứa mã nguồn + môi trường. Ví dụ
node:20,python:3.12 - Container: instance đang chạy từ image — có trạng thái riêng, có thể start/stop
- Dockerfile: file văn bản mô tả cách xây dựng image từng bước
- Registry: kho lưu trữ image — Docker Hub là registry công khai lớn nhất
- Volume: vùng lưu trữ dữ liệu tồn tại độc lập với container
Viết Dockerfile đầu tiên
Tạo file Dockerfile cho ứng dụng Node.js đơn giản:
# Lấy image nền có sẵn Node.js
FROM node:20-alpine
# Thư mục làm việc trong container
WORKDIR /app
# Sao chép file package.json trước để tận dụng cache
COPY package*.json ./
RUN npm install
# Sao chép toàn bộ mã nguồn
COPY . .
# Cổng ứng dụng lắng nghe
EXPOSE 3000
# Lệnh chạy khi container khởi động
CMD ["node", "index.js"]
Xây dựng image và chạy:
docker build -t my-app .
docker run -p 3000:3000 my-app
Mở trình duyệt truy cập http://localhost:3000 — ứng dụng đã chạy trong container.
Các lệnh Docker thường dùng
| Lệnh | Chức năng |
|---|---|
docker ps |
Xem container đang chạy |
docker ps -a |
Xem tất cả container (kể cả đã dừng) |
docker images |
Xem danh sách image đã tải |
docker stop <tên> |
Dừng container |
docker rm <tên> |
Xóa container |
docker rmi <image> |
Xóa image |
docker logs <tên> |
Xem log của container |
docker exec -it <tên> sh |
Mở shell bên trong container |
Docker Compose — nhiều container cùng lúc
Ứng dụng thực tế thường gồm nhiều phần: web, database, cache. Docker Compose quản lý toàn bộ bằng một file docker-compose.yml:
version: "3.9"
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Chạy cả hệ thống chỉ với một lệnh:
docker compose up -d
Compose tự tạo network nội bộ, các service gọi nhau qua tên service (ví dụ db thay vì địa chỉ IP).
Lỗi thường gặp và cách xử lý
- Port bị trùng:
port is already allocated— đổi cổng host hoặc dừng container cũ bằngdocker ps+docker stop - Dữ liệu mất khi xóa container: dữ liệu trong container không bền — dùng volume (
volumes:trong compose) để lưu trữ - Image quá lớn: dùng image nhẹ như
alpine, gộp lệnhRUNbằng&& - Không thấy container sau khi chạy: kiểm tra
docker ps -avàdocker logsđể xem lỗi khởi động
Kết luận
Docker là kỹ năng bắt buộc cho developer 2026 — từ cá nhân làm side project đến đội ngũ vận hành hệ thống lớn. Nắm được năm khái niệm cốt lõi (image, container, Dockerfile, registry, volume) và các lệnh cơ bản, bạn đã đủ nền tảng. Bước tiếp theo: học Docker Compose cho multi-container, rồi đến Kubernetes khi hệ thống cần mở rộng.
