Docker Swarm是什麼?
是一個用於創建 Docker 主機集羣的工具,使用 Swarm 操作集羣,會使用戶感覺就像是在一臺主機上進行操作,docker1.12 集成了 swarmkit, 使你可以不用安裝額外的軟件包, 使用簡單的命令啓動創建docker swarm 集羣。
實驗環境:
這裏選擇三臺主機運行 Swarm,依次爲:
node1 192.168.182.100
node2 192.168.182.101
node3 192.168.182.102
做前基本操作
開啓路由轉發
檢查 docker 版本
防洪牆
設置主機名:
node1
3 臺主機均修改/etc/hosts 文件,添加所有主機的 ip 地址和主機名的映射記錄
開啓宿主機之間的端口
TCP 端口 2377 集羣管理端口
TCP 與 UDP 端口 7946 節點之間通訊端口
TCP 與 UDP 端口 4789 overlay 網絡通訊端口
配置所有節點密鑰登錄.
配置所下節點密鑰互信, 在 node1 可以免密碼登錄各節點,只在 node1 上執行:
生成 sshkey
發佈 sshkey 到各個節點
測試密鑰登錄
創建 Swarm 集羣
在 node1 上初始化 swram 集羣:
只需要在一個 node1 上初始化 swarm 集羣, 其他 node 加入這個集羣就行了, 所以以
下命令只需要在 node1 上運行
查看端口號監聽情況
查看 swarm 集羣 node 列表
在 node1 通過 ssh, 在 node2-node3 上執行上面的加入集羣命令:
node2
node3
node1
再次檢查集羣節點列表, 我們可以看到所有的服務器都已經加入 swarm 集羣了
查看 node2 的 docker info
現在我們可以看到, 已經有3個manager節點了, 一個Leader節點, 一個Reachable節點. 現
在你也可以在 node2 上面管理整個 swarm 集羣
總結:
docker swarm:集羣管理,子命令主要有下面幾個。
docker swarm init 命令用於初始化一個集羣
dockerswarm join 命令用於加入一個現有集羣
dockerswarm leave 命令由於離開集羣
registry 的默認存儲路徑是/var/lib/registry,只是個臨時目錄,一段時間之後就會消失
所以使用-v 參數,指定個本地持久的路徑
返回{"repositories":[]} 說明 registry 服務工作正常.
鏡像信息存放在/var/lib/registry 目錄下,因此這裏將宿主機目錄映射到/var/lib/registry
所有主機都指向 registry 服務器:
停止 docker 服務
#systemctl stop docker
修改/usr/lib/systemd/system/docker.service,修改後保存退出
把/usr/lib/systemd/system/docker.service傳給node2 和node3
重載 docker 服務並啓動 docker 服務
測試本地鏡像倉庫
在 node2 主機上推送鏡像到 registry
需要先 tag 這個鏡像
將 tag 後的鏡像上傳到 registry.
push 成功後, 可以調用 registry API 查看 registry 中的鏡像
在 node3 主機測試從 registry 下載鏡像
node2
overlay 網絡
解決了鏡像構建問題, 爲了讓應用跑在 swram 集羣上,我們還需要解決容器間的網絡訪問問
題查看 swarm 集羣 node 列表
爲 docker 應用創建一個名爲 dockercoins 的 overlay network
查詢 docker network 列表
docker service create 命令創建一個 service.
--name 標籤命名 service 爲 web1.
--replicas 標籤來聲明 1 個運行實體(即容器副本數)
注意, 我們啓動的鏡像名字 192.168.46.100:5000/centos:http 使用我們本地鏡像倉庫的鏡像名
稱, 這樣當主機上沒有這個鏡像時, 會自動到本地鏡像倉庫拉取鏡像
使用 docker service ls 查看服務
使用 docker serviceps<SERVICE-ID/NAME>查看服務運行在哪個節點上
用瀏覽器訪問 http://192.168.46.100:8000 就能訪問測試頁
--replicas 標籤來聲明 2 個運行實體
查看服務:
從下圖可以看到 web1 service 目前只有一個副本.
擴展已有的服務的副本數,這裏將 web1 服務擴展到 3 個副本
縮減已有的服務的副本數,這裏將 web1 服務縮減到 2 個副本