docker 1.12 在 2016 年 7 月 28 日正式 ga,除了大量的在使用上的改进和 bug 修复外,最引人瞩目的是docker原生支持了 swarm 模式,而不是将swarm作为一个容器对集群进行管理。
而docker1.12的操作命令并不向下兼容,于是过去所有创建swarm集群的文档都不能参考了,本文描述了基于docker1.12版本创建swarm集群的过程。
1、主机环境
在阿里云上申请三个vpc网络的ecs,安装centos7.0的镜像,ip和角色分配如下:
192.168.0.18 manager
192.168.0.19 worker
192.168.0.20 worker
2、docker安装
参考官方文档:https://docs.docker.com/engine/installation/linux/centos/
1)首先确认内核版本,内核版本至少要3.10以上
uname -r
2)增加docker的yum源配置
tee /etc/yum.repos.d/docker.repo <<-'eof'
[dockerrepo]
name=docker repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
eof
3)yum安装docker
yum install libdevmapper* -y
yum install docker-engine -y
4)启动docker
service docker start
ps auxwww | grep -i docker
5)配置阿里云的docker源镜像加速
登录阿里云账号,开通阿里云的容器服务
通过以下地址确认阿里云账号专属的加速器地 https://cr.console.aliyun.com/#/docker/booster
vi /usr/lib/systemd/system/docker.service
原内容:execstart=/usr/bin/dockerd
修改成 execstart=/usr/bin/dockerd --registry-mirror=https://被替换内容.mirror.aliyuncs.com
systemctl daemon-reload
service docker restart
3、docker原生swarm的概念普及
1)manager与worker
一个集群最多有3-7个manager,其他都是worker
manager节点:负责对任务进行调度和其它管理任务,多个管理节点通过 raft 协议组成集群;
worker节点:负责运行具体的任务,管理节点可以同时作为工作节点
2)server包括两种类型:
复制服务(replicated services):类似 k8s 中复制集的概念,保持一定数量的相同任务在集群中运行;
全局服务(global services):类似 k8s 中 daemon 的概念,每个工作节点上运行一个。
一个服务由多个任务组成,一个任务即一个运行的容器。
4、swarm集群的创建
参考文档 https://docs.docker.com/engine/reference/commandline/swarm_init/
192.168.0.18 manager
初始化swarm集群
docker swarm init --advertise-addr 192.168.0.18
swarm initialized: current node (4bl82cxazydg7y86kzbmfief3) is now a manager.
to add a worker to this swarm, run the following command:
docker swarm join \
--token swmtkn-1-1mtdmuzd5n5il70r7mm1sg66rnr6ov38dumfdon408sq4nmqgz-0gej194ntpt73v3zhqiy0sq31 \
192.168.0.18:2377
to add a manager to this swarm, run the following command:
--token swmtkn-1-1mtdmuzd5n5il70r7mm1sg66rnr6ov38dumfdon408sq4nmqgz-3pnkjncrpfh4d94aghk2a9h2w \
manager上查看当前集群节点
docker node ls
id hostname status availability manager status
4bl82cxazydg7y86kzbmfief3 * iz23ogad28gz ready active leader
192.168.0.19/192.168.0.20
docker swarm join --token swmtkn-1-1mtdmuzd5n5il70r7mm1sg66rnr6ov38dumfdon408sq4nmqgz-0gej194ntpt73v3zhqiy0sq31 192.168.0.18:2377
manager上查看集群状态
avd0uhd0mjt939sz8pje1mdyq iz232tm0nizz ready active
dpqqdnkcagubmank7qw9i7jhz iz23h6u54mvz ready active
在192.168.0.20上,将节点手动脱离
docker swarm leave
node left the swarm.
回到manager上查看集群状态
dpqqdnkcagubmank7qw9i7jhz iz23h6u54mvz down active
围绕集群和服务进行管理还涉及到如下的命令,可以直接参考官方文档
https://docs.docker.com/engine/reference/
swarm init
swarm join
service create
service inspect
service ls
service rm
service scale
service ps
service update