Docker集群搭建-Consul

基础环境准备

  1. 创建虚拟机;

  2. 安装Ubuntu 15.04 Server amd64系统;

  3. 主机说明;

  4. 开启并配置ssh服务;

  5. 安装Docker;

在阿里云服务器上搭建公司私有仓库

  1. 搭建私有镜像仓库(操作对象:xytech-即阿里云服务器);
    请参照这篇文章:Docker Registry搭建私有仓库和批量上传镜像到私有仓库

  2. 私有仓库的使用;

# 在客户端主机创建文件夹(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

  1. 创建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
  1. 修改主机的配置文件(操作对象:三台主机);

获取docker0的ip配置信息,用于修改本地配置文件,如下图:

  1. 更改本地配置文件“/etc/default/docker”
vim /etc/default/docker
  1. 本地配置文件编辑内容如下
DOCKER_OPTS="--dns 172.17.0.1 --dns 8.8.8.8 --dns-search service .consul"
  1. 启动具有自启动功能的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
  1. 启动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
  1. 启动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来即可。

  1. 通过浏览器访问下面的网址即可查看Consul集群的情况(如下图);

配合Consul在Docker中运行分布式服务

  1. 创建并进入工作目录(操作对象:三台主机);
mkdir -p /opt/disappcd /opt/disapp
  1. 获取基础镜像并修改镜像名称和标签(如果从底层镜像开始构建过于麻烦,这里直接修改替换配置文件来构建新镜像)
# 操作对象: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
  1. 创建并编辑Dockerfile(内容如下)
# 操作对象:Docker01和Docker02FROM mongo-appMAINTAINER Mong ADD uwsgi-consul.ini /opt/distributed_app/# 操作对象:Docker03FROM mongo-clientMAINTAINER Mong ADD client.rb /opt/distributed_client/
  1. 创建并编辑配置文件

  2. 操作对象: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
  1. 操作对象: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
  1. 操作对象: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
  1. 构建新镜像
# 操作对象:Docker01和Docker02docker build -t mongo-app-add .# 操作对象:Docker03docker build -t mongo-client-add .
  1. 启动分布式服务的应用和客户端
# 操作对象: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
  1. 通过浏览器访问下面的网址即可查看Consul集群和分布式服务的情况(如下图);

  2. 查看客户端的日志可以看到Consul集群各节点中的分布式服务的部署情况(如下图);

# 操作对象:Docker03docker logs -f docker-03-clien

关键字:consul, docker

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部