Docker集群搭建-Consul
基础环境准备
创建虚拟机;
安装Ubuntu 15.04 Server amd64系统;
主机说明;
开启并配置ssh服务;
安装Docker;
在阿里云服务器上搭建公司私有仓库
搭建私有镜像仓库(操作对象:xytech-即阿里云服务器);
请参照这篇文章:Docker Registry搭建私有仓库和批量上传镜像到私有仓库私有仓库的使用;
# 在客户端主机创建文件夹(DomainName:Port例如example.com:9527)mkdir -p /etc/docker/certs.d/DomainName:Port# 先将ca.crt文件传到客户端主机# 在ca.crt的当前目录下将该证书复制到上面创建的文件夹cp ca.crt /etc/docker/certs.d/DomainName:Port/# 重启docker服务service docker restart# 接下来就可以从私有仓库拉取镜像或向其上传镜像了。
Docker集群搭建-Consul
- 创建Consul服务的Docker镜像(操作对象:三台主机);
# 这里直接拉取可用的镜像docker pull willem.top:6666/mongo-consul && docker tag willem.top:6666/mongo-consul mongo-consul && docker rmi willem.top:6666/mongo-consul
- 修改主机的配置文件(操作对象:三台主机);
获取docker0的ip配置信息,用于修改本地配置文件,如下图:
- 更改本地配置文件“/etc/default/docker”
vim /etc/default/docker
- 本地配置文件编辑内容如下
DOCKER_OPTS="--dns 172.17.0.1 --dns 8.8.8.8 --dns-search service .consul"
- 启动具有自启动功能的Consul节点(操作对象:Docker01);
# 1.创建工作目录mkdir -p /opt/consul# 2.进入工作目录cd /opt/consul# 3.在工作目录中创建启动具有自启动功能的Consul节点的脚本vim consul-start.sh# 4.编辑启动具有自启动功能的Consul节点的脚本内容如下(请根据自己的情况更改镜像名称以及ip地址-查询方式:ifconfig)docker rm -f consul01docker run -d \ --restart always \ -h $HOSTNAME \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ --name consul01 mongo-consul \ -server -advertise 192.168.2.129 -bootstrap-expect 3# 5.给脚本赋予可执行权限(也可使用相对路径:chmod +x ./consul-start.sh)chmod +x /opt/consul/consul-start.sh# 6.执行脚本(也可使用相对路径:./consul-start.sh)/opt/consul/consul-start.sh
- 启动Docker02的Consul节点(操作对象:Docker02);
# 1.创建工作目录mkdir -p /opt/consul# 2.进入工作目录cd /opt/consul# 3.在工作目录中创建启动具有自启动功能的Consul节点的脚本vim consul-start.sh# 4.编辑启动具有自启动功能的Consul节点的脚本内容如下(请根据自己的情况更改镜像名称以及ip地址)docker rm -f consul02docker run -d \ --restart always \ -h $HOSTNAME \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ --name consul02 mongo-consul \ -server -advertise 192.168.2.56 -join 192.168.2.129# 5.给脚本赋予可执行权限(也可使用相对路径:chmod +x ./consul-start.sh)chmod +x /opt/consul/consul-start.sh# 6.执行脚本(也可使用相对路径:./consul-start.sh)/opt/consul/consul-start.sh
- 启动Docker03的Consul节点(操作对象:Docker03);
Docker03跟Docker02的操作唯一的区别就是在第4步的配置文件中的内容稍有变化,内容如下:
docker rm -f consul03docker run -d \ --restart always \ -h $HOSTNAME \ -p 8300:8300 \ -p 8301:8301 \ -p 8301:8301/udp \ -p 8302:8302 \ -p 8302:8302/udp \ -p 8400:8400 \ -p 8500:8500 \ -p 53:53/udp \ --name consul03 mongo-consul \ -server -advertise 192.168.2.77 -join 192.168.2.129
其他的操作根据Docker02来即可。
- 通过浏览器访问下面的网址即可查看Consul集群的情况(如下图);
配合Consul在Docker中运行分布式服务
- 创建并进入工作目录(操作对象:三台主机);
mkdir -p /opt/disappcd /opt/disapp
- 获取基础镜像并修改镜像名称和标签(如果从底层镜像开始构建过于麻烦,这里直接修改替换配置文件来构建新镜像)
# 操作对象:Docker01和Docker02docker pull willem.top:6666/mongo-app && docker tag willem.top:6666/mongo-app mongo-app && docker rmi willem.top:6666/mongo-app# 操作对象:Docker03docker pull willem.top:6666/mongo-client && docker tag willem.top:6666/mongo-client mongo-client && docker rmi willem.top:6666/mongo-client
- 创建并编辑Dockerfile(内容如下)
# 操作对象:Docker01和Docker02FROM mongo-appMAINTAINER Mong ADD uwsgi-consul.ini /opt/distributed_app/# 操作对象:Docker03FROM mongo-clientMAINTAINER Mong ADD client.rb /opt/distributed_client/
创建并编辑配置文件
操作对象:Docker01
vim uwsgi-consul.ini # 编辑配置文件内容如下(-根据自己的情况修改ip,现在用hosts映射还有些问题,暂时先用ip,%h等同于hostname) [uwsgi] plugins = consul socket = 127.0.0.1:9999 master = true enable-threads = true [server1] consul-register = url=http://192.168.2.129:8500,name=distributed_app,id=server1,port=2001 mule = config.ru [server2] consul-register = url=http://192.168.2.129:8500,name=distributed_app,id=server2,port=2002 mule = config.ru
- 操作对象:Docker02
vim uwsgi-consul.ini # 编辑配置文件内容如下 [uwsgi] plugins = consul socket = 127.0.0.1:9999 master = true enable-threads = true [server1] consul-register = url=http://192.168.2.56:8500,name=distributed_app,id=server1,port=2001 mule = config.ru [server2] consul-register = url=http://192.168.2.56:8500,name=distributed_app,id=server2,port=2002 mule = config.ru
- 操作对象:Docker03
vim client.rb # 编辑配置文件内容如下 require "rubygems" require "json" require "net/http" require "uri" require "resolv" empty = "There are no distributed applications registered in Consul" uri = URI.parse("http://172.17.0.1:8500/v1/catalog/service/distributed_app") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) while true if response.body == "{}" puts empty sleep(1) elsif result = JSON.parse(response.body) result.each do |service| puts "Application # {service['ServiceName']} with element # {service["ServiceID"]} on port # {service["ServicePort"]} found on node # {service["Node"]} (# {service["Address"]})." dns = Resolv::DNS.new.getresources("distributed_app.service.consul", Resolv::DNS::Resource::IN::A) puts "We can also resolve DNS - # {service['ServiceName']} resolves to # {dns.collect { |d| d.address }.join(" and ")}." sleep(1) end end end
- 构建新镜像
# 操作对象:Docker01和Docker02docker build -t mongo-app-add .# 操作对象:Docker03docker build -t mongo-client-add .
- 启动分布式服务的应用和客户端
# 操作对象:Docker01和Docker02docker run --restart always -h $HOSTNAME -d --name docker-02-app mongo-app-add# 操作对象:Docker03docker run --restart always -h $HOSTNAME -d --name docker-03-client mongo-client-add
通过浏览器访问下面的网址即可查看Consul集群和分布式服务的情况(如下图);
查看客户端的日志可以看到Consul集群各节点中的分布式服务的部署情况(如下图);
# 操作对象:Docker03docker logs -f docker-03-clien
关键字:consul, docker
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!