docker服务的自动发现部署

发布时间:2024-11-14 06:36

环境准备

dockerdocker2docker3192.168.229.187192.168.229.40192.168.229.50

全部关闭防火墙和selinux,且主机名不能冲突。

一、consul服务的部署

1.docker上部署启动consul服务(压缩包传到docker上)

[root@docker ~]# unzip consul_1.5.1_linux_amd64.zip [root@docker ~]# mv consul /usr/local/bin/ [root@docker ~]# chmod +x /usr/local/bin/consul 123

启动consul

[root@docker ~]# consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.229.187 -client=0.0.0.0 -node=master 1

参数解释

-bootstrap:加入这个选项时,一般都在server单节点时用,自选举为leader; -ui:开启内部的web页面; -data-dir:key/volume数据存储位置; -bind:指定开启服务的IP; -client:指定访问的客户端; -node:指定集群内通信使用的名称(默认是主机名); 1234567891011

开启的端口

8300:集群节点; 8301:集群内部的访问; 8302:跨数据中心的通信; 8500:web ui界面; 8600:使用dns协议查看节点信息的端口; 123456789

这条命令会占用终端,可以使用nohup命令让它保持后台运行。

[root@docker ~]# nohup consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=192.168.229.187 -client=0.0.0.0 -node=master & 1

查看consul的信息

[root@docker ~]# consul info 1

查看consul集群内成员的信息

[root@docker ~]# consul members 1

2.把docker2、docker3加入consul集群(采用容器的方式运行consul服务)

[root@docker2 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.229.187 -advertise 192.168.229.40 -client 0.0.0.0 -node=node1 [root@docker3 ~]# docker run -d --name consul -p 8301:8301 -p 8301:8301/udp -p 8500:8500 -p 8600:8600 -p 8600:8600/udp --restart always progrium/consul:latest -join 192.168.229.187 -advertise 192.168.229.50 -client 0.0.0.0 -node=node2 12

浏览器访问consul服务,验证集群信息。

192.168.229.187:8500 1

3.在docker2、docker3上部署registrator服务
registrator是一个能自动发现docker container提供的服务,并在后端服务注册中心注册服务或取消服务的工具,后端注册中心支持conusl、etcd、skydns2、zookeeper等。

[root@docker2 ~]# docker run -d --name registrator -v /var/run/docker.sock:/tmp/docker.sock --restart always gliderlabs/registrator consul://192.168.229.40:8500 [root@docker3 ~]# docker run -d --name registrator -v /var/run/docker.sock:/tmp/docker.sock --restart always gliderlabs/registrator consul://192.168.229.50:8500 12

4.docker上部署一个nginx服务

[root@docker ~]# yum -y install gcc gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel [root@docker ~]# useradd -M -s /sbin/nologin nginx [root@docker ~]# tar -zxf nginx-1.14.0.tar.gz [root@docker ~]# cd nginx-1.14.0 [root@docker nginx-1.14.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_realip_module --with-pcre --with-http_ssl_module [root@docker nginx-1.14.0]# make && make install [root@docker nginx-1.14.0]# ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ [root@docker nginx-1.14.0]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@docker nginx-1.14.0]# nginx 1234567891011

注意:这里nginx作为反向代理,代理后端docker2、docker3上nginx的容器服务,所以先在docker2、docker3上部署一些服务,为了方便等会看到负载的效果,所以运行完成容器后,做一个主界面内容的区分。

docker2docker3web1 web2web3 web4

[root@docker2 ~]# docker run -itd --name web1 --restart always -p 80 nginx [root@docker2 ~]# docker exec -it web1 bash root@b75c7ab5544c:/# echo web11111111 > /usr/share/nginx/html/index.html [root@docker2 ~]# docker run -itd --name web2 --restart always -p 80 nginx [root@docker2 ~]# docker exec -it web2 bash root@b75c7ab5544c:/# echo web22222222 > /usr/share/nginx/html/index.html [root@docker3 ~]# docker run -itd --name web3 --restart always -p 80 nginx [root@docker2 ~]# docker exec -it web3 bash root@b75c7ab5544c:/# echo web33333333 > /usr/share/nginx/html/index.html [root@docker3 ~]# docker run -itd --name web4 --restart always -p 80 nginx [root@docker3 ~]# docker exec -it web4 bash root@b75c7ab5544c:/# echo web44444444 > /usr/share/nginx/html/index.html 123456789101112

更改nginx服务的配置文件

[root@docker nginx]# mkdir consul [root@docker nginx]# cd consul [root@docker consul]# pwd /usr/local/nginx/consul [root@docker consul]# vim nginx.ctmpl upstream http_backend { {{range service "nginx"}} server {{ .Address }}:{{ .Port }}; {{ end }} } server { listen 8000; server_name localhost; location / { proxy_pass http://http_backend; } } [root@docker consul]# cd ../conf [root@docker conf]# pwd /usr/local/nginx/conf [root@docker conf]# vim nginx.conf 文件最后添加: ... include /usr/local/nginx/consul/*.conf; } [root@docker conf]# nginx -t [root@docker conf]# nginx -s reload

12345678910111213141516171819202122232425262728

安装consul-template命令(压缩包传到docker上)

[root@docker ~]# unzip consul-template_0.19.5_linux_amd64.zip [root@docker ~]# mv consul-template /usr/local/bin/ [root@docker ~]# chmod +x /usr/local/bin/consul-template 123

使用consul-template命令,根据模板产生新的配置文件,并重新加载nginx的配置文件

[root@docker ~]# consul-template -consul-addr 192.168.229.187:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/sbin/nginx -s reload" 1

这条命令会占用终端,可以使用nohup命令让它保持后台运行

[root@docker ~]# nohup consul-template -consul-addr 192.168.229.187:8500 -template "/usr/local/nginx/consul/nginx.ctmpl:/usr/local/nginx/consul/vhost.conf:/usr/local/sbin/nginx -s reload" & 1

此时能够看到新产生的vhost.conf配置文件已经生效,访问本机8000端口可以得到不同容器提供的服务。

[root@docker consul]# pwd /usr/local/nginx/consul [root@docker consul]# cat vhost.conf [root@docker consul]# curl localhost:8000 1234

当然,这时不管后端是新添加nginx的web容器,或是删除,新产生的配置文件都会实时的更新,这是在运行consul-template这条命令最后添加:/usr/local/sbin/nginx -s reload的作用。
在这里插入图片描述

网址:docker服务的自动发现部署 https://www.yuejiaxmz.com/news/view/70235

相关内容

SpringBoot物品维修服务平台w48in程序+源码+数据库+调试部署+开发环境
Docker常用命令整理实例
Springboot宠物网站系统6v03x(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
修改已创建的docker容器的
22个2022年软件开发的趋势预测及其解读
jsp青少年运动健身网站xl68g(程序+源码+数据库+调试部署+开发环境)
中央文明办部署推动各地大力倡导文明健康环保生活方式PPT
软件开发知识:什么是软件开发?
基于微信小程序的智慧校园平台的设计与实现(源码+lw+部署文档+讲解等)
程序员必备的17个软件开发工具

随便看看