Docker Cơ Bản: Hướng Dẫn Toàn Diện

Chào mừng đến Giai đoạn 1 của Lộ Trình Học Docker & Kubernetes! Trong hướng dẫn này, bạn sẽ làm chủ các kiến thức cơ bản về Docker—nền tảng cho mọi phát triển và triển khai dựa trên container.
Bạn Sẽ Học Được
✅ Hiểu containers vs virtual machines
✅ Cài đặt Docker trên mọi nền tảng
✅ Làm việc với Docker images và layers
✅ Chạy, dừng và quản lý containers
✅ Map ports và expose services
✅ Lưu trữ dữ liệu với volumes
✅ Thành thạo các lệnh Docker thiết yếu
Docker Là Gì?
Docker là nền tảng đóng gói ứng dụng và dependencies vào containers—môi trường nhẹ, portable và isolated chạy nhất quán trên mọi hệ thống.
Vấn Đề Docker Giải Quyết
Trước containers:
Developer: "Nó chạy trên máy tôi!"
Ops: "Nhưng nó không chạy trên server."Docker giải quyết bằng cách đóng gói mọi thứ ứng dụng cần vào container.
Containers vs Virtual Machines
| Đặc Điểm | Virtual Machine | Container |
|---|---|---|
| Kích thước | GBs (full OS) | MBs (app + deps) |
| Khởi động | Phút | Giây |
| Isolation | Hoàn toàn (hardware) | Process-level |
| Hiệu suất | ~5-10% overhead | Gần native |
| Mật độ | ~10s/host | ~100s/host |
Kiến Trúc Docker
Các Thành Phần Chính
1. Docker Client (docker) - Giao diện command-line
2. Docker Daemon (dockerd) - Service quản lý containers, images
3. Docker Registry (Docker Hub) - Lưu trữ Docker images
Cài Đặt Docker
macOS và Windows: Docker Desktop
# Tải từ docker.com/products/docker-desktop
# Cài đặt và khởi động
# Kiểm tra
docker --version
docker run hello-worldLinux: Docker Engine
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# Thêm user vào docker group
sudo usermod -aG docker $USERDocker Images
Image là template read-only chứa code, runtime, libraries và config.
Các Lệnh Image
# Pull image
docker pull nginx:1.25
# Liệt kê images
docker images
# Xóa image
docker rmi nginx:1.25
# Xóa images không dùng
docker image pruneImage Naming
registry/repository:tag
Ví dụ:
nginx:1.25 # Official image
myregistry.com/team/app:v1.0 # Private registryDocker Containers
Container là instance đang chạy của image.
Chạy Container
# Chạy container
docker run nginx
# Chạy ở background
docker run -d nginx
# Chạy với tên
docker run -d --name my-nginx nginx
# Interactive mode
docker run -it ubuntu bashQuản Lý Container
# Liệt kê containers đang chạy
docker ps
# Liệt kê tất cả containers
docker ps -a
# Dừng container
docker stop my-nginx
# Khởi động lại
docker start my-nginx
# Xóa container
docker rm my-nginx
# Xóa container đang chạy
docker rm -f my-nginxLogs và Exec
# Xem logs
docker logs my-nginx
docker logs -f my-nginx # Follow
# Chạy lệnh trong container
docker exec -it my-nginx bashPort Mapping
# Map port 8080 host → 80 container
docker run -p 8080:80 nginx
# Nhiều ports
docker run -p 80:80 -p 443:443 nginx
# Xem ports
docker port container_nameData Persistence với Volumes
1. Named Volumes (Khuyến nghị)
# Tạo volume
docker volume create my-data
# Sử dụng volume
docker run -v my-data:/var/lib/postgresql/data postgres:15
# Liệt kê volumes
docker volume ls
# Xóa volume
docker volume rm my-data2. Bind Mounts
# Mount thư mục hiện tại
docker run -v $(pwd):/app node:20
# Read-only
docker run -v $(pwd)/config:/etc/app:ro my-appEnvironment Variables
# Đơn lẻ
docker run -e DATABASE_URL=postgres://localhost/db my-app
# Nhiều biến
docker run \
-e DATABASE_URL=postgres://localhost/db \
-e NODE_ENV=production \
my-app
# Từ file
docker run --env-file .env my-appCác Lệnh Thiết Yếu
Images
docker pull nginx:1.25 # Pull image
docker images # Liệt kê
docker rmi nginx:1.25 # Xóa
docker image prune # Dọn dẹpContainers
docker run -d --name app nginx # Chạy
docker ps # Liệt kê
docker stop app # Dừng
docker start app # Khởi động
docker rm app # Xóa
docker logs app # Logs
docker exec -it app bash # ExecSystem
docker system df # Disk usage
docker system prune # Dọn dẹp
docker version # VersionVí Dụ Thực Hành
Nginx Web Server
docker run -d --name web -p 8080:80 nginx:1.25
curl http://localhost:8080
docker logs web
docker stop web && docker rm webPostgreSQL Database
# Với persistent storage
docker volume create pgdata
docker run -d \
--name postgres \
-e POSTGRES_USER=admin \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=myapp \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:15
# Kết nối
docker exec -it postgres psql -U admin -d myappRedis Cache
docker run -d \
--name redis \
-v redis-data:/data \
-p 6379:6379 \
redis:7 \
redis-server --appendonly yesLỗi Thường Gặp
❌ Sử dụng :latest tag
# Tránh
docker run nginx:latest
# Nên dùng
docker run nginx:1.25.3❌ Không dùng volumes
# Dữ liệu mất khi xóa container
docker run postgres:15
# Nên dùng volumes
docker run -v pgdata:/var/lib/postgresql/data postgres:15❌ Không dọn dẹp
# Chạy định kỳ
docker system prune --volumesBest Practices
Images
✅ Dùng tag version cụ thể
✅ Ưu tiên official images
✅ Dùng base images nhỏ (alpine, slim)
Containers
✅ Chạy detached mode (-d) cho services
✅ Luôn đặt tên containers (--name)
✅ Dùng --rm cho lệnh một lần
Data
✅ Dùng named volumes cho data persistent
✅ Bind mounts chỉ cho development
✅ Backup volumes định kỳ
Tóm Tắt
✅ Docker đóng gói ứng dụng vào containers portable
✅ Containers nhẹ hơn VMs (MB vs GB)
✅ Docker dùng kiến trúc client-server
✅ Images là templates; containers là instances đang chạy
✅ Port mapping expose containers ra host network
✅ Volumes lưu trữ dữ liệu persistent
✅ Environment variables cấu hình containers
Series: Lộ Trình Docker & Kubernetes
Tiếp theo: Giai đoạn 2: Docker Compose & Multi-Container Apps
Đọc bản đầy đủ bằng tiếng Anh: Docker Fundamentals
📬 Đăng ký nhận bản tin
Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.
Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.
💬 Comments
Đăng nhập để bình luận
Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.