之前我們寫了好多篇關于docker的文章,但是環境都是單機的,也就是說只有一臺docker引擎,
接下來這篇文章我們說一下docker集群及管理,
Docker官方為了解決多容器管理問題,推出了Docker Swarm工具,也是我們今天要說的內容,
Swarm簡單介紹:
- Swarm首個版本在2014年12月初發布,2016年2月對架構進行重新設計,推出V2版本,
- 支持原生Docker API,
- 采用主從結構,通過Raft協議在多個管理節點中實作共識,
Swarm架構:
Swarm架構整體分為管理節點(Manager)和作業節點(Worker)
- 管理節點:回應外部對集群的操作請求,Swarm負責調度和管理容器,分發任務給作業節點,一個集群通常設定3、5、7個管理節點,但是必須為單數,
- 作業節點:負責執行具體任務,默認情況,管理節點自身也是作業節點,
- 用戶可通過
docker node promote將一個節點提升為管理節點;也可以通過docker node demote將一個管理節點降級為作業節點,

Swarm核心概念:
-
服務(service):服務是為了支持編排所提出的概念,它是一系列復雜容器環境相互協作的統稱,一個服務的宣告包含容器的啟動方式、副本數、環境變數、存盤、配置、網路等一系列配置,用戶用過Swarm將宣告的服務實作,
服務分為全域服務和副本服務: 全域服務:每個作業節點都會運行一個任務 副本服務:按照指定副本數在集群中調度 -
任務:集群中最小的調度單位,即一個運行的應用容器,
-
服務外部訪問:Swarm中支持入口負載均衡的映射模式,該模式每個服務都會被分配一個公開埠,該埠在集群中任意節點都可以訪問到,并被保留給該服務,
搭建Swarm集群:
- Docker版本大于1.12,推薦最新穩定版
- 主機需要開放2377、4789、7946埠
原本我應該通過3個管理節點,若干作業節點來搭建集群,但是原諒我的本的性能,所以只能搭建一管理節點二作業節點的集群,但是并不妨礙講解,
第一步:主備三臺裝有Docker引擎的主機,這點不說了,Docker搭建可以看我其他文章有這個,
第二步:初始化集群(1.12版本后已經默認集成到Docker中)
- 在管理節點上,通過以下命令初始化集群
- 如果多網卡需要加–advertise-addr引數指定網卡
docker swarm init --advertise-addr 192.168.10.3
- 節點加入集群需要用到以下資訊
Swarm initialized: current node (hgya55eyardntljupfmpxsw3s) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-457a1eursgbfc5m6lnxz224w6izmsdq82cv8rwfnj8ac6eujhb-5ph3idc72q66tpbaaic5bc6k7 192.168.10.3:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

第三步:加入作業節點到集群(兩個作業節點都要加入)
docker swarm join --token SWMTKN-1-457a1eursgbfc5m6lnxz224w6izmsdq82cv8rwfnj8ac6eujhb-5ph3idc72q66tpbaaic5bc6k7 192.168.10.3:2377
第四步***:如果加入管理節點到集群(如果你想有多個管理節點看這步,單節點跳過即可)
- 在管理節點上運行以下命令,然后想成為管理節點的主機上輸入顯示的結果即可
docker swarm join-token manager
第五步:查看節點
docker node ls
- 可查看所有節點,帶星號為管理節點
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
h55mmpjvnd3uh1jrkopuas400 centos7 Ready Active 20.10.7
hgya55eyardntljupfmpxsw3s * centos7 Ready Active Leader 20.10.7
y3ymp2sis7xwezzuhyhhy4h64 centos7 Ready Active 20.10.7
- 通過
docker info可以查看集群資訊,內容太多就不復制了, - 如果想看的更明顯,可以將主機名改成節點名,我忘了,,,
- 到此,一個集群算搭建完成,
使用Swarm:
Swarm中部署服務通常用兩種方式:
一.通過docker service命令創建
- 通過
docker service命令可以查看命令用法:
docker service
Usage: docker service COMMAND
Manage services
Commands:
create Create a new service
inspect Display detailed information on one or more services
logs Fetch the logs of a service or task
ls List services
ps List the tasks of one or more services
rm Remove one or more services
rollback Revert changes to a service's configuration
scale Scale one or multiple replicated services
update Update a service
Run 'docker service COMMAND --help' for more information on a command.
- 創建一個服務:
docker service create --replicas 1 --name nginx nginx:1.16.1
- 查看服務
docker service ls
- 洗掉服務
docker service rm [服務名]
- 咳咳,我是想舉例著,但是配置給小了,所以,,,
二.通過docker stack命令創建服務
這種方式運行的是docker-compose模板檔案,關于docker-compose請查看我其他文章
-
可以在服務模板檔案中添加deploy指令,并指定副本服務(replicated)數量
-
我們可以舉一個nginx服務的例子
-
首先需要你安裝docker-compose工具,關于這個工具使用:點擊這里
-
模板檔案內容:
version: '3'
services:
nginx:
image: nginx:1.16.1
deploy:
mode: replicated
replicas: 2
restart: always
port:
- 80:80
volumes:
- /data/nginx/:/etc/nginx
- /data/webapps/www/:/usr/share/nginx/html/
- 需要手動創建模板中使用的目錄
- 通過以下命令運行:
docker stack deploy -c docker-compose.yml nginx
- 通過任意節點的ip:80訪問nginx服務
這篇可能有點問題,有問題的話可以留言問我,因為配置給小了,后面做的有點費勁,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291400.html
標籤:其他
