搭建Docker Swarm集群实战(二)(服务发现使用consul)
来源:互联网 发布:淘宝网官网下载2017 编辑:程序博客网 时间:2024/06/16 06:52
注意:
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 lsNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORSconsul-machine - virtualbox Running tcp://192.168.99.101:2376 v17.09.0-ceswarm-master - virtualbox Running tcp://192.168.99.102:2376 swarm-master (master) v17.09.0-ceswarm-node-01 - virtualbox Running tcp://192.168.99.103:2376 swarm-master v17.09.0-ceswarm-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-masterRunning 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 imagesREPOSITORY TAG IMAGE ID CREATED SIZEswarm latest 2569518fadd0 3 weeks ago 15.77 MB$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESa52c4529773e swarm:latest "/swarm join --advert" 3 minutes ago Up 3 minutes 2375/tcp swarm-agent3ac1440eea97 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-01docker-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 -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESab5753fb0680 swarm:latest "/swarm join --advert" 36 minutes ago Up 36 minutes 2375/tcp swarm-node-02/swarm-agent9812c1229dbf swarm:latest "/swarm join --advert" 44 minutes ago Up 44 minutes 2375/tcp swarm-node-01/swarm-agenta52c4529773e swarm:latest "/swarm join --advert" 55 minutes ago Up 55 minutes 2375/tcp swarm-master/swarm-agent3ac1440eea97 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 Swarm集群实战(一)(服务发现使用consul)
- 搭建Docker Swarm集群实战(三)(swarm mode)
- Swarm创建docker集群:服务发现-etcd
- 使用Docker镜像搭建consul和swarm集群基础环境及overlay网络
- 使用Docker搭建consul集群+registrator实现服务自动注册。
- docker 搭建 consul 集群
- docker swarm集群搭建
- Swarm搭建Docker集群
- Docker搭建Swarm集群
- Swarm搭建Docker集群
- Swarm+docker集群搭建
- Swarm -- 搭建Docker集群
- ubuntu 使用 swarm 搭建 docker 集群
- Swarm创建docker集群:服务发现-配置文件法
- 使用docker 1.12 搭建多主机docker swarm集群
- 基于docker-swarm搭建持续集成集群服务
- Docker + Swarm + etcd 集群搭建
- Warning: fopen() [function.fopen]: Unable to find the wrapper “https” – did you forget to enable it
- 软件工程第三次实验
- 设计模式-结构型-享元
- 阿里云服务器linux环境部署node及npm(cnpm)
- ESRI_ArcGIS+InfoCAD_v6.5地理信息系统软件
- 搭建Docker Swarm集群实战(二)(服务发现使用consul)
- Markdown中插入数学公式的方法
- Java解析xml文件
- 第十章 定位 层级关系
- linux关闭死循环的fork子进程
- PostgreSQL小记
- oracle内存参数调整失败,数据库不能启动,恢复方法
- Python数据结构之链表
- LeetCode WIith JS || 118. Pascal's Triangle[杨辉三角]