1、系统环境:三台CENTOS7的机器
192.168.156.75 管理节点
192.168.156.72 工作节点
192.168.156.77 工作节点
2、分别在三台机器安装docker
yum install docker-io -y
docker pull swarm
修改/lib/systemd/system/docker.service
在中间修改一行
[root@v72 tmp]# cat /lib/systemd/system/docker.service | grep ExecStart
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
修改/etc/sysconfig/docker-storage
[root@v72 tmp]# cat /etc/sysconfig/docker-storage | grep -v ^#
DOCKER_STORAGE_OPTIONS="--storage-driver overlay"
3、在管理节点上初始化集群
Status: Downloaded newer image for docker.io/swarm:latest
[root@v75 ~]# docker swarm init --advertise-addr 192.168.156.75
Swarm initialized: current node (842qfz9f65cue2cxavyj57p65) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-212t8ykaqawrwjb6v4yk7xwas0tyuvuuitxza0r2z9klzcwx9z-7e36rbznzdraxo3n4vtz0hc88 \
192.168.156.75:2377
#上面这一行用于节点加入群集,token是全球唯一的
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
此时群集已经激活,并且只有自身一个节点
[root@v75 ~]# docker info|grep -i swarm
WARNING: You're not using the default seccomp profile
Swarm: active
[root@v75 ~]# netstat -tnlp|grep docker
tcp6 0 0 :::2377 :::* LISTEN 8329/dockerd-curren
tcp6 0 0 :::7946 :::* LISTEN 8329/dockerd-curren
[root@v75 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
69f2aa51355f bridge bridge local
96f7efaa2b9b docker_gwbridge bridge local
1ec550fc11c2 host host local
p4wufy9vhwsm ingress overlay swarm
212782e1b92b none null local
[root@v75 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
842qfz9f65cue2cxavyj57p65 * v75 Ready Active Leader
[root@v75 ~]# ls /var/lib/docker/swarm
certificates docker-state.json raft state.json worker
4、找到刚才群集初始化的输出,在两台节点机器上执行,加入群集
[root@v77 shell]# docker swarm join --token SWMTKN-1-212t8ykaqawrwjb6v4yk7xwas0tyuvuuitxza0r2z9klzcwx9z-7e36rbznzdraxo3n4vtz0hc88 192.168.156.75:2377
This node joined a swarm as a worker.
此时在群集上面能看到三个节点了
[root@v75 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
842qfz9f65cue2cxavyj57p65 * v75 Ready Active Leader
ojdjeddpgcgfwvndwfwxh4amw vm Ready Active
vje0xnfw59zxb0qyjl37s1qcm v72 Ready Active
5、创建服务
[root@v75 ~]# docker service create --name webs --mode global nginx
xupykl4zucj1018cyazqgq7e3
服务名:webs 模式:global在三个节点上面跑 镜像:nginx
将会自动下载镜像启动容器
[root@v75 ~]# docker service ps webs
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
sa3pt1g93y1x webs.vje0xnfw59zxb0qyjl37s1qcm nginx:latest v72 Running Running 25 minutes ago
rsn23lc0rwwr webs.842qfz9f65cue2cxavyj57p65 nginx:latest v75 Running Running 25 minutes ago
8soldedzagn2 webs.ojdjeddpgcgfwvndwfwxh4amw nginx:latest vm Running Running 25 minutes ago
6、添加到容器到主机的端口映射
[root@v75 ~]# docker service update --publish-add 8001:80 webs
webs
此时通过节点所有主机的IP地址加映射的8001端口,都能访问到容器的80端口 ,只要容器有实例在任意一台机器上面跑即可