本片文章介绍一下 使用docker-machine 搭建docker swarm 集群;docker swarm是docker 官方搭建的容器集群编排工具;容器编排,就是可使你像使用一太机器同样来使用一个集群,你运行的容器可能会在容器中的任何一个节点上运行;html
首先盗一张 docker swarm的架构图:node
图片来源 https://yeasy.gitbooks.io/docker_practice/content/swarm/intro.htmlgit
在使用 Swarm 管理docker 集群时,会有一个 swarm manager 以及若干的 swarm node,swarm manager上运行 swarm daemon,用户只须要跟 swarm manager 通讯,而后 swarm manager 再根据discovery service的信息选择一个swarm node 来运行container。github
值得注意的是 swarm daemon 只是一个任务调度器(scheduler)和路由器(router),它自己不运行容器,它只接受 Docker client 发送过来的请求,调度合适的 swarm node 来运行 container。这意味着,即便 swarm daemon 因为某些缘由挂掉了,已经运行起来的容器也不会有任何影响;docker
swarm manager 须要知道有哪些swarm node, 这就须要进行“服务发现”(有了注册才有发现);swarm的服务发现方式有不少种,这里主要实验了两种,即经过docker hub的token 和 etcd;架构
(1)上一篇文章中讲到docker-machine,docker-machine是集成了docker swarm的;docker hub token的方式是经过swarm向docker hub token申请一个token,而后将全部的node加入到这个token;ssh
首先须要经过swarm的create命令来去docker hub去建立一个token, 前一章中,咱们创建了一个叫hehe-dev的docker machine;curl
docker-machine ssh hehe-dev 登录到这个machine中分布式
dao pull swarm 将swarm的下载镜像下载下来,这里运用daocloud来进行加速工具
docker run swarm create 运行swarm create命令创建一个token,这个token要牢记下来,下文用SWARM_TOKEN来代替这个token;
接着退出hehe-dev
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://SWARM_TOKEN swarm-master 创建swarm manager而且将其加入到token中;
docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-01
docker-machine create -d virtualbox --swarm --swarm-discovery token://SWARM_TOKEN swarm-node-02 接着创建起两个swarm node,名字本身随便取,我这里选的是swarm-node-01 和 swarm-node-01 不能有下划线
经过上面几步,其实一个swarm集群就已经创建起来了,经过docker-machine ls 能够看到已经创建起来的docker machine; 接着咱们要看看集群里面的状况:
docker-machine ssh swarm-master 登录到swarm-master节点中(其实登录到集群中任何一台机器均可以),而后运行
sudo docker run --rm swarm list token://SWARM_TOKEN 而后就能够看到集群中的节点信息了;
(2)etcd 是coreOS项目下的一个分布式键值系统,主要用于服务发现和配置分发; 是用etcd做为swarm的服务发现组件实际上是相似的,将etcd的某个目录(etcd://ip:port/dir 的格式)暴漏给swarm node,而后每一个swarm node分别链接到这个目录,将本身的ip,端口注册到里面;
首先是安装etcd,到etcd的官网下载便可;github.com/coreos/etcd/releases, 我是mac os x,安装和启动命令以下:
curl -L https://github.com/coreos/etcd/releases/download/v2.3.0-alpha.1/etcd-v2.3.0-alpha.1-darwin-amd64.zip -o etcd-v2.3.0-alpha.1-darwin-amd64.zip
unzip etcd-v2.3.0-alpha.1-darwin-amd64.zip
cd etcd-v2.3.0-alpha.1-darwin-amd64
./etcd --data-dir=/tmp/default.etcd --listen-client-urls 'http://本机IP:4001' --advertise-client-urls 'http://本机IP:4001'
这样etcd服务就启动了。
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery etcd://本机IP:4001/swarm swarm-master-etcd ;
docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本机IP:4001/swarm swarm-node-etcd-01
docker-machine create -d virtualbox --swarm --swarm-discovery etcd://本机IP:4001/swarm swarm-node-etcd-02
上面建立服务的过程其实和token是同样的,只不过是讲etcd的url替换了token,查看swarm集群组成的时候,同时也是同样的道理;