Docker Compose so với Docker Swarm

Docker Compose Vs Docker Swarm



Với ‘cuộc cách mạng’ vùng chứa, các ứng dụng đã phát triển hơn nhiều so với việc chỉ là cơ sở dữ liệu và giao diện người dùng. Các ứng dụng được chia thành nhiều microservices khác nhau và chúng thường giao tiếp với nhau thông qua API REST (thường là tải trọng được định dạng JSON qua HTTP). Docker container là lý tưởng cho kiểu kiến ​​trúc này. Bạn có thể đóng gói giao diện người dùng ‘microservice’ của mình vào một vùng chứa Docker, cơ sở dữ liệu chuyển sang một vùng khác, v.v. Mỗi dịch vụ nói chuyện với một dịch vụ khác qua một REST API được xác định trước thay vì là một khối nguyên khối được viết dưới dạng một phần mềm duy nhất.

Nếu bạn cần triển khai một chức năng mới hoặc một tính năng, ví dụ: công cụ phân tích, bạn có thể chỉ cần viết một microservice mới cho nó và nó sẽ sử dụng dữ liệu thông qua API REST được hiển thị bởi các microservice khác nhau trong ứng dụng web của bạn. Và khi chức năng của bạn phát triển theo thời gian, danh sách microservices này cũng sẽ phát triển cùng với nó.







Bạn không muốn triển khai từng vùng chứa riêng lẻ, hãy định cấu hình nó và sau đó định cấu hình mọi thứ khác để nói chuyện với nó. Điều đó sẽ trở nên tẻ nhạt với thậm chí ba thùng chứa. Docker-Compose cho phép bạn tự động hóa việc triển khai nhiều vùng chứa.



Docker-Compose là một trong những công cụ đơn giản nhất giúp bạn chuyển đổi ý tưởng trừu tượng về microservices thành một tập hợp chức năng của Docker container.



Hệ thống phân phối

Giờ đây, chúng tôi đã chia ứng dụng web đang mở thành nhiều vùng chứa, nên việc giữ tất cả chúng trên một máy chủ duy nhất (tệ hơn là vẫn còn trên một máy ảo duy nhất!), Đó là nơi các dịch vụ như Docker Swarm và Kubernetes phát huy tác dụng.





Docker Swarm cho phép bạn chạy nhiều bản sao ứng dụng của mình trên nhiều máy chủ. Nếu microservice của bạn được viết theo cách mà nó có thể mở rộng 'theo chiều ngang' thì bạn có thể sử dụng Docker Swarm để triển khai ứng dụng web của mình trên nhiều trung tâm dữ liệu và nhiều khu vực. Điều này cung cấp khả năng phục hồi chống lại sự cố của một hoặc nhiều trung tâm dữ liệu hoặc liên kết mạng. Điều này thường được thực hiện bằng cách sử dụng một lệnh con trong Docker, tức là Docker Stack.

Các Docker Stack lệnh con hoạt động giống lệnh Docker-Compose hơn rất nhiều và điều đó có thể dẫn đến quan niệm sai lầm đối với ai đó sử dụng một trong hai công nghệ.



Nguồn của sự nhầm lẫn

Về cách sử dụng và quy trình làm việc, cả hai công nghệ đều hoạt động rất giống nhau và điều này gây ra sự nhầm lẫn. Cách bạn triển khai ứng dụng của mình bằng Docker Swarm hoặc Docker-Compose rất giống nhau. Bạn xác định ứng dụng của mình trong một tệp YAML, tệp này sẽ chứa tên hình ảnh, cấu hình cho mỗi hình ảnh và cũng như quy mô (số lượng bản sao) mà mỗi microservice sẽ được yêu cầu đáp ứng khi triển khai.

Sự khác biệt chủ yếu nằm ở phần phụ trợ, nơi docker-comp triển khai vùng chứa trên một máy chủ Docker duy nhất, Docker Swarm triển khai nó trên nhiều nút. Nói một cách dễ hiểu, nó vẫn có thể làm được hầu hết những điều mà docker-soạn có thể nhưng nó mở rộng quy mô trên nhiều máy chủ Docker.

Điểm tương đồng

Cả Docker Swarm và Docker-Compose đều có những điểm giống nhau sau:

  1. Cả hai đều lấy các định nghĩa được định dạng YAML cho ngăn xếp ứng dụng của bạn.
  2. Cả hai đều nhằm xử lý các ứng dụng đa vùng chứa (microservices)
  3. Cả hai đều có tham số tỷ lệ cho phép bạn chạy nhiều vùng chứa của cùng một hình ảnh cho phép dịch vụ vi mô của bạn chia tỷ lệ theo chiều ngang.
  4. Cả hai đều được duy trì bởi cùng một công ty, tức là Docker, Inc.

Sự khác biệt

Một số khác biệt giữa Docker Swarm và Docker-Compose:

  1. Docker Swarm được sử dụng để mở rộng ứng dụng web của bạn trên một hoặc nhiều máy chủ. Docker-compile ở đâu sẽ chỉ đơn giản chạy ứng dụng web của bạn trên một máy chủ Docker duy nhất.
  2. Mở rộng ứng dụng web của bạn Docker Swarm cung cấp tính khả dụng cao và khả năng chịu lỗi nghiêm trọng. Mở rộng ứng dụng web của bạn bằng Docker-Compose trên một máy chủ lưu trữ chỉ hữu ích cho việc thử nghiệm và phát triển.
  3. Docker Swarm và các lệnh con có liên quan như Docker Swarm và Docker Stack được tích hợp vào chính Docker CLI. Tất cả chúng đều là một phần của mã nhị phân Docker mà bạn gọi qua thiết bị đầu cuối của mình. Docker-Compose là bản nhị phân độc lập.

Trường hợp sử dụng cho Docker-Compose

Như đã mô tả ở trên, cả hai đều là những công cụ hoàn toàn khác nhau và mỗi công cụ giải quyết một vấn đề hoàn toàn khác nhau, vì vậy nó không giống như một công cụ thay thế cho công cụ kia. Tuy nhiên, để cho những người mới biết đến những gì tôi đang nói đến, đây là một trường hợp sử dụng cho Docker Compose.

Giả sử bạn muốn tự lưu trữ một Blog WordPress trên một máy chủ duy nhất. Thiết lập hoặc duy trì nó không phải là điều bạn muốn làm theo cách thủ công, vì vậy những gì bạn sẽ làm thay vào đó là cài đặt Docker và Docker-comp trên VPS của bạn, tạo một tệp YAML đơn giản xác định tất cả các khía cạnh khác nhau của ngăn xếp WordPress của bạn, như bên dưới, :

Lưu ý: Nếu bạn đang sử dụng phần bên dưới để triển khai một trang web WordPress, vui lòng thay đổi tất cả các mật khẩu thành một thứ gì đó an toàn. Tốt hơn, hãy sử dụng Docker Secrets để lưu trữ dữ liệu nhạy cảm như mật khẩu, thay vì để nó trong một tệp văn bản thuần túy.

phiên bản:'3'

dịch vụ:
db:
hình ảnh: mysql:5,7
khối lượng:
- db_data:/ở đâu/lib/mysql
khởi động lại: luôn luôn
môi trường:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
phụ thuộc:
- db
hình ảnh: wordpress: mới nhất
các cổng:
-'8000: 80'
khởi động lại: luôn luôn
môi trường:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpressPassword
WORDPRESS_DB_NAME: wordpress
khối lượng:
db_data:{}

Sau khi tệp được tạo và cả Docker và Docker-compos đều được cài đặt, tất cả những gì bạn phải làm là chạy:

$docker-soạn lên-NS

Và trang web của bạn sẽ hoạt động. Nếu có bản cập nhật, hãy chạy:

$docker-soạn xuống

Sau đó, vứt bỏ các hình ảnh Docker cũ và chạy lệnh docker-compile up -d và các hình ảnh mới sẽ tự động được tải vào. Vì bạn có dữ liệu liên tục được lưu trữ trong Docker Volume nên nội dung trang web của bạn sẽ không bị mất.

Khi nào sử dụng Docker Swarm

Trong khi Docker-compos là một công cụ tự động hóa nhiều hơn, Docker Swarm dành cho các ứng dụng đòi hỏi khắt khe hơn. Ứng dụng web có hàng trăm hoặc hàng nghìn người dùng hoặc khối lượng công việc cần được mở rộng song song. Các công ty có cơ sở người dùng lớn và yêu cầu SLA nghiêm ngặt sẽ muốn sử dụng một hệ thống phân tán như Docker Swarm. Nếu ứng dụng của bạn đang chạy trên nhiều máy chủ và nhiều trung tâm dữ liệu thì khả năng thời gian ngừng hoạt động do liên kết mạng hoặc DC bị ảnh hưởng sẽ giảm đáng kể.

Điều đó nói rằng, tôi ngần ngại đề xuất Docker Swarm cho các trường hợp sử dụng sản xuất vì các công nghệ cạnh tranh như Kubernetes được cho là phù hợp hơn cho nhiệm vụ này. Kubernetes được hỗ trợ nguyên bản trên nhiều nhà cung cấp đám mây và nó hoạt động khá tốt với Docker Containers, vì vậy bạn thậm chí không phải xây dựng lại ứng dụng của mình để tận dụng Kubernetes.

Phần kết luận

Tôi hy vọng rằng điều này lan man về Docker và các dự án vệ tinh của nó là thông tin và bạn chuẩn bị tốt hơn cho hệ sinh thái docker.