剛開始找資料搭建時,發現網上有兩種搭建方式:
第一種:docker run --rm swarm create 一代 Swarm,也被稱爲 Docker Swarmnode
第二種:docker swarm init 二代 Swarm,這是內置的 Swarmweb
本文采用第二種方式搭建swarm集羣docker
假設有三臺機器:192.168.20.201 192.168.20.202 192.168.20.203,準備用 201 做爲master瀏覽器
2-1建立管理節點tomcat
docker swarm init --advertise-addr 192.168.20.201
執行完會顯示token,建立工做節點時須要該token,Manager和Worker節點之間通訊端口是2377bash
2-2建立子節點網絡
分別在 192.168.20.202 和 192.168.20.203 上執行命令,指定IP:--advertise-addr 192.168.20.202,tcp
我用的是三臺雲主機,內網不通,必須用 --advertise-addr 指定當前機器IP,不然會形成後面網絡不通測試
docker swarm join --advertise-addr 192.168.20.202 --token 上面的token 192.168.20.202:2377
docker swarm join --advertise-addr 192.168.20.203 --token 上面的token 192.168.20.203:2377
2-3查看集羣信息spa
該命令只能在master上執行
docker node ls
2-4查看節點IP信息
docker node inspect master docker node inspect slave01 docker node inspect slave02
能夠分別查看swarm中各主機的IP,若是跟機器IP不同,網絡會訪問不通
3-1配置docker啓動參數
在 /usr/lib/systemd/system/docker.service 中找到 ExecStart=/usr/bin/dockerd 並在其後添加 :
-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock 結果以下:
3-2新建overlay網絡
docker network create -d overlay central
4-1從倉庫拉取一個tomcat鏡像
docker pull tomcat docker tag docker.io/tomcat tomcat
4-2啓動鏡像,指定網絡類型
docker service create -p 8080:8080 --replicas 3 --name web --network central tomcat
4-3查看相關信息
docker service ls
#web爲啓動鏡像時的名稱 docker service ps web
4-4查看是否在同一網絡中
docker network inspect central
central 是咱們啓動服務時使用的 overlay 網絡,因爲服務分到了三臺機器上,這三臺機器都加入了central網絡,這樣三臺主機才能互通
4-4訪問測試
分別在 三臺機器上 docker ps 均能看見Tomcat項目在運行,用瀏覽器分別訪問:192.168.20.201-3:8080 都會出現tomcat首頁
4-5主機互通測試
分別在 master 和 slave01 執行命令,查看到兩者的容器IP:
# 查看容器信息,記下這裏的 CONTAINER ID 和 NAMES docker ps # 查看容器詳細信息 docker inspect f884d3151995
進入 slave02 的容器:
docker ps docker exec -it da10f3f58af7 /bin/bash
測試網絡,若是能ping通,則成功,若是不成功,兄弟,那就看緣分了
# 容器IP ping 10.0.0.17 ping 10.0.0.18 # 容器NAMES ping web.2.yru4aykeld6h5kgg3nryw0m74 ping web.1.7gqta8k7sf8vbsvyvcxnx8vhd
另外,docker stop其中一臺機器上的服務,服務會從新自動新建一個:
移除運行項目,必須在master執行:
docker service rm web
首先在全部子節點機器執行:
# 子節點退出swarm docker swarm leave
而後master執行:
# 主節點移除子節點 docker node rm slave01 docker node rm slave02 # 主節點退出集羣 docker swarm leave --force