搭建Docker Swarm集群实战(二)(服务发现使用consul)
2017-10-07 15:54
1206 查看
注意:
docker在版本1.12之后,已经将swarm的部分集成在docker里面了,所以也就不需要依赖第三方的东西了。
所以如果不是为了有趣了解一下的话,请直接转到本系列的第三篇开始=》搭建Docker Swarm集群实战(三)(swarm mode)
个人建立的Docker爱好者交流QQ群:472149402,欢迎大家来此交流经验和问题,一起成长。
1个swarm的master(2号机上)
2个swarm的node(3号机,4号机上)
1,2,3,4号机都是一个局域网LAN内部(原因是他们的eth1设备都和宿主机进行了virtual box的host-only)。
1号机在该网段内IP:192.168.99.101
2号机在该网段内IP:192.168.99.102
3号机在该网段内IP:192.168.99.103
4号机在该网段内IP:192.168.99.104
最后的效果图如下:
贴一个官方的架构图,我的只是演示这个架构的一小部分。
解释参数时刻:
* –swarm表示这个docker host需要成为swarm的一员。
* –swarm-master表示这个docker host的角色是swarm的master
* –swarm-discovery表示swarm的服务发现使用什么模式,这里使用consul服务发现作为swarm-discovery。
* cluster-store指定集群的信息存储的位置,这里利用consul的键值存储
* cluster-advertise指定了本docker host对外公示的ip地址和端口,如果对于为什么是eth1,这个就和网络有关了,可以参考这张图。https://github.com/wuzimei/docker-learning/blob/master/host-virtual-host-docker-network.png?raw=true
* 最后的swarm-master是这个docker host的名称
走起
登录到2号机上偷窥一下吧。
注意上面的语句有–swarm。
然后你可以尝试一下docker info, 看看和以前是不是不一样了。
也可以尝试docker ps -a
这个时候你docker run一个随便什么容器的话,swarm master会在某一个node上启动这个容器。
好奇的你也可以尝试一下docker network ls等命令。
docker ps -a可以查看所有容器的状态
docker run可以启动容器,容器host在哪个docker host上是会集群自动决定的。
docker在版本1.12之后,已经将swarm的部分集成在docker里面了,所以也就不需要依赖第三方的东西了。
所以如果不是为了有趣了解一下的话,请直接转到本系列的第三篇开始=》搭建Docker Swarm集群实战(三)(swarm mode)
个人建立的Docker爱好者交流QQ群:472149402,欢迎大家来此交流经验和问题,一起成长。
架构图
consul服务(1号机上)1个swarm的master(2号机上)
2个swarm的node(3号机,4号机上)
1,2,3,4号机都是一个局域网LAN内部(原因是他们的eth1设备都和宿主机进行了virtual box的host-only)。
1号机在该网段内IP:192.168.99.101
2号机在该网段内IP:192.168.99.102
3号机在该网段内IP:192.168.99.103
4号机在该网段内IP:192.168.99.104
最后的效果图如下:
$ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS consul-machine - virtualbox Running tcp://192.168.99.101:2376 v17.09.0-ce swarm-master - virtualbox Running tcp://192.168.99.102:2376 swarm-master (master) v17.09.0-ce swarm-node-01 - virtualbox Running tcp://192.168.99.103:2376 swarm-master v17.09.0-ce swarm-node-02 - virtualbox Running tcp://192.168.99.104:2376 swarm-master v17.09.0-ce
贴一个官方的架构图,我的只是演示这个架构的一小部分。
开始操作
创建2号机以及把2号机的docker host设置为swarm master
docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-master
解释参数时刻:
* –swarm表示这个docker host需要成为swarm的一员。
* –swarm-master表示这个docker host的角色是swarm的master
* –swarm-discovery表示swarm的服务发现使用什么模式,这里使用consul服务发现作为swarm-discovery。
* cluster-store指定集群的信息存储的位置,这里利用consul的键值存储
* cluster-advertise指定了本docker host对外公示的ip地址和端口,如果对于为什么是eth1,这个就和网络有关了,可以参考这张图。https://github.com/wuzimei/docker-learning/blob/master/host-virtual-host-docker-network.png?raw=true
* 最后的swarm-master是这个docker host的名称
走起
$ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-master Running pre-create checks... Creating machine... (swarm-master) Copying /Users/jiandaojiao/.docker/machine/cache/boot2docker.iso to /Users/jiandaojiao/.docker/machine/machines/swarm-master/boot2docker.iso... (swarm-master) Creating VirtualBox VM... (swarm-master) Creating SSH key... (swarm-master) Starting the VM... (swarm-master) Check network to re-create if needed... (swarm-master) Waiting for an IP... Waiting for machine to be running, this may take a few minutes... Detecting operating system of created instance... Waiting for SSH to be available... Detecting the provisioner... Provisioning with boot2docker... Copying certs to the local machine directory... Copying certs to the remote machine... Setting Docker configuration on the remote daemon... Configuring swarm... Checking connection to Docker... Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env swarm-master
登录到2号机上偷窥一下吧。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE swarm latest 2569518fadd0 3 weeks ago 15.77 MB $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a52c4529773e swarm:latest "/swarm join --advert" 3 minutes ago Up 3 minutes 2375/tcp swarm-agent 3ac1440eea97 swarm:latest "/swarm manage --tlsv" 3 minutes ago Up 3 minutes 2375/tcp, 0.0.0.0:3376->3376/tcp swarm-agent-master
创建3号机和4号机(作为swarm的node)
docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-01 docker-machine create -d virtualbox --swarm --swarm-discovery="consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-store=consul://$(docker-machine ip consul-machine):8500" --engine-opt="cluster-advertise=eth1:2376" swarm-node-02
确认集群
$ eval $(docker-machine env --swarm swarm-master)
注意上面的语句有–swarm。
然后你可以尝试一下docker info, 看看和以前是不是不一样了。
也可以尝试docker ps -a
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab5753fb0680 swarm:latest "/swarm join --advert" 36 minutes ago Up 36 minutes 2375/tcp swarm-node-02/swarm-agent 9812c1229dbf swarm:latest "/swarm join --advert" 44 minutes ago Up 44 minutes 2375/tcp swarm-node-01/swarm-agent a52c4529773e swarm:latest "/swarm join --advert" 55 minutes ago Up 55 minutes 2375/tcp swarm-master/swarm-agent 3ac1440eea97 swarm:latest "/swarm manage --tlsv" 56 minutes ago Up 56 minutes 2375/tcp, 192.168.99.102:3376->3376/tcp swarm-master/swarm-agent-master
这个时候你docker run一个随便什么容器的话,swarm master会在某一个node上启动这个容器。
好奇的你也可以尝试一下docker network ls等命令。
总结:
每次需要控制docker的容器的时候,就以swarm方式连接到swarm master上。(eval $(docker-machine env –swarm swarm-master))docker ps -a可以查看所有容器的状态
docker run可以启动容器,容器host在哪个docker host上是会集群自动决定的。
下节预告
在写完这篇之后,才发现这种swarm的方式已经是比较旧的方式了。在docker版本1.12之后, 官方推荐使用新的swarm mode。 那下一次正好说一下,新的swarm mode如何搭建。相关文章推荐
- 搭建Docker Swarm集群实战(一)(服务发现使用consul)
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- 使用Docker镜像搭建consul和swarm集群基础环境及overlay网络
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- Docker集群实验环境布署--swarm【3 注册服务监控与自动发现组件--consul】
- Swarm创建docker集群:服务发现-配置文件法
- 详解使用docker 1.12 搭建多主机docker swarm集群
- 使用Docker Swarm搭建分布式爬虫集群
- 使用jenkins、docker、consul、nginx搭建支持自动化构建部署以及弹性伸缩的集群系统详细教程
- ubuntu 使用 swarm 搭建 docker 集群
- Swarm创建docker集群:服务发现-etcd
- Docker1.12.1之swarm集群搭建与使用
- 在ubuntu上使用swarm搭建docker集群
- 使用Docker Swarm搭建分布式爬虫集群
- 在Windows环境中使用Nginx, Consul, Consul Template搭建负载均衡和服务发现服务
- 搭建Docker Swarm集群实战(三)(swarm mode)
- 使用docker 1.12 搭建多主机docker swarm集群
- consul 服务发现 集群 docker 版
- [转载]微服务注册发现集群搭建——Registrator + Consul + Consul-template + nginx