Docker Swarm là một công cụ điều phối container được xây dựng trên Docker Engine. Công cụ này cho phép bạn tạo và triển khai một cụm các nút Docker với nhiều máy chủ. Docker Swarm đơn giản hóa việc triển khai ứng dụng được chứa trong container của bạn thành một dịch vụ. Cung cấp một cách đơn giản và dễ dàng nhất để quản lý và điều phối container.
Docker Swarm cung cấp mức độ khả dụng cao cho các ứng dụng. Trong Docker Swarm, bạn có thể chạy một ứng dụng hoặc dịch vụ duy nhất trên nhiều nút, được gọi là 'Worker Nodes". Ngoài ra còn có một nút có tên là "Swarm Manager", là đơn vị quản lý và điều phối trung tâm của Docker Swarm.
Hướng dẫn này sẽ chỉ cho bạn cách thiết lập Docker Swarm bằng máy chủ Rocky Linux. Bạn sẽ cài đặt Docker trên mỗi máy chủ, thiết lập firewalld, khởi tạo Swarm Manager và thêm Nodes, và cuối cùng, bạn cũng sẽ tìm hiểu cách sử dụng cơ bản Docker Swarm để triển khai các ứng dụng được chứa trong container.
Đối với phần trình diễn này, chúng tôi sẽ sử dụng ba máy chủ Rocky Linux với các chi tiết bên dưới:
Với tất cả các yêu cầu này, bạn đã sẵn sàng để bắt đầu triển khai Docker Swarm.
Bây giờ bạn sẽ cài đặt Docker Engine trên mọi máy chủ Rocky Linux của mình.
Thêm kho lưu trữ Docker cho hệ thống Rocky Linux thông qua lệnh dnf bên dưới.
Sau khi kho lưu trữ được thêm vào, hãy chạy lệnh dnf bên dưới để xác minh danh sách kho lưu trữ và cập nhật tất cả packages.
Nếu kho lưu trữ Docker được thêm vào, bạn sẽ thấy đầu ra bên dưới:
Tiếp theo, cài đặt Docker thông qua lệnh dnf bên dưới. Khi được nhắc xác nhận cài đặt, hãy nhập y và nhấn ENTER để tiếp tục.
Sau khi Docker được cài đặt, hãy khởi động và kích hoạt dịch vụ 'docker' thông qua lệnh systemctl bên dưới. Dịch vụ 'docker' sẽ chạy và tự động chạy khi khởi động hệ thống.
Cuối cùng, hãy xác minh dịch vụ 'docker' bằng lệnh bên dưới để đảm bảo dịch vụ đang chạy.
Nếu dịch vụ 'docker' đang chạy, bạn sẽ nhận được kết quả như sau bên dưới.
Ngoài ra, nếu bạn muốn chạy Docker với người dùng không phải root, bạn phải thêm người dùng vào nhóm 'docker' thông qua lệnh bên dưới.
Dưới đây là một số cổng TCP và UDP mà bạn phải mở trên mỗi máy chủ để triển khai Docker Swarm và chạy đúng cách:
Tiếp theo, tải lại firewalld rules và xác minh danh sách các cổng trên firewalld bằng lệnh bên dưới.
Bạn sẽ thấy một số cổng TCP và UDP để triển khai Docker Swarm được thêm vào firewalld.
Với công cụ Docker được cài đặt trên mọi máy chủ và cấu hình Firewalld, giờ đây bạn có thể thiết lập triển khai Docker Swarm bằng cách khởi tạo nút đầu tiên làm "Trình quản lý Swarm".
Swarm Manager là trình quản lý cụm cho Docker Swarm của bạn, nó quản lý trạng thái triển khai ứng dụng của bạn và cũng được tích hợp với Docker Engine. Swarm Manager cung cấp mô hình dịch vụ khai báo và khả năng mở rộng dịch vụ, trạng thái dịch vụ mong muốn và cũng cung cấp các bản cập nhật liên tục.
Trong ví dụ này, chúng tôi sẽ khởi tạo máy chủ "swarm-manager1" với địa chỉ IP "192.168.5.100" làm Swarm Manager.
Chạy lệnh sau "docker swarm init" trên máy chủ "swarm-manager1" để bắt đầu khởi tạo Swarm Manager trên triển khai của bạn.
Trong ví dụ này, Swarm Manager đang chạy trên địa chỉ IP "192.168.5.100" và mạng mặc định cho các dịch vụ trên Docker Swarm sẽ là "10.10.0.0/16".
Bây giờ bạn sẽ thấy đầu ra tương tự như ảnh chụp màn hình sau khi Trình quản lý đàn được khởi tạo. Ngoài ra, bạn có thể thấy hướng dẫn cần thêm các nút worker vào triển khai Docker Swarm của mình, bao gồm cả mã thông báo đã tạo mà bạn phải sử dụng.
Tiếp theo, hãy chạy lệnh docker sau để xác minh rằng chế độ Swarm đã được kích hoạt và bật.
Bạn sẽ thấy chế độ Swarm là "hoạt động" với địa chỉ IP mạng cho các dịch vụ là "10.10.0.0/16", giống với cấu hình trong quá trình khởi tạo. Ngoài ra, bạn có thể thấy nút hiện tại có sẵn trên Docker Swarm chỉ là "1".
Xác minh danh sách các nút có sẵn trên Docker Swarm của bạn thông qua lệnh "docker node" bên dưới. Và bạn sẽ thấy chỉ có một nút trên triển khai Docker Swarm của bạn.
Đồng thời, Swarm Manager cũng có thể được sử dụng làm nút worker, nghĩa là ứng dụng của bạn cũng có thể chạy trên Swarm Manager.
Chạy lệnh "docker swarm join" sau để thêm máy chủ "worker1" và "worker2" vào Docker Swarm. Ngoài ra, hãy đảm bảo thay thế mã thông báo bằng mã thông báo được tạo trong môi trường của bạn.
Khi bạn nhận được thông báo đầu ra như "Nút này đã tham gia bầy đàn với tư cách là một công nhân", điều này có nghĩa là nút công nhân đã được thêm vào.
Bạn có thể thấy đầu ra tương tự khi "worker1" và "worker2" được tham gia vào Docker Swarm.
Tiếp theo, hãy vào lại Trình quản lý bầy đàn và chạy lệnh docker bên dưới để xác minh danh sách các nút trên Docker của bạn Swarm.
Bạn sẽ thấy ba nút trên môi trường Docker Swarm của mình. Trong ví dụ này, 'swarm-manager1" được sử dụng làm Swarm Manager và cả máy chủ "worker1" và "worker2" đều được sử dụng làm nút worker.
Ngoài ra, bạn cũng có thể xác minh danh sách các nút bằng lệnh docker bên dưới.
Trên máy chủ Swarm Manager, bạn có thể thấy đầu ra trong ảnh chụp màn hình sau. Có 1 trình quản lý và 3 nút (swarm-manager cũng được sử dụng làm worker).
Nhưng, trên "worker1" và Máy chủ "worker2", bạn sẽ thấy đầu ra như sau. Bạn có thể thấy địa chỉ IP của Swarm Manager với cổng TCP mặc định là 2377.
Lúc này, bạn đã hoàn tất triển khai Docker Swarm bằng Rocky Linux. Tiếp theo, bạn sẽ triển khai ứng dụng/dịch vụ vào môi trường Swarm của mình.
Để triển khai dịch vụ trên Docker Swarm, bạn nên chỉ định hình ảnh cơ sở mà bạn sẽ sử dụng, các cổng, tên cụ thể của dịch vụ và số lượng bản sao cho dịch vụ của bạn.
Bây giờ bạn sẽ tìm hiểu về triển khai cơ bản các dịch vụ của mình vào Docker Swarm.
Trong ví dụ này, bạn sẽ tạo một dịch vụ mới "test-httpd" với 1 bản sao và hiển thị cổng "8000" trên nút Swarm. Hình ảnh mà bạn sẽ sử dụng là "httpd:alpine".
Chạy lệnh "docker service" sau để tạo một dịch vụ mới.
Bây giờ hãy xác minh các dịch vụ trên Docker Swarm của bạn thông qua lệnh docker bên dưới. Bạn sẽ thấy dịch vụ "test-httpd" đang chạy và cũng hiển thị cổng TCP 8000 chỉ với 1 bản sao.
Tiếp theo, hãy kiểm tra thông tin chi tiết về dịch vụ "test-httpd" của bạn thông qua lệnh bên dưới.
Bên dưới, bạn có thể thấy dịch vụ chi tiết của "test-httpd".
Ngoài ra, bạn có thể kiểm tra container chạy trên dịch vụ "test-httpd" thông qua lệnh "docker service" như bên dưới.
Bạn có thể thấy container "test-httpd.1" đang chạy trên máy chủ "swarm-manager1".
Bây giờ hãy mở cổng "8000" trên tất cả các máy chủ bằng lệnh firewall-cmd sau lệnh.
Sau đó, hãy xác minh dịch vụ "test-httpd" bằng lệnh curl như bên dưới. Trong ví dụ này, địa chỉ IP "swarm-manager1" là "192.168.5.100".
Bạn sẽ thấy trang index.html mặc định của dịch vụ "test-httpd".
Chạy lệnh sau để mở rộng dịch vụ "test-httpd" thành 3 bản sao. Lệnh này sẽ tạo thêm hai dịch vụ "test-httpd" trên các nút worker.
Bây giờ, hãy xác minh danh sách các dịch vụ đang chạy bằng lệnh sau. Bạn sẽ thấy một dịch vụ "test-httpd" khác đang chạy trên cả máy chủ "worker1" và "worker2".
Cuối cùng, hãy xác minh dịch vụ thông qua lệnh curl như bên dưới trên cả máy chủ "worker1" và "worker2". Nếu dịch vụ đang chạy, bạn sẽ thấy trang index.html mặc định trên màn hình của mình.
Đang kiểm tra dịch vụ trên worker1.
Đang kiểm tra dịch vụ trên worker2.
Chạy lệnh sau để xóa dịch vụ "test-httpd" khỏi Docker Swarm.
Sau đó, hãy xác minh dịch vụ "test-httpd" thông qua lệnh "docker service inspect" bên dưới. Bạn sẽ thấy dịch vụ đã bị xóa.
Ngoài ra, bạn cũng có thể xác minh thông qua lệnh docker bên dưới để kiểm tra danh sách các container và hình ảnh đang chạy trên Swarm của bạn.
Bạn sẽ thấy container đã bị xóa và hình ảnh httpd:alpine có sẵn trên tất cả các máy chủ.
Từ đây, giờ bạn có thể triển khai các ứng dụng được chứa trong container của mình với tất cả các phụ thuộc vào Docker Swarm. Bạn cũng có thể thêm Swarm Manager để thiết lập tính khả dụng cao cho môi trường Docker Swarm của mình.
Docker Swarm cung cấp mức độ khả dụng cao cho các ứng dụng. Trong Docker Swarm, bạn có thể chạy một ứng dụng hoặc dịch vụ duy nhất trên nhiều nút, được gọi là 'Worker Nodes". Ngoài ra còn có một nút có tên là "Swarm Manager", là đơn vị quản lý và điều phối trung tâm của Docker Swarm.
Hướng dẫn này sẽ chỉ cho bạn cách thiết lập Docker Swarm bằng máy chủ Rocky Linux. Bạn sẽ cài đặt Docker trên mỗi máy chủ, thiết lập firewalld, khởi tạo Swarm Manager và thêm Nodes, và cuối cùng, bạn cũng sẽ tìm hiểu cách sử dụng cơ bản Docker Swarm để triển khai các ứng dụng được chứa trong container.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn sẽ cần ít nhất ba máy chủ Rocky Linux và một người dùng không phải root có quyền sudo/administrator.Đối với phần trình diễn này, chúng tôi sẽ sử dụng ba máy chủ Rocky Linux với các chi tiết bên dưới:
Mã:
Hostname IP Address Used as
---------------------------------------------------
swarm-manager1 192.168.5.100 Swarm Manager
worker1 192.168.5.120 Node
worker2 192.168.5.121 Node
Cài đặt Docker
Để thiết lập Docker Swarm, bạn phải cài đặt Docker Engine trên mọi máy/máy chủ. Đối với bản phân phối Rocky Linux, bạn có thể cài đặt Docker thông qua kho lưu trữ Docker chính thức.Bây giờ bạn sẽ cài đặt Docker Engine trên mọi máy chủ Rocky Linux của mình.
Thêm kho lưu trữ Docker cho hệ thống Rocky Linux thông qua lệnh dnf bên dưới.
Mã:
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Mã:
sudo dnf repo list
sudo dnf update
Tiếp theo, cài đặt Docker thông qua lệnh dnf bên dưới. Khi được nhắc xác nhận cài đặt, hãy nhập y và nhấn ENTER để tiếp tục.
Mã:
sudo dnf install docker-ce docker-ce-cli containerd.io
Sau khi Docker được cài đặt, hãy khởi động và kích hoạt dịch vụ 'docker' thông qua lệnh systemctl bên dưới. Dịch vụ 'docker' sẽ chạy và tự động chạy khi khởi động hệ thống.
Mã:
sudo systemctl enable docker
sudo systemctl start docker
Mã:
sudo systemctl status docker
Ngoài ra, nếu bạn muốn chạy Docker với người dùng không phải root, bạn phải thêm người dùng vào nhóm 'docker' thông qua lệnh bên dưới.
Mã:
sudo usermod -aG docker user
Thiết lập Firewalld
Đối với môi trường sản xuất, bạn nên bật tường lửa trên mọi máy chủ. Trên hệ thống Rocky Linux mặc định, firewalld được bật theo mặc định. Vì vậy, bạn chỉ cần thêm một số cổng TCP và UDP để triển khai Docker Swarm.Dưới đây là một số cổng TCP và UDP mà bạn phải mở trên mỗi máy chủ để triển khai Docker Swarm và chạy đúng cách:
- Cổng TCP 2377 để liên lạc quản lý cụm - nếu bạn có nhiều Trình quản lý Swarm.
- Cổng TCP và UDP 7946 để liên lạc giữa các nút - cho tất cả các nút trên môi trường Swarm.
- Cổng UDP 4789 để lưu lượng mạng phủ
Mã:
sudo firewall-cmd --add-port=2377/tcp --permanent
sudo firewall-cmd --add-port=7946/tcp --permanent
sudo firewall-cmd --add-port=7946/udp --permanent
sudo firewall-cmd --add-port=4789/udp --permanent
Mã:
sudo firewall-cmd --reload
sudo firewall-cmd --list-port
Với công cụ Docker được cài đặt trên mọi máy chủ và cấu hình Firewalld, giờ đây bạn có thể thiết lập triển khai Docker Swarm bằng cách khởi tạo nút đầu tiên làm "Trình quản lý Swarm".
Đang khởi tạo Trình quản lý Swarm
Swarm Manager là bộ não của môi trường Docker Swarm của bạn. Đối với các triển khai lớn, bạn có thể thêm nhiều máy chủ làm trình quản lý Swarm, cho phép Swarm Manager có khả năng sẵn sàng cao và khả năng chịu lỗi.Swarm Manager là trình quản lý cụm cho Docker Swarm của bạn, nó quản lý trạng thái triển khai ứng dụng của bạn và cũng được tích hợp với Docker Engine. Swarm Manager cung cấp mô hình dịch vụ khai báo và khả năng mở rộng dịch vụ, trạng thái dịch vụ mong muốn và cũng cung cấp các bản cập nhật liên tục.
Trong ví dụ này, chúng tôi sẽ khởi tạo máy chủ "swarm-manager1" với địa chỉ IP "192.168.5.100" làm Swarm Manager.
Chạy lệnh sau "docker swarm init" trên máy chủ "swarm-manager1" để bắt đầu khởi tạo Swarm Manager trên triển khai của bạn.
Trong ví dụ này, Swarm Manager đang chạy trên địa chỉ IP "192.168.5.100" và mạng mặc định cho các dịch vụ trên Docker Swarm sẽ là "10.10.0.0/16".
Mã:
docker swarm init --advertise-addr 192.168.5.100 --default-addr-pool 10.10.0.0/16
Tiếp theo, hãy chạy lệnh docker sau để xác minh rằng chế độ Swarm đã được kích hoạt và bật.
Mã:
docker info
Xác minh danh sách các nút có sẵn trên Docker Swarm của bạn thông qua lệnh "docker node" bên dưới. Và bạn sẽ thấy chỉ có một nút trên triển khai Docker Swarm của bạn.
Mã:
docker node ls
Thêm nút Worker vào Swarm
Trong Docker Swarm, nút worker có cùng khái niệm như trong quá trình dàn dựng container khác, đó là nơi các container được thực thi và chạy. Docker Engine phải được cài đặt trên mỗi nút worker và worker cũng có thể được thăng cấp thành "Swarm Manager".Đồng thời, Swarm Manager cũng có thể được sử dụng làm nút worker, nghĩa là ứng dụng của bạn cũng có thể chạy trên Swarm Manager.
Chạy lệnh "docker swarm join" sau để thêm máy chủ "worker1" và "worker2" vào Docker Swarm. Ngoài ra, hãy đảm bảo thay thế mã thông báo bằng mã thông báo được tạo trong môi trường của bạn.
Mã:
docker swarm join \
--token SWMTKN-1-4qxedy87gygenejrw06hlqpuwfm6erulccfj1jhnmsn0kehbnb-2ld4g3zo36bzu8d8ss4115rhq 192.168.5.100:2377
Bạn có thể thấy đầu ra tương tự khi "worker1" và "worker2" được tham gia vào Docker Swarm.
Tiếp theo, hãy vào lại Trình quản lý bầy đàn và chạy lệnh docker bên dưới để xác minh danh sách các nút trên Docker của bạn Swarm.
Mã:
docker node ls
Ngoài ra, bạn cũng có thể xác minh danh sách các nút bằng lệnh docker bên dưới.
Mã:
docker info
Nhưng, trên "worker1" và Máy chủ "worker2", bạn sẽ thấy đầu ra như sau. Bạn có thể thấy địa chỉ IP của Swarm Manager với cổng TCP mặc định là 2377.
Lúc này, bạn đã hoàn tất triển khai Docker Swarm bằng Rocky Linux. Tiếp theo, bạn sẽ triển khai ứng dụng/dịch vụ vào môi trường Swarm của mình.
Quản lý dịch vụ trên Docker Swarm
Khi bạn triển khai ứng dụng vào môi trường Docker Swarm, ứng dụng đó sẽ được gọi là "dịch vụ". Đó là hình ảnh của ứng dụng dịch vụ vi mô của bạn và có thể là máy chủ HTTP, máy chủ cơ sở dữ liệu hoặc các ứng dụng khác.Để triển khai dịch vụ trên Docker Swarm, bạn nên chỉ định hình ảnh cơ sở mà bạn sẽ sử dụng, các cổng, tên cụ thể của dịch vụ và số lượng bản sao cho dịch vụ của bạn.
Bây giờ bạn sẽ tìm hiểu về triển khai cơ bản các dịch vụ của mình vào Docker Swarm.
Trong ví dụ này, bạn sẽ tạo một dịch vụ mới "test-httpd" với 1 bản sao và hiển thị cổng "8000" trên nút Swarm. Hình ảnh mà bạn sẽ sử dụng là "httpd:alpine".
Chạy lệnh "docker service" sau để tạo một dịch vụ mới.
Mã:
docker service create --replicas 1 --name test-httpd -p 8000:80 httpd:alpine
Bây giờ hãy xác minh các dịch vụ trên Docker Swarm của bạn thông qua lệnh docker bên dưới. Bạn sẽ thấy dịch vụ "test-httpd" đang chạy và cũng hiển thị cổng TCP 8000 chỉ với 1 bản sao.
Mã:
docker service ls
Tiếp theo, hãy kiểm tra thông tin chi tiết về dịch vụ "test-httpd" của bạn thông qua lệnh bên dưới.
Mã:
docker service inspect test-httpd
docker service inspect --pretty test-httpd
Ngoài ra, bạn có thể kiểm tra container chạy trên dịch vụ "test-httpd" thông qua lệnh "docker service" như bên dưới.
Mã:
docker service ps test-httpd
Bây giờ hãy mở cổng "8000" trên tất cả các máy chủ bằng lệnh firewall-cmd sau lệnh.
Mã:
sudo firewall-cmd --add-port=8000/tcp
Mã:
curl 192.168.5.30:8000
curl -I 192.168.5.30:8000
Mở rộng dịch vụ trên Docker Swarm
Sau khi triển khai dịch vụ trên Docker Swarm, bây giờ bạn sẽ tìm hiểu cách mở rộng dịch vụ và ứng dụng của mình.Chạy lệnh sau để mở rộng dịch vụ "test-httpd" thành 3 bản sao. Lệnh này sẽ tạo thêm hai dịch vụ "test-httpd" trên các nút worker.
Mã:
docker service scale test-httpd=3
Bây giờ, hãy xác minh danh sách các dịch vụ đang chạy bằng lệnh sau. Bạn sẽ thấy một dịch vụ "test-httpd" khác đang chạy trên cả máy chủ "worker1" và "worker2".
Mã:
docker service ps test-httpd
Cuối cùng, hãy xác minh dịch vụ thông qua lệnh curl như bên dưới trên cả máy chủ "worker1" và "worker2". Nếu dịch vụ đang chạy, bạn sẽ thấy trang index.html mặc định trên màn hình của mình.
Đang kiểm tra dịch vụ trên worker1.
Mã:
docker ps
curl worker1:8000
Đang kiểm tra dịch vụ trên worker2.
Mã:
docker ps
curl worker2:8000
Đang xóa dịch vụ trên Docker Swarm
Bạn đã tìm hiểu về các dịch vụ triển khai và mở rộng cơ bản trên Docker Swarm. Tiếp theo, bạn sẽ dọn dẹp môi trường Docker Swarm của mình bằng cách xóa dịch vụ "test-httpd".Chạy lệnh sau để xóa dịch vụ "test-httpd" khỏi Docker Swarm.
Mã:
docker service rm test-httpd
Mã:
docker service inspect test-httpd
Bạn sẽ thấy container đã bị xóa và hình ảnh httpd:alpine có sẵn trên tất cả các máy chủ.
Mã:
docker ps
docker images
Kết luận
Trong hướng dẫn này, bạn đã triển khai Docker Swarm với ba máy chủ Rocky Linux. Bạn cũng đã tìm hiểu cách cài đặt Docker Engine trên máy chủ Linux và cấu hình Firewalld trên hệ thống Rocky Linux. Và cuối cùng, bạn cũng đã tìm hiểu cách triển khai ứng dụng cơ bản lên Docker Swarm thông qua lệnh "docker service".Từ đây, giờ bạn có thể triển khai các ứng dụng được chứa trong container của mình với tất cả các phụ thuộc vào Docker Swarm. Bạn cũng có thể thêm Swarm Manager để thiết lập tính khả dụng cao cho môi trường Docker Swarm của mình.