メインコンテンツまでスキップ

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 ModeKernelBootBảo mậtUse Case
ProcessChung với host~1sTrung bìnhInternal apps, CI/CD
Hyper-VKernel riêng~3-5sCaoMulti-tenant, regulated
WSL2 (Linux)Linux kernel~1sTrung bìnhChạ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 pull image cũ
  • Resource limits: --memory, --cpus trá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