资讯专栏INFORMATION COLUMN

Docker集群搭建-Consul

leo108 / 553人阅读

摘要:基础环境准备创建虚拟机安装系统主机说明开启并配置服务安装在阿里云服务器上搭建公司私有仓库搭建私有镜像仓库操作对象即阿里云服务器请参照这篇文章搭建私有仓库和批量上传镜像到私有仓库私有仓库的使用在客户端主机创建文件夹例如先将文件传到客户端主

基础环境准备

创建虚拟机;

安装Ubuntu 16.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 consul01

docker 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 consul02

docker 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 consul03

docker 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/disapp
cd /opt/disapp

获取基础镜像并修改镜像名称和标签(如果从底层镜像开始构建过于麻烦,这里直接修改替换配置文件来构建新镜像)

# 操作对象:Docker01和Docker02
docker pull willem.top:6666/mongo-app && docker tag willem.top:6666/mongo-app mongo-app && docker rmi willem.top:6666/mongo-app

# 操作对象:Docker03
docker pull willem.top:6666/mongo-client && docker tag willem.top:6666/mongo-client mongo-client && docker rmi willem.top:6666/mongo-client

创建并编辑Dockerfile(内容如下)

# 操作对象:Docker01和Docker02
FROM mongo-app
MAINTAINER Mong 
ADD uwsgi-consul.ini /opt/distributed_app/

# 操作对象:Docker03
FROM mongo-client
MAINTAINER 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和Docker02
docker build -t mongo-app-add .

# 操作对象:Docker03
docker build -t mongo-client-add .

启动分布式服务的应用和客户端

# 操作对象:Docker01和Docker02
docker run --restart always -h $HOSTNAME -d --name docker-02-app mongo-app-add

# 操作对象:Docker03
docker run --restart always -h $HOSTNAME -d --name docker-03-client mongo-client-add

通过浏览器访问下面的网址即可查看Consul集群和分布式服务的情况(如下图);

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

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26609.html

相关文章

  • Docker overlay 网络搭建

    摘要:快速开始跨主机网络方案原生第三方方案之前介绍了搭建集群,所以在此直接选用自带的方案来做,和完美结合。直接检查网络列表发现已经在其中。 Docker overlay 网络搭建 Overlay网络是指通过在现有网络上叠加一个软件定义的逻辑网络,最大程度的保留原有网络,通过定义其上的逻辑网络,实现业务逻辑,解决原有数据中心的网络问题。 快速开始 Docker跨主机网络方案 docker ...

    Xufc 评论0 收藏0
  • Docker Swarm学习笔记二

    摘要:拉取镜像启动发现后端创建集群创建主管理员操作对象因为这里的既是主管理员又是发现服务后台,所以和的都是。主管理员操作节点的容器查看集群节点的容器列表删除容器启停容器与直接操作的区别就是后面加了 搭建基础环境 官方文档中演示时用到了五台主机/虚拟机; showImg(https://segmentfault.com/img/bVzce2); 这里因为资源有限,只用三台; showImg(h...

    JasinYip 评论0 收藏0
  • consul+docker实现服务注册

    摘要:同时注册中心也会检查注册的服务是否可用,不可用则剔除。服务消费者即在注册中心注册的服务,他们之间不再通过具体地址访问,而是通过服务名访问其他在册服务的资源。方法是在配置文件里加上信息,保证了,如果服务已停止,则从注册中心中移除。 近期新闻 css宣布支持三角函数ES10即将来临 基本架构 showImg(https://img-blog.csdnimg.cn/2019040811481...

    Scholer 评论0 收藏0
  • 如何使用DockerDocker-Compose和Rancher搭建部署Pipeline(四)

    摘要:注册器监视每个守护进程的事件,并在生命周期事件期间自动更新。条件可以包括亲和规则否定至软强制意味着尽可能地避免。当使用通用标记如或部署服务时,可能会出现意外的后果。月日,北京海航万豪酒店,容器技术大会即将举行。 在这篇文章中,我们将讨论如何用Rancher实现consul的服务发现。 如果你还没有准备好,推荐你阅读本系列中先前的文章:第一篇:CI /CD和Docker入门第二篇:使部署...

    13651657101 评论0 收藏0
  • 个推基于Docker和Kubernetes的微服务实践

    摘要:个推针对服务场景,基于和搭建了微服务框架,提高了开发效率。三容器化在微服务落地实践时我们选择了,下面将详细介绍个推基于的实践。 2016年伊始Docker无比兴盛,如今Kubernetes万人瞩目。在这个无比需要创新与速度的时代,由容器、微服务、DevOps构成的云原生席卷整个IT界。个推针对Web服务场景,基于OpenResty和Node.js搭建了微服务框架,提高了开发效率。在微服...

    yibinnn 评论0 收藏0

发表评论

0条评论

leo108

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<