CodeGym /Các khóa học /Docker SELF /Mở rộng dịch vụ

Mở rộng dịch vụ

Docker SELF
Mức độ , Bài học
Có sẵn

8.1 Lệnh docker compose scale

Mở rộng dịch vụ là quá trình tăng hoặc giảm số lượng instance của container đang chạy cùng một dịch vụ để quản lý tải và đảm bảo tính chịu lỗi của ứng dụng. Trong Docker Compose, để mở rộng dịch vụ, ta dùng lệnh docker compose scale (ở phiên bản cũ) hoặc tham số --scale ở các phiên bản mới.

Các khái niệm chính về mở rộng:

  1. Khả năng mở rộng: Khả năng tăng hoặc giảm dễ dàng số lượng instance của dịch vụ tùy vào tải hiện tại.
  2. Tính chịu lỗi: Chạy nhiều instance của dịch vụ giúp đảm bảo tính chịu lỗi vì nếu một instance bị lỗi sẽ không làm dừng toàn bộ dịch vụ.
  3. Cân bằng tải: Phân phối tải giữa nhiều instance của dịch vụ để tối ưu hóa hiệu suất.

Sử dụng lệnh docker compose scale

Cú pháp lệnh:


docker compose scale SERVICE=NUM

Trong đó:

  • SERVICE: tên dịch vụ cần mở rộng.
  • NUM: số lượng instance cần chạy.

Ví dụ sử dụng:

Giả sử bạn có một file compose.yaml định nghĩa dịch vụ web.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Để chạy 3 instance của dịch vụ web, hãy sử dụng lệnh:

Terminal

docker compose scale web=3

Lưu ý: Trước khi chạy lệnh docker compose scale, hãy đảm bảo rằng các dịch vụ đã được khởi động bằng lệnh docker compose up.

Sử dụng tham số --scale trong các phiên bản mới

Ở các phiên bản Docker Compose mới, lệnh docker compose scale được thay thế bằng tham số --scale, được sử dụng cùng với lệnh up.

Terminal

docker compose up --scale web=3

Cách này được ưu tiên hơn vì nó cho phép khởi động và mở rộng dịch vụ cùng lúc.

8.2 Ví dụ thực tế

Ví dụ 1: Mở rộng web server

Tạo file compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"

Chạy và mở rộng dịch vụ lên 3 bản sao:

Terminal

docker compose up --scale web=3

Giờ bạn sẽ có 3 bản sao web server Nginx đang chạy trên các cổng trong khoảng từ 80-90.

Quan trọng! Nếu dịch vụ cần mở rộng lên nhiều bản sao, cần chỉ định khoảng cổng, ví dụ: "80-90:80". Điều này sẽ "đặt trước" trên máy chủ khoảng 10 cổng. Khi thêm bản sao dịch vụ, một cổng từ khoảng này sẽ được gán. Nếu không làm vậy, các cổng sẽ được chọn ngẫu nhiên và các bản sao sẽ không thể truy cập được.

Ví dụ 2: Mở rộng với cơ sở dữ liệu

Tạo file compose.yaml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80-90:80"
    depends_on:
      - db

  db:
    image: postgres:latest
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password

Chạy và mở rộng dịch vụ web lên 4 bản sao:

Terminal

docker compose up --scale web=4

Giờ bạn sẽ có 4 bản sao web server Nginx kết nối với một cơ sở dữ liệu PostgreSQL duy nhất.

8.3 Quản lý dịch vụ có khả năng mở rộng

Sau khi phóng to dịch vụ, bạn có thể sử dụng các lệnh Docker Compose để quản lý các instance.

Xem container đang chạy

Dùng lệnh docker compose ps để xem tất cả các container đang chạy:

Terminal

docker compose ps

Dừng và xóa dịch vụ đã mở rộng

Để dừng và xóa tất cả các instance của dịch vụ, hãy dùng lệnh docker compose down:

Terminal

docker compose down

Mẹo và khuyến nghị:

  1. Phân phối tải: sử dụng các bộ phân phối tải để chia lưu lượng truy cập giữa nhiều instance của dịch vụ. Ví dụ, bạn có thể dùng Nginx hoặc HAProxy cho mục đích này.
  2. Lưu trữ dữ liệu: đảm bảo rằng dữ liệu được tạo bởi các dịch vụ mở rộng được lưu trữ trong các volume hoặc kho lưu trữ bên ngoài để tránh mất dữ liệu khi dừng hoặc xóa các container.
  3. Giám sát: sử dụng các công cụ giám sát như Prometheus hoặc Grafana để theo dõi hiệu suất và trạng thái của các dịch vụ mở rộng.
  4. Tự động mở rộng: xem xét việc tự động mở rộng dịch vụ dựa trên tải sử dụng với các orchestrator như Kubernetes hoặc Docker Swarm.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION