Giới thiệu tổng quan về Docker và cách sử dụng cơ bản

Docker là một công cụ container hóa nhẹ, được viết bằng Go, giúp đóng gói ứng dụng cùng môi trường chạy thành các đơn vị độc lập, chuẩn hóa và dễ dàng di chuyển giữa các hệ thống. Khác với máy ảo truyền thống, Docker không cần khởi động cả hệ điều hành riêng biệt — thay vào đó, nó chia sẻ kernel của hệ điều hành chủ, giúp tiết kiệm tài nguyên và khởi động nhanh chóng.

So sánh Docker và Máy ảo

Máy ảo hoạt động bằng cách mô phỏng phần cứng thông qua Hypervisor, mỗi máy ảo chứa hệ điều hành riêng và ứng dụng. Trong khi đó, Docker chỉ cần một engine duy nhất để quản lý nhiều container — mỗi container chứa ứng dụng và thư viện phụ thuộc, nhưng không bao gồm hệ điều hành đầy đủ.

Ví dụ: Nếu bạn cần chạy Redis và RabbitMQ, thay vì dựng hai máy ảo riêng lẻ (mỗi cái vài GB RAM và hàng chục GB ổ cứng), bạn chỉ cần kéo hai image từ Docker Hub và chạy chúng trong hai container riêng biệt — cùng chia sẻ tài nguyên hệ thống mà không xung đột.

Câu chuyện thực tế

Bạn từng phải cài đặt Redis và RabbitMQ trên cùng một máy ảo, sau đó phát hiện xung đột thư viện. Giải pháp? Tạo thêm máy ảo thứ hai. Khi công ty mở rộng, bạn phải nhân bản 10 máy ảo — mất hai ngày chỉ để clone và cấu hình.

Nhưng với Docker, bạn chỉ cần:

docker run -d --name redis redis:alpine
docker run -d --name rabbitmq rabbitmq:management

Xong trong vài giây. Muốn thêm 10 instance? Chỉ cần lặp lại lệnh — không cần cài đặt lại hệ điều hành hay cấu hình thủ công.

Ảo hóa vật lý → Máy ảo → Docker

  • Vật lý: Mỗi ứng dụng chạy trên server riêng — lãng phí tài nguyên.
  • Máy ảo: Nhiều VM trên một server — vẫn tốn RAM/CPU cho hệ điều hành.
  • Docker: Nhiều container chia sẻ OS — tối ưu tài nguyên, triển khai nhanh.

Triển khai ứng dụng với Docker

Dưới đây là ví dụ triển khai ứng dụng .NET Core + Nginx + Redis bằng docker-compose.yml:

version: '3.8'
services:
  app:
    build: ./src
    ports:
      - "5000:80"
    depends_on:
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  redis_data:

Chạy toàn bộ hệ thống chỉ với một lệnh:

docker-compose up -d

Quản lý nhiều container với Docker Compose

Khi số lượng container tăng lên, việc chạy từng lệnh docker run trở nên bất khả thi. Docker Compose giúp định nghĩa và quản lý toàn bộ hệ thống trong một file YAML.

Cài đặt Docker Compose (Linux):

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Một số lệnh hữu ích:

  • docker-compose up — Khởi động tất cả dịch vụ
  • docker-compose down — Dừng và xóa container
  • docker-compose ps — Xem trạng thái container

Lưu ý: Docker Compose chỉ quản lý container trên máy cục bộ. Để quản lý cluster phân tán, cần dùng Kubernetes hoặc Swarm.

Thẻ: docker docker-compose containerization DevOps Microservices

Đăng vào ngày 14 tháng 6 lúc 07:55