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