前言:
在之前曾写过一个关于docker集群创建的教程,但是不够深入,只是停留到集群的初始化和节点加入上,这次具体到服务,并详细讲解其中的原理。而且总结了很多自己做的过程中所踩过的很多坑(比如镜像的digest问题)。在查阅资料的过程还了解到了谷歌的kubernetes和swarm是一个类似的东西,准备在之后开一篇入门的坑,毕竟谷歌的东西还是很有意思的。
集群拓扑:
Linux版本:Red Hat Enterprise Linux Server release 7.3 (Maipo
docker版本:
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:10:07 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 08:10:07 2017
OS/Arch: linux/amd64
Experimental: false
一.创建docker swarm集群
官方文档中对应的部分:docker swarm官方
这一部是关于docker这个服务的集群,并不是我们容器所涉及服务的集群
docker swarm init --advertise-addr 172.25.3.250
只用这条命令就可以创建以172.25.3.250为manager的docker集群,–advertise-addr不是必须的,但是当你的计算机上有多个网卡时候就要指定了。
docker swarm join --token ***** ip:2377
别的机器想要加入这个docker集群使用上面的命令就可以了。
[root@foundation3 ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-4jlxqqc9jg39a7ll5npktriayhnk040vuunhcwj2h6ntvcy3j0-3x6za4vgrabq5ydivyxvd6kma \
172.25.3.250:2377
[root@foundation3 ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-4jlxqqc9jg39a7ll5npktriayhnk040vuunhcwj2h6ntvcy3j0-602yfdl0qc5zmhcvo1etytu7y \
172.25.3.250:2377
根据token的不同,我们来区分加入集群的是manager节点还是普通的系节点。
[root@foundation3 ~]# docker swarm join-token manager --quiet
SWMTKN-1-4jlxqqc9jg39a7ll5npktriayhnk040vuunhcwj2h6ntvcy3j0-602yfdl0qc5zmhcvo1etytu7y
通过加入–quiet参数可以只输出token,在需要保存token的时候还是十分有用的。
二.在docker集群中部署服务
1.部署服务前注意
按照本教程做的小伙伴,建议每台机器都可以连接外网,可以从docker镜像仓库下载镜像。原因在稍后解释。
讲到下载镜像,