0
0
Lập trình
TT

Triển Khai Ứng Dụng Mở Rộng với Docker Swarm và Docker Compose

Đăng vào 8 tháng trước

• 5 phút đọc

Giới thiệu

Trong thế giới phát triển phần mềm hiện đại, việc triển khai ứng dụng mở rộng hiệu quả là một yếu tố quan trọng để đảm bảo hiệu suất và tính sẵn có. Docker Swarm và Docker Compose là hai công cụ mạnh mẽ giúp các nhà phát triển dễ dàng quản lý và triển khai các ứng dụng phân tán. Bài viết này sẽ hướng dẫn bạn cách xây dựng một cụm Docker Swarm và triển khai ứng dụng của bạn một cách hiệu quả.

Mục lục

Phần 1: Xây dựng cụm (Nền tảng)

1. Truy cập Play-With-Docker và Tạo Các Instance

Bạn sẽ tạo 5 instance. Đây sẽ là 5 máy chủ của bạn.

2. Khởi tạo Swarm (Chỉ định Người lãnh đạo đầu tiên)

bash Copy
docker swarm init --advertise-addr [ManagerNodeIP]

Bạn chọn một trong năm instance của mình để làm Manager Node đầu tiên. Lệnh này "bắt đầu" swarm và tuyên bố node này là lãnh đạo. Tham số --advertise-addr cho biết địa chỉ IP mà các node khác cần sử dụng để tìm và kết nối với manager này.

3. Thêm Worker Nodes (Chiêu mộ Các Nhân viên)

bash Copy
docker swarm join --token SWMTKN-1-17xx0ratormliuuff545oiotqjjgdrlfvbmji5xny007bhdqdx-98ny7h91d36bcy4dgfd8zujm9 192.168.0.29:2377

Bạn sao chép lệnh join từ manager và dán nó vào 3 instance còn lại. Mã token dài giống như một mật khẩu bí mật chứng minh rằng chúng được phép tham gia vào swarm của bạn. Những node này trở thành Worker Nodes. Nhiệm vụ duy nhất của chúng là chạy các container theo chỉ định của manager.

4. Thêm một Manager Thứ Hai (Có Người Lãnh đạo Dự phòng)

Lệnh:

  1. Trên manager đầu tiên:
bash Copy
docker swarm join-token manager
  1. Trên instance còn lại: Dán lệnh xuất hiện sau lệnh join-token manager vào instance còn lại:
bash Copy
docker swarm join --token SWMTKN-1-17xx0ratormliuuff545oiotqjjgdrlfvbmji5xny007bhdqdx-1hahfhs9mrrgsb0nsyzk8vpyp 192.168.0.29:2377

5. Xác minh Cụm

bash Copy
docker node ls

Phần 2: Định nghĩa và Triển khai Ứng dụng

Dưới đây là tệp docker-compose.yml:

yaml Copy
version: "3.8"

services:
  mydatabase:
    image: mysql:5.7
    restart: always
    volumes: 
      - mydata:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    networks:
      - mynet
  mywordpress:
    image: wordpress:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 2
        delay: 5s
        order: stop-first
    depends_on: 
      - mydatabase
    restart: always
    ports:
      - "80:80"
      - "443:443"
    environment: 
      WORDPRESS_DB_HOST: mydatabase:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    networks:
      - mynet

volumes:
  mydata:

networks:
  mynet:
    driver: overlay

6. Triển khai Stack

bash Copy
docker stack deploy --compose-file docker-compose.yml firststack
  • docker stack: Lệnh để quản lý các ứng dụng đa dịch vụ trong Swarm.
  • deploy: Hành động để tạo hoặc cập nhật ứng dụng.
  • firststack: Tên bạn đặt cho stack ứng dụng của mình.

Manager sẽ đọc tệp của bạn và bắt đầu tạo các container trên các worker nodes theo thông số kỹ thuật của bạn (1 container MySQL và 3 container WordPress).

Phần 3: Kiểm tra và Thử nghiệm Ứng dụng

7. Kiểm tra Stack

bash Copy
docker stack ls
docker stack services firststack
docker stack ps firststack
  • docker stack ls: Liệt kê tất cả các stack đang chạy trên swarm của bạn.
  • docker stack services firststack: Hiển thị các dịch vụ trong stack của bạn (firststack_mydatabasefirststack_mywordpress) và số lượng bản sao đang chạy.
  • docker stack ps firststack: Đây là cái nhìn chi tiết nhất. Nó hiển thị từng container (được gọi là "task" trong Swarm), node mà nó đang chạy trên đó, và trạng thái hiện tại của nó.

8. Kiểm tra Tính năng Tự Khôi Phục

  • Hành động: Bạn sẽ đến một trong các worker nodes và dừng thủ công một container WordPress bằng lệnh docker container stop [containerID].
  • Điều gì đang xảy ra ở đây? Bạn đang mô phỏng một sự cố.
  • Kết quả: Swarm manager liên tục theo dõi cụm. Nó sẽ thấy rằng một trong các bản sao mywordpress đã biến mất (trạng thái mong muốn là 3, nhưng trạng thái hiện tại là 2). Nó sẽ ngay lập tức ra lệnh cho một worker node khởi động một container WordPress mới để đưa số lượng trở lại 3.
  • Xác minh: Nếu bạn chạy lại lệnh docker stack ps firststack trên manager, bạn sẽ thấy container đã dừng và một container mới đã được khởi động để thay thế nó. Điều này chứng tỏ sức mạnh "tự khôi phục" của Swarm.
bash Copy
docker stack ps firststack

Thực tiễn tốt nhất

  • Thường xuyên kiểm tra trạng thái của các node trong cụm: Sử dụng lệnh docker node ls để theo dõi tình trạng của các node.
  • Sử dụng mạng overlay cho các dịch vụ: Điều này giúp tăng cường khả năng mở rộng và bảo mật cho ứng dụng của bạn.

Cạm bẫy thường gặp

  • Không cấu hình đúng địa chỉ IP: Đảm bảo địa chỉ IP mà bạn sử dụng trong lệnh khởi tạo swarm là chính xác.
  • Quản lý tài nguyên không hiệu quả: Theo dõi tài nguyên sử dụng của các container để tránh tình trạng quá tải.

Mẹo hiệu suất

  • Sử dụng phiên bản mới nhất của Docker: Đảm bảo rằng bạn đang sử dụng phiên bản Docker mới nhất để tận dụng các tính năng và sửa lỗi mới nhất.
  • Tối ưu hóa cấu hình MySQL: Cấu hình MySQL để sử dụng bộ nhớ và tài nguyên hiệu quả hơn.

Khắc phục sự cố

  • Container không khởi động: Kiểm tra log của container bằng lệnh docker logs [containerID] để xác định nguyên nhân.
  • Không thể kết nối đến dịch vụ: Kiểm tra cấu hình mạng và đảm bảo rằng các dịch vụ có thể giao tiếp với nhau.

Kết luận

Việc triển khai ứng dụng mở rộng với Docker Swarm và Docker Compose không chỉ đơn giản hóa quy trình mà còn giúp bạn quản lý các ứng dụng phức tạp một cách hiệu quả. Bằng cách làm theo hướng dẫn trên, bạn có thể xây dựng và triển khai các ứng dụng phân tán một cách dễ dàng. Hãy bắt đầu với Docker ngay hôm nay và trải nghiệm những lợi ích mà nó mang lại cho phát triển phần mềm của bạn!

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào