docker筆記6--Docker Swarm常見操作
- 簡介
- swarm介紹
- 節點介紹
- 服務和任務
- 負載均衡
- swarm叢集搭建
- 常用指令
- 說明
簡介
swarm介紹
swarm 包含多個運作在swarm mode下的docker host,這些hoshs包括manager和worker角色。沒給你host既可以做為manager,也可以作為worker,或者2者都可以。
當建立一個服務的時候,即定義了一個最佳的狀态,包括服務replicas、網絡、存儲、以及暴露給外面的端口等資源。docker用于維護需要的狀态,如果一個節點不可用,docker将排程該節點的任務到其他節點。
節點介紹
節點即為加入swarm叢集中的docker執行個體(docker 節點)。
當實施一個應用到swarm時候,就需要送出一個服務的定義到管理節點(manager node),管理節點就會配置設定工作單元(task)到對應的工作節點(work node).
工作節點接受并執行來自于管理節點的任務,預設情況下管理節點也作為一個work節點跑對應的服務,但實際中可以配置service不運作在manager上,使manager僅僅充當管理角色。worker節點會定期向manger通知配置設定的任務狀态,以便于manager能維護每個worker需要的狀态。
服務和任務
service是需要執行在各個節點上任務的定義。它是swarm系統的核心結構,也是使用者和swarm互動的主要方式。當建立1個服務的時候,通常會指定容器鏡像和容器内部執行的指令。
一個任務包含了一個docker 容器和y一些跑在容器内部的指令, 它是swarm排程的原子單元。 管理節點根據服務中replicas的規模,将任務配置設定到各個工作節點。一旦一個任務配置設定到某個節點,它就不能移動到另外及诶單,除非該任務失敗。
負載均衡
管理節點使用ingress load balancing 來暴露服務,進而使外部到swarm為可用狀态。在使用者沒有指定端口的情況下,swarm manager節點預設為服務配置設定一個PublishedPort,通常在30000-32767 範圍内。
Swarm mode 擁有一個内部DNS不見,用于自動地配置設定每個服務一個DNS實體。基于服務的DNS名稱,swarm 管理節點在叢集内部服務之間用 internal load balancing 來分發請求。
swarm叢集搭建
通過以下3個步驟即可搭建一個swarm叢集了,後續可以根據需要增删節點,改變節點角色。
- swarm初始化
$ docker swarm init
Swarm initialized: current node (p2phyrhwcp3k155gu24cci89x) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5ig1j6az5r0wah7bq3qs3q5zv8iaz4kmubvj79rvns807f3vcm-dza07w1gla63weerzmfaq34xb 10.120.75.102:2377
To add a manager to this swarm, run 'docker swarm join-token manager'
- 添加節點到叢集
\# docker swarm join
- 提升work節點為manager
檢視目前節點狀态:
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
p2phyrhwcp3k155gu24cci89x * test01 Ready Active Leader 19.03.8
hwkcculi3kop48g75k88mc110 test02 Ready Active 19.03.11
rr7nl5cd5yecv5nklfsr9bpzg test03 Ready Active 19.03.8
執行docker node demote <node id>将 manager 節點 demote 為 worker 節點
執行docker node promote <node id>将 worker 節點 promote 為 manager 節點
$ docker node promote hwkcculi3kop48g75k88mc110
Node hwkcculi3kop48g75k88mc110 promoted to a manager in
常用指令
-
swarm init
swarm 叢集初始化,具體指令見swarm初始化
-
swarm join
節點加入叢集,在任意一個manager上執行皆可,具體見添加節點到叢集
-
service create
建立服務
建立一個服務,名稱為reids
docker service create --name redis redis:3.0.6
建立一個服務,3個replica,名稱為redis3
docker service create --name redis3 --replicas=3 redis:3.0.6
- service_create
-
service inspect
#docker service inspect redis
#docker service inspect redis --pretty
添加–pretty後,以比較友好的方式輸出容器資訊
-
service ls
ls 檢視所有服務
#docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
ckipvhtby52z redis replicated 1/1 redis:3.0.6
gmi00f0g7enf redis3 replicated 3/3 redis:3.0.6
#docker service ls -q n隻列出IDs
-
service rm
删除redis3 服務
#docker service rm redis3
-
service scale
将redis服務擴容為2個
#docker service scale redis=2 -d
-
service ps
列出redis的所有服務, -q參數使之隻列出IDs
#docker service ps redis
#docker service ps redis -q
-
service update
1)限制cpu為2
# docker service update --limit-cpu 2 redis
2)添加8079映射到容器内6379端口
# docker service update --publish-add published=8079,target=6379 redis
service_update