Docker Swarm Mode 入門實踐
本文來源
翻譯並總結官方文件,新增自定義示例,參考自Docker 19.03版本官方文件
未來可能歸檔為:https://docs.docker.com/v19.03/
2020.01.03為https://docs.docker.com/engine/swarm/
本文目標
本文主要演示建立一個小規模的Swarm叢集,包含一個管理節點與兩個工作節點,概念可以參考https://www.cnblogs.com/hellxz/p/12134386.html
- 建立Docker Swarm叢集
- 新增節點
- 部署應用服務
- 管理Swarm叢集
環境說明
- 三臺安裝Docker的Linux虛擬機器:本文用Docker Machine建立虛擬機器
- Docker版本:18.09.7,理論上1.12版本以後均可
- 三臺虛擬機器網路互通
Docker Machine安裝參考我的上一篇文章,安裝Docker Machine
虛擬機器準備
實體機安裝Linux或Mac,跳過此節
本文通過一臺Linux虛擬機器中建立三個虛擬機器節點來操作的,虛擬機器記憶體可以開大些,另外需要配置開啟Intel VT-x/EPT或AMD-RVI(V)
另外,由於我們要做的實驗是在虛擬機器下的再建立虛擬機器,外部虛擬機器與虛擬機器內構成內網,在沒有設定代理的情況下,我們無法直接通過瀏覽器直接訪問
建立 Swarm 叢集(Create a swarm)
建立一個管理節點的虛擬機器
$ docker-machine create -d virtualbox manager
連線建立的管理節點虛擬機器
$ docker-machine ssh manager1
出現上圖已經進入虛擬機器了
初始化Swarm叢集
$ docker swarm init --advertise-addr 192.168.99.100
初始化完成,在多網絡卡的情況下,必須使用--advertise-addr
指定IP,其它主機必須可以訪問此ip,輸出中包含新節點加入此節點的命令,我們只需要複製此命令到其它節點上執行
執行
docker swarm init
的節點自動成為管理節點,節點的ip是ssh到節點後ifconfig
查到的新增節點命令要先複製出來,一會新增節點會用,如果沒複製也不要緊
在manager節點輸入docker swarm join-token 角色 就能提示token了,上邊複製的預設是worker角色的命令
輸入docker info
檢視當前節點的Docker Swarm Mode已經處於啟用狀態了
執行docker node ls
檢視當前Swarm叢集中節點的情況
*
指示當前登入的節點
輸出exit
退出當前登入的主機
向Swarm新增節點(Add nodes to the swarm)
建立第一個工作節點並ssh連線到這個節點上
$ docker-machine create -d virtualbox worker1
$ docker-machine ssh worker1
執行剛才複製的docker swarm join-token
命令,忘了就先去manager節點下執行docker swarm join-token worker
來檢視命令
$ docker swarm join --token SWMTKN-1-0kr7tkx9ku4rcrl1lny1o8chg9xl24h4nexmz1ctfwz43425uq-egecegeyfaet0volcvo15zia8 192.168.99.100:2377
This node joined a swarm as a worker.
接著建立個worker2
,操作不再複述了
檢視叢集節點情況
連線manager
節點,執行命令檢視叢集狀態
$ docker node ls
docker node ls
命令僅可以在管理節點使用
部署服務到Swarm叢集(Deployed a service)
部署服務只需要使用docker service create
加正常的docker命令,還可以指定建立幾個備份例項,這裡部署2個Nginx
$ docker service create --replicas 2 --name nginx -p 80:80 nginx:mainline-alpine
docker service create
命令主要引數:
--name
- 用來指定服務名,部署服務的容器名使用這個名稱作為字首--replicas
- 設定負載例項數其餘引數請自行參考
docker service create --help
文件此命名僅能在manager節點執行
在Docker Swarm Mode簡介與核心概念 一文中,我們有談過:服務可以執行在Manager節點上,也可以執行在Worker節點上
部署服務的輸出並沒有提示具體將服務部署到哪個節點上,接下來我們看看節點情況
檢視服務
使用docker service ls
檢視服務列表,檢視具體服務部署在哪個節點使用docker service ps 服務名
如圖,我們的服務一個部署到了manger節點上,一個部署在worker1節點上
檢查部署在Swarm叢集中的服務(Inspect the service)
通過docker service inspect
命令檢查服務的詳細資訊,使用--pretty
使輸出更易讀
$ docker service inspect --pretty nginx
除了這種簡單的方法外就是普通的辦法——去部署的節點上docker ps