1. 修改主机名(三台主机全部修改)

[root@localhost ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11    node1
192.168.1.22    node2
192.168.1.33    node3

2. 开启SSH免密登录(三台主机全部修改)

详见:https://blog.shuaiguoer.com/docker-machine.html

3. 在Node1上初始化集群,并成为管理节点

[root@localhost ~]# docker swarm init --advertise-addr 192.168.1.11

Swarm initialized: current node (db9t82ql4q508de62hg0ff8e5) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-2u5rb12fdur111qh0ng1j1tpdsr9glfv8zskpbghd9axoyanvl-92mwnx1a4q9cox72d3yim0sl4 192.168.1.11:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

查看集群节点情况

  • nodeId旁边的*号表示你当前连接到的节点。
  • docker引擎的swarm模式自动使用宿主机的主机名作为节点名。
[root@localhost ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
db9t82ql4q508de62hg0ff8e5 *   node1               Ready               Active              Leader              18.09.0

4. 切换到node2、node3加入集群

[root@localhost ~]# docker swarm join --token SWMTKN-1-2u5rb12fdur111qh0ng1j1tpdsr9glfv8zskpbghd9axoyanvl-92mwnx1a4q9cox72d3yim0sl4 192.168.1.11:2377

This node joined a swarm as a worker.

再来查看一下集群节点情况

[root@localhost ~]# docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
db9t82ql4q508de62hg0ff8e5 *   node1               Ready               Active              Leader              18.09.0
tdsv68ndb65bmjukdddqa498p     node2               Ready               Active                                  18.09.4
zago63q8jtdunfosfd0k65a65     node3               Ready               Active                                  18.09.4

5. 提升node2位管理者

[root@localhost ~]# docker node promote node2

Node node2 promoted to a manager in the swarm.

再次查看一下集群节点

[root@localhost ~]# docker node ls

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
db9t82ql4q508de62hg0ff8e5 *   node1               Ready               Active              Leader              18.09.0
tdsv68ndb65bmjukdddqa498p     node2               Ready               Active              Reachable           18.09.4
zago63q8jtdunfosfd0k65a65     node3               Ready               Active                                  18.09.4

6. 开启路由转发(三台主机全部开启)

[root@localhost ~]# vim /etc/sysctl.conf 

net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p

7. 搭建镜像私有仓库registry并上传httpd镜像

详见:http://shuaiguoer.com/registry/

8. 拉取并上传镜像

拉取镜像

[root@node1 ~]# docker pull busybox
[root@node1 ~]# docker pull httpd
[root@node1 ~]# docker pull centos
[root@node1 ~]# docker pull dockersamples/visualizer

修改标签

[root@node1 ~]# docker tag httpd:latest 192.168.1.11:5000/httpd
[root@node1 ~]# docker tag centos:latest 192.168.1.11:5000/centos
[root@node1 ~]# docker tag dockersamples/visualizer:latest 192.168.1.11:5000/visualizer

上传镜像

[root@node1 ~]# docker push 192.168.1.11:5000/httpd
[root@node1 ~]# docker push 192.168.1.11:5000/centos
[root@node1 ~]# docker push 192.168.1.11:5000/visualizer

9. 运行图形化界面

[root@node1 ~]# docker run -d -p 8888:8080 --restart=always -e HOST=192.168.1.11 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer

10. 拉取镜像(两台主机)

[root@node2 ~]# docker pull 192.168.1.11:5000/centos
[root@node2 ~]# docker pull 192.168.1.11:5000/httpd
[root@node2 ~]# docker pull 192.168.1.11:5000/visualizer

11. 创建web

[root@node1 ~]# docker service create --replicas 3 --name web2 -p 8001:80 -p 10123:22 192.168.1.11:5000/httpd

iohair47e0pyt5ppc4dvvrofy
overall progress: 3 out of 3 tasks
1/3: running  
2/3: running  
3/3: running  
verify: Service converged

[root@node1 ~]# docker service create --replicas 1 --name web3 -p 8002:80 -p 10124:22 192.168.1.11:5000/httpd

ksd1e6iyvg0lzb7eriexk6m80
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

[root@node1 ~]# docker service create --mode global --name web4 -p 8005:80 -p 10127:22 192.168.1.11:5000/httpd

51vfdqehczxc10gauk1oco0j7
overall progress: 3 out of 3 tasks
oykzo926ce4c: running   [==================================================>]
nbpykrortqgg: running   [==================================================>]
1b8xg6f70ek3: running   [==================================================>]
verify: Service converged

[root@node1 ~]# docker service create --replicas 2 --name web10 -p 8009:80 -p 10129:22 192.168.1.11:5000/httpd

up7cm9ma7hjm2egfc8lpvhsq7
overall progress: 2 out of 2 tasks
1/2: running   [==================================================>]
2/2: running   [==================================================>]
verify: Service converged

[root@node3 ~]# systemctl stop docker.service
# 停掉node3不会影响其他主机运行的容器

12. 在创建好的swarm集群中,部署服务:运行httpd镜像

[root@node1 ~]# docker service create --name web_server httpd

1nijiylj10vyvs1y0s189bc3g
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

查看正在群集中运行的服务

[root@node1 ~]# docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                            PORTS
iohair47e0py        web2                replicated          3/3                 192.168.1.11:5000/httpd:latest   *:8001->80/tcp, *:10123->22/tcp
ksd1e6iyvg0l        web3                replicated          1/1                 192.168.1.11:5000/httpd:latest   *:8002->80/tcp, *:10124->22/tcp
51vfdqehczxc        web4                global              3/3                 192.168.1.11:5000/httpd:latest   *:8005->80/tcp, *:10127->22/tcp
up7cm9ma7hjm        web10               replicated          2/2                 192.168.1.11:5000/httpd:latest   *:8009->80/tcp, *:10129->22/tcp
1nijiylj10vy        web_server          replicated          1/1                 httpd:latest

列出服务的任务

[root@node1 ~]# docker service ps web_server

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
sv25qxrtuuv5        web_server.1        httpd:latest        node3               Running             Running 4 minutes ago
Last modification:July 23rd, 2020 at 11:16 pm
如果觉得我的文章对你有用,请随意赞赏