1. 程式人生 > 實用技巧 >docker-swarm實戰

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埠

感謝關注我的公眾號