Giới thiệu về Docker Compose
-
Giới thiệu về Docker: Trước khi đi vào Docker Compose, bạn có thể giải thích một chút về Docker: Docker là công cụ giúp phát triển, triển khai và chạy các ứng dụng trong môi trường container.
-
Giới thiệu về Docker Compose: Docker Compose là một công cụ giúp định nghĩa và chạy các ứng dụng Docker đa container. Với Docker Compose, bạn có thể sử dụng một tệp YAML để cấu hình tất cả các container cần thiết cho ứng dụng và sau đó khởi động tất cả chúng chỉ với một lệnh.
Phân phối ứng dụng yêu cầu nhiều container
Khi mà bạn muốn cung cấp 1 sản phẩm hoàn chỉnh đến khách hàng thì ứng dụng của bạn sẽ bao gôm nhiều container:
Harbor System Architecture
├── Data Access Layer
│ ├── Key-Value Storage
│ │ └── Redis
│ ├── Data Storage
│ │ └── (Các giải pháp lưu trữ như NFS, Ceph, hoặc các dịch vụ lưu trữ đối tượng)
│ └── Database
│ └── PostgreSQL
├── Core Services
│ ├── Log Service
│ │ └── Harbor Log
│ ├── Registry Service
│ │ └── Docker Registry
│ ├── Registry Controller
│ │ └── Registryctl
│ ├── Core Service
│ │ └── Harbor Core
│ ├── Portal Service
│ │ └── Harbor Portal
│ ├── Job Service
│ │ └── Harbor Jobservice
│ ├── Proxy Service
│ │ └── Nginx
│ ├── Trivy Adapter Service
│ │ └── Trivy Adapter
│ └── Metrics Exporter Service
│ └── Harbor Exporter
└── Consumers
└── Web Portal
Giải thích các thành phần chính:
-
Data Access Layer:
-
Key-Value Storage (Redis): Cung cấp chức năng lưu trữ tạm thời và hỗ trợ lưu trữ metadata của các job.
-
Data Storage: Lưu trữ dữ liệu thực tế của các artifacts.
-
Database (PostgreSQL): Lưu trữ metadata liên quan đến các mô hình trong Harbor như dự án, người dùng, vai trò, chính sách sao chép, v.v.
-
-
Core Services:
-
Log Service (Harbor Log): Quản lý và thu thập logs từ các thành phần khác nhau trong Harbor.
-
Registry Service (Docker Registry): Lưu trữ và quản lý các Docker images.
-
Registry Controller (Registryctl): Quản lý cấu hình và hoạt động của Docker Registry.
-
Core Service (Harbor Core): Xử lý các nghiệp vụ chính của Harbor như quản lý dự án, người dùng, và các chức năng cốt lõi khác.
-
Portal Service (Harbor Portal): Cung cấp giao diện người dùng web để quản lý và giám sát các artifacts trong Harbor.
-
Job Service (Harbor Jobservice): Quản lý và thực thi các tác vụ bất đồng bộ trong Harbor.
-
Proxy Service (Nginx): Đảm nhận vai trò reverse proxy, chuyển tiếp các yêu cầu từ người dùng đến các dịch vụ backend phù hợp.
-
Trivy Adapter Service (Trivy Adapter): Tích hợp với Trivy để quét các vulnerabilities trong các images.
-
Metrics Exporter Service (Harbor Exporter): Thu thập và xuất các metrics giám sát từ Harbor.
-
-
Consumers:
-
Web Portal: Giao diện người dùng web để quản lý và giám sát các artifacts trong Harbor.
-
Đến với 1 ví dụ thực tế:
https://github.com/goharbor/harbor/blob/main/make/photon/prepare/templates/docker_compose/docker-compose.yml.jinja
https://goharbor.io/docs/2.12.0/install-config/reconfigure-manage-lifecycle/
Và đây video hướng dẫn cài đặt harbor trên Linux:
https://www.youtube.com/watch?v=9IHr0YBZLYI
Docker Compose giúp dễ dàng thiết lập mạng giữa các container
Cách Docker Compose giúp thiết lập mạng giữa các container: Mặc định, Docker Compose sẽ tạo một mạng riêng cho các container trong ứng dụng. Các container này có thể giao tiếp với nhau qua tên dịch vụ mà bạn đã đặt trong tệp docker-compose.yml. Bạn không cần phải cấu hình mạng riêng cho từng container, Docker Compose tự động tạo một mạng ảo cho toàn bộ các container
version: '3.8'
services:
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: testdb
ports:
- "33006:3306"
busybox:
image: yauritux/busybox-curl
container_name: busybox
depends_on:
- mysql
entrypoint: >
sh -c "
echo 'Waiting for MySQL...';
for i in $(seq 1 10); do
nc -z mysql 3306 && echo ' MySQL is up!' && break;
echo ' Waiting...';
sleep 2;
done;
echo ' Busybox is alive. Press Ctrl+C to stop.';
tail -f /dev/null
"
So sánh Docker vs Docker Compose
| Tiêu chí | Docker (đơn lẻ) | Docker Compose |
|---|---|---|
| Tạo container | Thủ công, từng lệnh docker run |
Tự động từ file docker-compose.yml |
| Quản lý nhiều service | Phức tạp | Dễ dàng và tập trung |
| Kết nối giữa services | Cần cấu hình network thủ công | Tự động kết nối qua service name |
| Dễ maintain | Khó khi nhiều container | Dễ vì cấu hình tập trung |