Mô hình Container On-Premise
Container cho phép đóng gói ứng dụng cùng toàn bộ dependencies vào một đơn vị portable và bất biến. Trên on-premise, container chạy trực tiếp trên Linux host (hoặc Windows host) mà không cần hypervisor — khởi động trong mili-giây và mật độ cao hơn VM nhiều lần.
Container hoạt động như thế nào?
Điểm khác biệt cốt lõi với VM
Container không có kernel riêng — mọi container dùng chung kernel host. Sự cô lập đến từ Linux Namespaces (tách PID, network, filesystem) và cgroups (giới hạn CPU/RAM/I/O). Đây là lý do container nhẹ và khởi động nhanh.
Kiến trúc — Docker Single Host
Phù hợp với đội nhỏ, ứng dụng đơn giản, hoặc môi trường dev/staging.
Docker Compose — cấu hình thực tế
# docker-compose.yml
services:
nginx:
image: nginx:alpine
ports: ["443:443", "80:80"]
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/ssl/certs:ro
depends_on: [app]
restart: unless-stopped
app:
image: registry.internal/myapp:2.1.0
environment:
DATABASE_URL: postgresql://app:secret@db:5432/appdb
REDIS_URL: redis://redis:6379/0
depends_on:
db:
condition: service_healthy
restart: unless-stopped
deploy:
replicas: 2 # 2 app instances
worker:
image: registry.internal/myapp:2.1.0
command: celery -A app worker -Q default
environment:
REDIS_URL: redis://redis:6379/0
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: appdb
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "app"]
interval: 10s
restart: unless-stopped
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
pgdata:
networks:
default:
name: app-net
Kiến trúc — Docker Multi-Host với Private Registry
Khi cần nhiều server, dùng Private Container Registry nội bộ để phân phối image.
Kiến trúc — Windows Containers
Windows Server 2019+ hỗ trợ container native với hai chế độ isolation.
| Isolation Mode | Kernel | Boot | Bảo mật | Use Case |
|---|---|---|---|---|
| Process | Chung với host | ~1s | Trung bình | Internal apps, CI/CD |
| Hyper-V | Kernel riêng | ~3-5s | Cao | Multi-tenant, regulated |
| WSL2 (Linux) | Linux kernel | ~1s | Trung bình | Chạy Linux workload trên Windows host |
Luồng CI/CD với Container On-Prem
Ưu điểm & Nhược điểm
Ưu điểm:
- Portable: Build một lần, chạy đồng nhất mọi môi trường (Dev = Staging = Prod)
- Mật độ cao: 50–100 container trên một server — so với 10–20 VM
- Khởi động nhanh: Mili-giây (so với phút của VM)
- Immutable deploy: Mỗi version là image mới → rollback chỉ cần
docker pullimage cũ - Resource limits:
--memory,--cpustránh một container chiếm hết tài nguyên
Nhược điểm:
- Cô lập yếu hơn VM: Chung kernel → kernel vulnerability ảnh hưởng tất cả container
- Stateful khó: Volume management, backup database trong container cần kỹ lưỡng
- Networking phức tạp: Bridge, overlay, macvlan — dễ nhầm khi troubleshoot
- Multi-host không sẵn: Docker standalone không tự cân bằng tải giữa các host → cần Swarm hoặc K8s
Lỗi thường gặp
- Chạy database trong container không có persistent volume → mất data khi restart
- Expose cổng database ra ngoài →
:5432:5432→ SQL Server thấy từ internet - Chạy container với
--privileged→ mất toàn bộ lợi ích cô lập - Không set resource limits → một container OOM kill toàn bộ host