## 定義
Swarm是Docker公司推出的用來管理docker集群的平臺,幾乎全部用GO語言來完成的開發的,代碼開源在https://github.com/docker/swarm,?它是將一群Docker宿主機變成一個單一的虛擬主機,Swarm使用標準的Docker API接口作為其前端的訪問入口,換言之,各種形式的Docker
Client(compose,docker-py等)均可以直接與Swarm通信,甚至Docker本身都可以很容易的與Swarm集成,這大大方便了用戶將原本基于單節點的系統移植到Swarm上,同時Swarm內置了對Docker網絡插件的支持,用戶也很容易的部署跨主機的容器集群服務。
Docker Swarm?和 Docker Compose 一樣,都是 Docker 官方容器編排項目,但不同的是,Docker Compose 是一個在單個服務器或主機上創建多個容器的工具,而 Docker Swarm 則可以在多個服務器或主機上創建容器集群服務,對于微服務的部署,顯然 Docker Swarm 會更加適合。
從 Docker 1.12.0 版本開始,Docker Swarm 已經包含在 Docker 引擎中(docker swarm),并且已經內置了服務發現工具,我們就不需要像之前一樣,再配置 Etcd 或者?Consul?來進行服務發現配置了。
## 關鍵概念
~~~
1.Swarm
集群的管理和編排是使用嵌入docker引擎的SwarmKit,可以在docker初始化時啟動swarm模式或者加入已存在的swarm
2.Node
一個節點是docker引擎集群的一個實例。您還可以將其視為Docker節點。您可以在單個物理計算機或云服務器上運行一個或多個節點,但生產群集部署通常包括分布在多個物理和云計算機上的Docker節點。
要將應用程序部署到swarm,請將服務定義提交給 管理器節點。管理器節點將稱為任務的工作單元分派 給工作節點。
Manager節點還執行維護所需群集狀態所需的編排和集群管理功能。Manager節點選擇單個領導者來執行編排任務。
工作節點接收并執行從管理器節點分派的任務。默認情況下,管理器節點還將服務作為工作節點運行,但您可以將它們配置為僅運行管理器任務并且是僅管理器節點。代理程序在每個工作程序節點上運行,并報告分配給它的任務。工作節點向管理器節點通知其分配的任務的當前狀態,以便管理器可以維持每個工作者的期望狀態。
3.Service
一個服務是任務的定義,管理機或工作節點上執行。它是群體系統的中心結構,是用戶與群體交互的主要根源。創建服務時,你需要指定要使用的容器鏡像。
4.Task
任務是在docekr容器中執行的命令,Manager節點根據指定數量的任務副本分配任務給worker節點
~~~
## 工作模式

Swarm是典型的master-slave結構,通過發現服務來選舉manager。manager是中心管理節點,各個node上運行agent接受manager的統一管理,集群會自動通過Raft協議分布式選舉出manager節點,無需額外的發現服務支持,避免了單點的瓶頸問題,同時也內置了DNS的負載均衡和對外部負載均衡機制的集成支持。
## 實戰
1、阿里云購買四臺云服務器
2、xshell連接,安裝docker
3、初始化節點
~~~
docker swarm init --advertise-addr 172.28.19.56
docker swarm join 加入一個節點
~~~
~~~
# 獲取令牌
docker swarm join-token manager
docker swarm join-token worker
~~~

?同理把三號節點四號節點加進來
Raft協議:簡單來說就是保證大多數節點存活才可以使用
擴展:彈性、擴縮容

啟動一個nginx服務,查看服務,發現有一個服務正在運行,?但是運行的容器是隨機分布,啟動到docker4服務器上了

?動態擴縮容

?docker1

docker2

?docker3

?docker4

- Python學習
- Python基礎
- Python初識
- 列表生成式,生成器,可迭代對象,迭代器詳解
- Python面向對象
- Python中的單例模式
- Python變量作用域、LEGB、閉包
- Python異常處理
- Python操作正則
- Python中的賦值與深淺拷貝
- Python自定義CLI三方庫
- Python并發編程
- Python之進程
- Python之線程
- Python之協程
- Python并發編程與IO模型
- Python網絡編程
- Python之socket網絡編程
- Django學習
- 反向解析
- Cookie和Session操作
- 文件上傳
- 緩存的配置和使用
- 信號
- FBV&&CBV&&中間件
- Django補充
- 用戶認證
- 分頁
- 自定義搜索組件
- Celery
- 搭建sentry平臺監控
- DRF學習
- drf概述
- Flask學習
- 項目拆分
- 三方模塊使用
- 爬蟲學習
- Http和Https區別
- 請求相關庫
- 解析相關庫
- 常見面試題
- 面試題
- 面試題解析
- 網絡原理
- 計算機網絡知識簡單介紹
- 詳解TCP三次握手、四次揮手及11種狀態
- 消息隊列和數據庫
- 消息隊列之RabbitMQ
- 數據庫之Redis
- 數據庫之初識MySQL
- 數據庫之MySQL進階
- 數據庫之MySQL補充
- 數據庫之Python操作MySQL
- Kafka常用命令
- Linux學習
- Linux基礎命令
- Git
- Git介紹
- Git基本配置及理論
- Git常用命令
- Docker
- Docker基本使用
- Docker常用命令
- Docker容器數據卷
- Dockerfile
- Docker網絡原理
- docker-compose
- Docker Swarm
- HTML
- CSS
- JS
- VUE