Tìm hiểu đôi chút về Docker Swarm

Lời mở đầu

Như mình cũng đã giới thiệu rất nhiều trong các bài viết thuộc series Cùng nhau học docker. Dần dần docker hay (devops) ngày càng trở thành một công nghệ cần thiết và không thể thiếu trong các dự án. Khi mà trước đây mọi người chỉ quan tâm đến khái niệm Backend hay Frontend. Những năm gần đây thực sự là thời điểm của devops và mọi người thực sự đã chú trọng hơn về nó. Nếu bạn là newbie và đang quan tâm đến docker cũng như các khái niệm của nó. Bạn có thể tham khảo:

Đọc lại bài viết này Sử dụng Portainer để quản lý Docker apps, các bạn có thể thấy mình có có nói đến việc sử dụng và cài đặt docker swarm để quản lý Docker apps với Portainer. Việc cài đặt docker swarm chỉ có vài command đơn giản đúng không. Nhưng nó là gì và ý nghĩa các hoạt động của nó như thế nào thì xin mạn phép trong bài này mình xin chia sẻ đôi chút về nó.

Docker và Docker Container là gì ?

1. Docker là gì ?

Ở bài này mình xin định nghĩa lại khái niệm docker như sau:

"Docker là một open platform cung cấp cho người sử dụng những công cụ và service để người sử dụng có thể đóng gói và chạy chương trình của mình trên các môi trường khác nhau một cách nhanh nhất."

2. Docker Container là gì ?

Docker Container được hiểu đơn giản: là một dạng runtime của các Docker Image, dùng để làm môi trường chạy ứng dụng.

Docker container có nét giống với các directory. Một Docker container giữ mọi thứ chúng ta cần để chạy một app. Mỗi container được tạo từ Docker image. Docker container có thể có các trạng thái run, started, stopped, moved và deleted.

Example: Chúng ta build một Image mysql version 8 thì sẽ tạo ra một Docker Container có thể có tên là viblo_mysql chẳng hạn, container này có thể run, started, stopped, moved và deleted.

Việc chúng ta tạo ra các docker file rồi tạo các Docker Containers ví dụ như Viblo_mysql từ image Mysql Version 8, Viblo_php-fpm từ image php 7.3,... rồi chạy chúng. Việc chạy độc lập các Containers đó chính là một solution đơn giản nhất của Docker Swarm và tất nhiên như vậy không làm ảnh hưởng đến hoạt động của dự án chút nào cả. Tuy nhiên trong một số trường hợp việc hoạt động độc lập của các container lại trở thành khó khăn cho một số bài toán.

Người ta đặt ra một câu hỏi là: "Làm thế nào để docker làm việc trên nhiều node khác nhau mà vẫn có thể chia sẻ được với nhau ?"

Docker Swarm là gì ?

Có thể hiểu một cách đơn giản:

"Docker Swarm: là một service cho phép người dùng có thể tạo, quản lý tập chung cho Docker nodes và lịch trình cho các containers"

"Mỗi node của một Docker Swarm là một Docker daemon và tất cả các Docker daemons đều sử dụng docker API"

"Các services có thể được deploy và có thể truy cập vào các nodes như nhau"

Với việc quản lý bằng docker cơ bản, mỗi container sẽ được quản lý bằng các Docker CLI riêng biệt.

Tuy nhiên khi sử dụng Docker Swarm các containers sẽ được quản lý bằng một Docker CLI chung.

Khi một container bị build lỗi, thì với một backup folder sẵn có trong node ta có thể sử dụng để restore data trên một swarm mới. Nếu bạn nào đã từng deploy và sử dụng docker trong dự án chắc chắn đã từng bị chết container. Và đơn giản với docker swarm chúng ta có thể rollback bản build trước một cách dễ dàng với Swarm.

Các tính năng của Docker Swarm

Docker Swarm có một số tính năng cơ bản như sau:

  • Truy cập phi tập trung
  • Tính bảo mật cao
  • Auto load balancing
  • Khả năng mở rộng cao
  • Có khả năng rollback tiến trình

Kiến trúc của Docker Swarm

Kiển trúc của Docker Swarm bao gồm :

  • Manage Node
  • Worker node
  • Docker daemon
  • Container

Các container được quản lý bởi các Docker daemon trong các Worker node đã được chia nhỏ và quản lý tập trung bởi Manage node.

Docker Swarm hoạt động như thế nào?

  • Manage node được hiểu là trạng thái của tất cả các Worker node trong cụm.
  • Worker node chấp nhận các task được gửi từ Manage node.
  • Mọi Worker node như một agent, tự động báo cáo trạnh thái task của node đến Manage node.
  • Tất cả các Worker node giao tiếp với Manager node sử dụng API qua HTTP.

Các Manager node cũng được phân quyền theo từng cấp độ.

Demo

Join docker swarm với Ip Server của bạn

$ docker swarm init --advertise-addr 192.168.1.34
Swarm initialized: current node (bvz81updecsj6wjz393c09vti) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx \
    172.17.0.2:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Tham khảo thêm ví dụ Sử dụng Portainer để quản lý Docker apps

Tạm kết

Chắc hẳn qua bài viết các bạn cũng đôi chút hiểu hơn về Docker Swarm và có thể áp dụng nó vào dự án của mình. Hy vọng được sự đóng góp của các bạn để chúng ta có thể trau dồi thêm kiến thức về Docker.

All Rights Reserved