docker-swarm實戰
docker-swarm 簡介
docker-swarm是一個叢集管理工具,主要有以下幾個元件
1 Swarm 主要負責叢集的管理和編排工作
2 Node節點,分為manager節點和worker節點
3 Service是任務的定義,管理機或工作節點上執行
4 Task是Service的例項,是容器執行的一組命令
docker-swarm搭建
準備兩臺機器,在一臺機器上執行swarm初始化
docker swarm init --advertise-addr 81.68.86.146
會顯示加入的token和地址埠
docker swarm join --token SWMTKN-1-2ifek5rwyq0k1d4rhhcyxjrmijlbuxm27rfcvqtkoxdgqdgn4j-0epqxkqlixe1r8uvr47g69iox 81.68.86.146:2377
在另一臺機器上執行上述加入操作,之後執行檢視命令,可以看到叢集節點狀態
docker node list
顯示一下
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION axapk9ke3o47r3er3jeqilpgg * VM-0-9-ubuntu Ready Active Leader 19.03.6 7ynq5qr8s8tn3j5vkr5ke19k0 instance-6nsdfhv9 Ready Active 19.03.12
docker-swarm service
我們可以建立service服務,然後指定具體的副本數,docker會根據副本數將service生成指定數量的容器執行task,這些容器負載均衡分配到不同的節點上。我們先建立一個名為demo的service
docker service create --name demo busybox sh -c "while true; do sleep 3600; done"
上述命令建立了一個名為demo的service, 我們可以通過docker service list 檢視服務列表
docker service list
可以看到服務列表, 存在名字為demo的服務
ID NAME MODE REPLICAS IMAGE xr5psjjt0nvx demo replicated 1/1 busybox:latest
我們也可以通過docker ps 檢視啟動的容器
通過如下命令可以檢視service的詳細資訊
docker service ps demo
可以看到服務執行在哪個節點上
接下來我們擴充下服務的數量
docker service scale demo=5
然後我們檢視demo服務
docker service ps demo
會看到如下效果,啟動了五個任務分別跑在不同的節點上
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS j78ygjp9r42k demo.1 busybox:latest VM-0-9-ubuntu Running Running 47 minutes ago 9w7xifrhztki demo.2 busybox:latest instance-6nsdfhv9 Running Running 19 seconds ago s15r73i10m43 demo.3 busybox:latest instance-6nsdfhv9 Running Running 19 seconds ago 3ep3sjw50fro demo.4 busybox:latest instance-6nsdfhv9 Running Running 19 seconds ago x80vmybr1dak demo.5 busybox:latest VM-0-9-ubuntu Running Running 22 seconds ago
通過
docker service list
看到啟動了五個容器,如果關閉其中一個,swarm會自動幫我們啟動一個新的,保持數量為5個
通過
docker service rm demo
刪除demo服務,這樣所有執行的容器都會被刪除,執行docker service ps demo會看到demo服務被刪除了。
執行docker ps 看到容器也被刪掉了
service搭建wordpress
利用service搭建wordpress,首先要建立一個共用網路,常見兩個service,分別是mysql和wordpress
docker network create -d overlay sw-net
建立一個overlay型別的網路sw-net,這個網路可以保證多個宿主機之間通訊
之後檢視網路列表
docker network list
可以看到我們新建立的網路。
接下我們用service啟動mysql服務
docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network sw-net --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysql:5.6
注意–mount後的key和value對之間用逗號隔開,不能有空格
命令執行後等待服務啟動成功,根據docker service ps mysql 可以看到這個服務具體執行在哪個節點。
接下來建立wordpress的service,和之前啟動wordpress的容器類似
docker service create --name wordpress -p 7080:80 --env WORDPRESS_DB_USESR=root --env WORDPRESS_DB_PASSWORD=root \ --env WORDPRESS_DB_HOST=mysql:3306 --network sw-net wordpress
服務更新
先將服務擴充為多個,這樣保證服務穩定性
docker service scale wordpress=5
然後執行update
docker service update --image wordpress:2.0 wordpress
可以看到wordpress會在後臺更新
如果要更新埠則執行如下命令即可
docker service update --publish-rm 8080:5000 --publish-add 8088:5000 wordpress
上述命令將8080埠移除,換為8088埠