bd1 192.168.0.192
bd2 192.168.0.193
Docker 開啟遠程管理
默認情況下,Docker守護進程會生成一個 /var/run/docker.sock 文件來進行本地進程通信,而不會監聽任何端口,所以默認情況下 Docker 只能在本地使用命令行操作。 如果要在其它機器上遠程操作 Docker 主機,就需要讓 Docker 監聽一個端口,這樣才能實現遠程通信。
在我的 CentOS 7X 上,首先修改 Docker 配置文件 /etc/sysconfig/docker 中的 OPTIONS 參數,添加
-H unix:///var/run/docker.sock -H 0.0.0.0:5555
修改后參數類似
OPTIONS=\\\’–selinux-enabled –log-driver=journald –signature-verification=false -H unix:///var/run/docker.sock -H 0.0.0.0:5555\\\’
然后重新啟動 Docker 服務
$ sudo systemctl restart docker.service
測試一下
sudo docker -H <HOST>:5555 images
創建 Swarm 集群
獲取 Swarm 鏡像
分別在三個節點上下載swarm鏡像
$ sudo docker pull swarm
初始化Swarm集群
首先在 bd0 節點上初始化 Swarm 集群
$ sudo docker swarm init Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (192.168.0.109 on eth0 and 192.168.122.1 on virbr0) - specify one with --advertise-addr
第一次創建失敗了,原因是我的機器有兩塊網卡,Swarm不知道要用那塊網卡組建集群,所以需要使用 –advertise-addr 來指定使用那塊網卡。
$ sudo docker swarm init --advertise-addr 192.168.0.109 Swarm initialized: current node (1egy2ark49q6xokudps5wykhn) is now a manager. To add a worker to this swarm, run the following command: docker swarm join \\\\ --token SWMTKN-1-0x11m2uk7ps9bh7nflkxwirgv0syvacl18rut3hilz4i9lgis3-d9m22hixt0b57hjj81im8bqdl \\\\ 192.168.0.109:2377
To add a manager to this swarm, run \\\’docker swarm join-token manager\\\’ and follow the instructions.
然后分別在 bd1 和 bd2 節點上運行下面命令將機器加入集群
$ sudo docker swarm join \\\\ --token SWMTKN-1-0x11m2uk7ps9bh7nflkxwirgv0syvacl18rut3hilz4i9lgis3-d9m22hixt0b57hjj81im8bqdl \\\\ 192.168.0.109:2377
This node joined a swarm as a worker.
下面查看一下集群節點信息
$ sudo docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 11ochjq4o1s2m6w4u8jxb37w6 bd1 Ready Active 1egy2ark49q6xokudps5wykhn * bd0 Ready Active Leader b4e2ywnhhd6fhgfxtr1qh5gew bd2 Ready Active
創建集群跨主機網絡
首先查看一下集群網絡
$ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 36679de6466b bridge bridge local 72e853673d8b docker_gwbridge bridge local b45cef05e017 host host local 1zzlk9hpwyqy ingress overlay swarm
添加一個Swarm網絡
$ sudo docker network create --driver overlay myswarm a04evrfrr4cvnbvrummzvg0mn
創建后,查看一下集群網絡
$ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 36679de6466b bridge bridge local 72e853673d8b docker_gwbridge bridge local b45cef05e017 host host local 1zzlk9hpwyqy ingress overlay swarm a04evrfrr4cv myswarm overlay swarm
部署服務
這里使用 nginx 服務來演示一下怎樣創建一個服務集群。
下載nginx鏡像
$ sudo docker pull nginx
創建服務
$ sudo docker service create --replicas 2 --name mynginx -p 8000:80 --network=myswarm nginx 5xrm96xveqw5gq63srts1rbhw
這里創建了需要兩個 nginx 實例的 nginx 服務。同時,為了能被外網地址訪問,我們做了一下端口映射,映射到物理主機的8000端口。
查看服務
$ sudo docker service ls
ID NAME REPLICAS IMAGE COMMAND
5xrm96xveqw5 mynginx 2/2 nginx
$ sudo docker service ps mynginx
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 Running Running 23 seconds ago
divhrq89xhxka8bvb8r9zqqhz mynginx.2 nginx bd2 Running Running 20 seconds ago
$ sudo docker service inspect mynginx
...
VirtualIPs: [
{
NetworkID: 1zzlk9hpwyqyocloxy9j9vct7,
Addr: 10.255.0.6/16
},
{
NetworkID: a04evrfrr4cvnbvrummzvg0mn,
Addr: 10.0.0.2/24
}
]
...
在bd0上查看
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e480d427fd51 nginx:latest nginx -g \\\'daemon off 41 seconds ago Up 40 seconds 80/tcp mynginx.1.1crmc5ecsjoci8xavxzbnbks3
在bd2上查看
$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c12d4f9eb457 nginx:latest nginx -g \\\'daemon off 56 seconds ago Up 52 seconds 80/tcp mynginx.2.divhrq89xhxka8bvb8r9zqqhz
服務已經創建并啟動了,下面我們在瀏覽器訪問 http://bd0:8000 來驗證一下 nginx 服務的狀態。
服務的Failover
首先我們查看一下當前服務的狀態
$ sudo docker service ps mynginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 Running Running 23 seconds ago divhrq89xhxka8bvb8r9zqqhz mynginx.2 nginx bd2 Running Running 20 seconds ago
然后在 bd2 上將其上的服務停止
$ sudo docker kill mynginx.2.divhrq89xhxka8bvb8r9zqqhz mynginx.2.divhrq89xhxka8bvb8r9zqqhz
再次觀察服務狀態,如下:
$ sudo docker service ps mynginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 Running Running 6 minutes ago br5iyie0dr945ixnq7s77kunr mynginx.2 nginx bd1 Running Running 4 seconds ago divhrq89xhxka8bvb8r9zqqhz \\\\_ mynginx.2 nginx bd2 Shutdown Failed 5 seconds ago task: non-zero exit (137)
可以看到在 bd1 上又起了一個實例用來接替原來在 bd2 上的實例。
服務的擴容/縮容
增加服務實例
$ sudo docker service scale mynginx=3 mynginx scaled to 3 $ sudo docker service ps mynginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 Running Running 7 minutes ago br5iyie0dr945ixnq7s77kunr mynginx.2 nginx bd1 Running Running about a minute ago divhrq89xhxka8bvb8r9zqqhz \\\\_ mynginx.2 nginx bd2 Shutdown Failed about a minute ago task: non-zero exit (137) 985tln0aprsvjthjpve0n6qmz mynginx.3 nginx bd2 Running Preparing 3 seconds ago
減少服務實例
$ sudo docker service scale mynginx=2 mynginx scaled to 2 $ sudo docker service ps mynginx ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR 1crmc5ecsjoci8xavxzbnbks3 mynginx.1 nginx bd0 Running Running 7 minutes ago br5iyie0dr945ixnq7s77kunr mynginx.2 nginx bd1 Shutdown Shutdown less than a second ago divhrq89xhxka8bvb8r9zqqhz \\\\_ mynginx.2 nginx bd2 Shutdown Failed about a minute ago task: non-zero exit (137) 985tln0aprsvjthjpve0n6qmz mynginx.3 nginx bd2 Running Running 5 seconds ago
刪除服務
$ sudo docker service rm mynginx
總結
以上所述是小編給大家介紹的Docker使用Swarm組建集群的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對三五互聯網站的支持!
更多關于云服務器,域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn