Bạn có biết? Giả sử bạn vừa hoàn thành một ứng dụng web chạy hoàn hảo trên máy tính của mình. Bạn gửi code cho đồng nghiệp, nhưng khi họ chạy thử — lỗi everywhere! Lý do? Máy bạn dùng Python 3.11, họ dùng 3.8. Bạn cài sẵn Redis, họ thì chưa. Hệ điều hành cũng khác nhau.
Đây chính xác là bài toán mà Docker giải quyết. Hãy tưởng tượng Docker giống như một hộp đựng hàng tiêu chuẩn trong ngành vận chuyển — bất kỳ container nào cũng có thể chứa bất kỳ hàng hóa nào, và mọi tàu chở hàng đều có thể vận chuyển chúng. Bạn đóng gói toàn bộ ứng dụng cùng môi trường chạy vào một “hộp” thống nhất, rồi chạy nó ở bất kỳ đâu.
Docker là gì?
Docker là nền tảng containerization mã nguồn mở, cho phép bạn đóng gói ứng dụng cùng toàn bộ dependencies (thư viện, runtime, config) vào một đơn vị chuẩn hoá gọi là Container.
Những điểm chính:
- ✅ Container là phiên bản chạy được của một Image — nhẹ hơn VM rất nhiều
- ✅ Image là bản thiết kế (blueprint) — được định nghĩa trong file
Dockerfile - ✅ Container chia sẻ kernel của hệ điều hành host → khởi động cực nhanh (giây)
- ✅ Cô lập hoàn toàn giữa các container — mỗi container có filesystem, network, process riêng
- ✅ Chạy được trên mọi nền tảng: Linux, macOS, Windows, cloud
- ✅ “Build once, run anywhere” — câu slogan kinh điển của Docker
Docker vs VM vs Bare Metal
Nhiều người nhầm lẫn Docker với máy ảo (VM). Thực tế chúng khác nhau rất nhiều:
| Tiêu chí | Docker (Container) | Máy ảo (VM) | Bare Metal |
|---|---|---|---|
| Kích thước | MB (rất nhẹ) | GB (nặng) | Toàn bộ ổ đĩa |
| Thời gian khởi động | Vài giây | Vài phút | Vài phút đến chục phút |
| Hiệu năng | Gần như native | Có overhead do hypervisor | Native (tối đa) |
| Cô lập | Process-level (chia sẻ kernel) | Full OS-level | Không có |
| Tính di động | Cao nhất — chạy mọi nơi | Trung bình | Thấp — phụ thuộc phần cứng |
| Số lượng trên 1 host | Hàng trăm container | Vài chục VM | 1 hệ điều hành |
| Use case | Microservices, CI/CD, DevOps | Legacy apps, multi-OS | Database lớn, game server |
Vài lệnh Docker cơ bản
Sau khi cài đặt Docker (bài tiếp theo sẽ hướng dẫn chi tiết), bạn có thể kiểm tra ngay với các lệnh sau:
Kiểm tra phiên bản
docker version
Lệnh này hiển thị thông tin phiên bản Docker Engine (client và server).
Xem thông tin hệ thống Docker
docker info
Hiển thị tổng quan: số lượng container, image, dung lượng lưu trữ, driver đang dùng, v.v.
Chạy container đầu tiên
docker run hello-world
Lệnh này tự động tải image hello-world từ Docker Hub (nếu chưa có), tạo container và chạy nó. Nếu bạn thấy thông điệp chào mừng — chúc mừng, Docker đã hoạt động!
Xem container đang chạy
docker ps
Liệt kê tất cả container đang chạy. Thêm flag -a để xem cả container đã dừng:
docker ps -a
Docker dùng để làm gì? — Use Cases thực tế
1. Phát triển phần mềm nhất quán
Đảm bảo môi trường dev, staging, production giống hệt nhau. Không còn câu “Trên máy tôi chạy được mà!”. Toàn bộ team dùng cùng một Docker image → kết quả luôn đồng nhất.
2. CI/CD Pipeline
Docker tích hợp hoàn hảo với Jenkins, GitHub Actions, GitLab CI. Mỗi lần push code, pipeline tự build image mới, chạy test, và deploy. Nhanh, lặp lại được, ít lỗi.
3. Microservices Architecture
Mỗi service (API, database, cache, queue) chạy trong container riêng. Cần scale? Chạy thêm container. Cần rollback? Quay lại image cũ. Linh hoạt hơn rất nhiều so với monolith.
4. Học tập và thử nghiệm nhanh
Muốn thử PostgreSQL, Redis, MongoDB, Elasticsearch? Chỉ cần một lệnh docker run. Không cần cài đặt phức tạp, không lo xung đột thư viện. Xoá container khi xong — sạch sẽ hoàn toàn.
# Chạy Redis trong 10 giây
docker run -d --name my-redis -p 6379:6379 redis
# Chạy PostgreSQL không cần cài đặt
docker run -d --name my-db -e POSTGRES_PASSWORD=secret -p 5432:5432 postgres
Best Practices khi dùng Docker
- Sử dụng image chính thức từ Docker Hub (VD:
node:20-alpine,python:3.12-slim) thay vì tự build từ scratch - Dùng tag cụ thể — tránh
latesttrong production, hãy dùngnode:20.11-alpine - Giảm số layer trong Dockerfile bằng cách gộp lệnh
RUNlại với nhau - Không lưu secret trong image — dùng environment variables hoặc Docker Secrets
- Dùng .dockerignore — loại trừ file không cần thiết (node_modules, .git, .env)
- Mỗi container một process — tuân thủ nguyên tắc single responsibility
- Dọn dẹp thường xuyên — chạy
docker system pruneđể giải phóng dung lượng
Tổng kết
Docker không chỉ là xu hướng — nó đã trở thành tiêu chuẩn công nghiệp trong phát triển và triển khai phần mềm hiện đại. Từ developer cá nhân đến các công ty Fortune 500, mọi người đều sử dụng container.
Bạn đã hiểu Docker là gì, tại sao nó quan trọng, và cách nó hoạt động ở mức cơ bản. Bây giờ là lúc bắt tay vào cài đặt!
Bước tiếp theo
👉 Bài tiếp theo: Cài đặt Docker trên Windows, macOS và Linux — Hướng dẫn chi tiết từ A đến Z
Trong bài tiếp theo, chúng ta sẽ cài đặt Docker Desktop, cấu hình môi trường, và chạy container đầu tiên trên chính máy tính của bạn. Hẹn gặp lại!