Docker-----compose搭建consul集群解析

文章目录

    • 前言
    • 一、Docker Compose简介
    • 二、Docker compose配置信息
      • 2.1、Docker compose 配置常用字段
      • 2.2、Dokcer compose 常用命令
      • 2.3、Docker compose 命令参数详解
    • 三、Dokcer 编排实验
      • 3.1、下载compose
      • 3.2、构建Nginx
    • 四、Consul 容器自动更新与发现
      • 4.1、Consul简介
      • 4.2、Consul中的基本概念
      • 4.3、Consul 原理概述
      • 4.4、Consul 核心 agent组件
      • 4.5、Consul 通信接口
      • 4.6、Consul 去中心化思想
      • 4.7、搭建Consul集群实验
        • 4.7.1、配置 consul服务器
        • 7.4.2、后端服务器配置
      • 4.8、实现容器服务自动加入Nginx集群
        • 4.8.1、Consul-template简介
        • 4.8.2、配置过程
        • 4.8.3、准备 Template nginx模板文件
        • 4.8.4、手工编译安装nginx服务
        • 4.8.5、 配置、启动Template
    • 总结

前言

一个大型的Docker组成的微服务应用中,容器的数量是非常庞大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦。Compose的出现正是为了解决这个问题。

一、Docker Compose简介

  • Docker Compose的前身是Fig,Fig被Docker收购之后正式更名为Compose,Compose向下兼容Fig
  • Docker Compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器,而不再需要使用shell脚本来启动容器
  • Docker Compose 非常适合组合使用多个容器进行开发的场景
  • Docker Compose 的文件结构
  • vim docker-compose.yml

YAML 是一种标记语言很直观的数据序列化格式。 文件格式及编写注意事项如下所示:

  • ① 不支持制表符Tab 建缩进,需要使用空格缩进

  • ② 通常开头缩进2个空格

  • ③ 字符后缩进1个空格,如:冒号,逗号,横杆

  • ④ 用#号注释

  • ⑤ 如果包含特殊字符用单引号引起来

  • ⑥ 布尔值必须用单引号括起来

Docker compose 使用的三个步骤:

  • ① 使用Dokcerfile 定义应用程序的环境

  • ② 使用docker-compose.yml 定义构成应用程序的服务,这样它们就可以再隔离环境中一起运行

  • ③ 最后执行 docker-compose up 命令来启动并运行整个应用程序

二、Docker compose配置信息

2.1、Docker compose 配置常用字段

字段 描述
build dockerfile context 指定Dockerfile文件名构建镜像上下文路径
image 指定镜像
command 执行命令,覆盖默认命令
container name 指定容器名称,由于容器名称是唯一的, 如果指定自定义名称,则无法scale(建立副本)
deploy 指定部署和运行服务相关配置,只能在Swarm模式使用
environment 添加环境变量
networks 加入网络 (名称空间)
ports 暴露容器端口,与-p相同,但端口不能低于60
volumes 挂载宿主机路径或命令卷(数据卷)
restart 重启策略,默认no, always, no-failure,unless-stoped
hostname 容器主机名

2.2、Dokcer compose 常用命令

字段 描述
build 重新构建服务
ps 列出容器
up 创建和启动容器
exec 在容器里面执行命令
scale 指定一个服务容器启动数量
top 显示容器进程
logs 查看容器输出
down 删除容器、网络、数据卷和镜像
stop/start/restart 停止/启动/重启服务

2.3、Docker compose 命令参数详解

docker-compose 选项

  • –verbose 输出更多调试信息
  • –version 打印版本并退出
  • -f,–file FILE 使用特定的compose 模板文件,默认位docker-compose.yml
  • -p,–project-name NAME 指定项目名称,默认使用目录名称

三、Dokcer 编排实验

3.1、下载compose

注:下载时间较长(文件可能会下载不完整)

[root@server1 ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   633  100   633    0     0    141      0  0:00:04  0:00:04 --:--:--   141
 57 10.3M   57 6056k    0     0   8301      0  0:21:49  0:12:27  0:09:22 14003

[root@server1 ~]# cd /usr/local/bin/
[root@server1 bin]# ll
总用量 10616
-rw-r--r--. 1 root root 6202113 310 22:41 docker-compose

权限设置

[root@server1 bin]# docker-compose --version
-bash: /usr/local/bin/docker-compose: 权限不够

[root@server1 bin]# chmod 755 docker-compose

[root@server1 bin]# docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3

3.2、构建Nginx

  • 文件总览
[root@server1 ~]# yum -y install tree
[root@server1 ~]# cd compose_nginx/
[root@server1 compose_nginx]# tree .
.
├── docker-compose.yaml
├── nginx
│   ├── Dockerfile
│   ├── nginx-1.12.2.tar.gz
│   └── run.sh
└── wwwroot
    └── index.html

1、创建工作目录,将nginx软件包拷贝到该目录

[root@server1 ~]# mkdir compose_nginx
[root@server1 ~]# cd compose_nginx/

[root@server1 compose_nginx]# mkdir nginx
[root@server1 compose_nginx]# cd nginx/
[root@server1 nginx]# ll
总用量 960
-rw-r--r--. 1 root root 981687 818 2018 nginx-1.12.2.tar.gz

2、编写启动脚本

[root@server1 nginx]# vi run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx

3、编写Dockerfile

[root@server1 nginx]# vi Dockerfile
FROM centos:7
MAINTAINER this is nginx image
RUN yum -y update
RUN yum -y install gcc gcc-c++ pcre-devel zlib-devel make
RUN useradd -M -s /sbin/nologin nginx
ADD nginx-1.12.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/nginx-1.12.2
RUN ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80
EXPOSE 443
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
ADD run.sh /run.sh
RUN chmod 755 /run.sh
CMD ["/run.sh"]

4、编写nginx首页

[root@server1 ~]# cd compose_nginx/

[root@server1 compose_nginx]# mkdir wwwroot

[root@server1 compose_nginx]# cd wwwroot/

[root@server1 wwwroot]# vi index.html
<h1>this is my web</h1>

5、编写yml文件

[root@server1 compose_nginx]# vi Docker-compose.yml
version: '3'
services:
  nginx:
    hostname: nginx
    build:
      context: ./nginx
      dockerfile: Dockerfile
    ports:
      - 1216:80
      - 1217:443
    networks:
      - cluster
    volumes:
      - ./wwwroot:/usr/local/nginx/html
networks:
  cluster:

6、构建镜像

[root@server1 compose_nginx]# docker-compose -f docker-compose.yaml up -d

[root@server1 compose_nginx]# docker ps -a
CONTAINER ID   IMAGE                 COMMAND     CREATED              STATUS              PORTS                                         NAMES
9d5155345126   compose_nginx_nginx   "/run.sh"   About a minute ago   Up About a minute   0.0.0.0:1216->80/tcp, 0.0.0.0:1217->443/tcp   compose_nginx_nginx_1

7、访问20.0.0.11:1216

Docker-----compose搭建consul集群解析_第1张图片
注:下载 / 构建镜像时可以使用镜像加速

[root@server1 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
 "registry-mirrors": ["https://b3vpj4z0.mirror.aliyuncs.com"]
}
EOF

四、Consul 容器自动更新与发现

4.1、Consul简介

Consul是一个分布式、高可用的系统,是一个为了解决在生产环境中服务注册,服务发现,服务配置的一个工具,它有多个组件,提供如下几个关键功能

  • ① 服务发现
    Consul的某些客户端可以提供一个服务,例如api或者mysql,其它客户端可以使用Consul去发现这个服务的提供者。使用DNS或者HTTP,应用可以很容易的找到他们所依赖的服务。
  • ② 健康检查
    Consul客户端可以提供一些健康检查,这些健康检查可以关联到一个指定的服务(服务是否返回200 OK),也可以关联到本地节点(内存使用率是否在90%以下)。这些信息可以被一个操作员用来监控集群的健康状态,被服务发现组件路由时用来远离不健康的主机。
  • ③ 键值存储
    应用可以使用Consul提供的分层键值存储用于一些目的,包括动态配置、特征标记、协作、leader选举等等。通过一个简单的HTTP
    API可以很容易的使用这个组件。
  • ④ 多数据中心
    Consul队多数据中心有着非常好的支持,这意味着Consul用户不用担心由于创建更多抽象层而产生多个区域。

特点

  • 支持健康检查,允许存储键值对
  • 一致性协议采用Raft算法,用来保证服务高可用
  • 成员管理和消息广播采用GOSSIP协议,支持ACL访问控制
  • 方便部署,与Docker等轻量级容器可无缝配合

Consul 作用

  • 现在企业应用都向微服务化方向发展,当把我们的系统功能拆分成一个一个的微服务后,存在以下问题
    • ① 需要配置N个服务的网络位置,加大配置的复杂性
    • ② 服务的网络位置变化,都需要改变每个调用者的配置
    • ③ 集群的情况下,除了反向代理方式,难以做负载

4.2、Consul中的基本概念

① Client

  • 表示 Consul 客户端模式,是 Consul 节点的一种模式,所有注册到 Client 节点的服务会被转发到 Server
    。本身无状态不持久化如何数据。Client 通过 HTTP、DNS、GRPC 接口请求转发给局域网内的服务端集群。

② Server

  • 表示 Consul 的服务端模式, Server 功能和 Client 都一样,不同的是 Server 持久化数据到本地。在局域网内与本地 Client 通讯,通过广域网与其他数据中心通讯。每个数据中心的 Server 数量推荐为 3 个或是 5 个。

③ Server-leader

  • 表示这个 Server 是它们的老大,它和其它 Server 不一样的一点是,它需要负责同步注册的信息给其它的 Server 节点,同时也要负责各个节点的健康监测。如果 Leader 宕机了,通数据中心的所有 Server 内部会使用 Raft 算法来在其中选取一个 Leader 出来。

④ Agent

  • Agent 是 Consul 的核心进程,Agent 的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul 集群的每一个节点都必须运行 agent 进程

server 与 client 只是 consul 群集层面的区分,与搭建在 cluster 之上的应用服务无关。

4.3、Consul 原理概述

在分布式系统结构中,往往由成百上千的业务服务组成,为了容灾(节点宕机)、扩容(增加节点)、提高运维效率(动态配置)等原因,需要服务能够实现灵活发现,避免问题节点等功能,以提高系统稳定性

① 服务发现及注册

  • 当服务Producer 启动时,会将自己的Ip/host等信息通过发送请求告知 Consul,Consul 接收到 Producer
    的注册信息后,每隔一段时间会向 Producer 发送一个健康检查的请求,检验Producer是否健康。

② 服务调用

  • 当 Consumer 请求Product时,会先从 Consul 中拿到存储Product服务的 IP 和 Port 的临时表(temp
    table),从temp table表中任选一个· Producer 的 IP 和 Port,然后根据这个IP和Port,发送访问请求;temp table表只包含通过了健康检查的 Producer 信息,并且每隔一段时间更新

4.4、Consul 核心 agent组件

Agent是一个独立的程序,通过守护进程的方式,运行在consul集群中的每个节点上。每个Consul agent维护它自己的服务集合以及检查注册和健康信息。agent负责执行自己的健康检查和更新本地状态其中,Agent 根据节点的性质,分为:

①Agent Server

  • client将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。

②Agent Client

  • server 保存client的注册信息,集群的配置信息, 维护集群高可用, 在局域网内与本地客户端通讯, 通过广域网与其它数据中心通讯。 每个数据中心的 server 数量推荐为 3 个或是 5 个,通过 Raft 算法来保证一致性。

4.5、Consul 通信接口

① RPC

  • 用于内部通讯Gossip/日志分发/选主等

② HTTP API

  • 服务发现/健康检查/KV存储等几乎所有功能, 默认端口为8500

③ Consul Commands (CLI)

  • consul命令行工具可以与consul agent进行连接,提供部分consul的功能。

  • 实际上Consul CLI 默认就是调用的HTTP API来与consul集群进行通讯。

④ DNS

  • 仅用于服务查询,例如:dog @127.0.0.1 -p 8600 web.service.consul

  • 可以通过cosul提供的DNS接口来获取当前的服务“web”对应的可用节点

Consul 内部端口说明

端口 说明
TCP/8300 8300端口用于服务器节点,客户端通过该端口RPC协议调用服务端节点
TCP/UDP/8301 8301端口用于单个数据中心所有节点之间相互通信,即对LAN池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如leader选举事件)
TCP/UDP/8302 8302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对WAN池信息的同步。它针对互联网的高延迟进行优化,能够实现跨数据中心请求
8500 8500端口基于HTTP协议,用于API接口或WEB UI访问
8600 8600端口作为DNS服务器,它使得我们可以通过节点名查询节点信息

4.6、Consul 去中心化思想

1、consul 使用了基于gossip协议的Serf实现,Serf是一个服务发现,编配工具,它去中心化,不像集中式结构那样统一分配管理; Serf提供成员关系,纠错检查,广播等功能。gossip协议主要是基于UDP,实现任意node-to-node间的通信。Consul正是使用serf 提供的gossip协议来管理成员和广播消息到集群。

2、gossip 协议(gossip protocol)是基于流行病传播方式的节点或者进程之间信息交换的协议,来确保网络中所有节点的数据一样。其中节点间的交互方式主要以下有三种:

① Push

  • 发起信息的节点 A 随机选择联系节点 B,并向B发送自己的信息,节点 B 在收到信息后,更新比自己新的数据,一般拥有新信息的节点才会作为发起节点。

② Pull

  • 发起信息的节点 A 随机选择联系节点 B,并从对方获取信息。一般无新信息的节点才会作为发起节点。

③ Push&Pull

  • 发起信息的节点 A 向选择的节点 B 发送信息,同时从对方获取数据,用于更新自己的本地数据。

4.7、搭建Consul集群实验

实验环境

    • 第一台centos 7 IP地址:20.0.0.11
    • 需求的软件包:Docker-ce、Compose 3 、Consul、Consul-template
    • 第二台centos 7 IP地址:20.0.0.12
    • 需求的软件包:Docker-ce 、registrator

实验拓扑图

Docker-----compose搭建consul集群解析_第2张图片

4.7.1、配置 consul服务器

①安装consul软件包

  • 20.0.0.11操作
  • 这里已经使用宿主机下载好,直接共享过来使用
[root@server1 ~]# mkdir consul
[root@server1 ~]# cd consul/
[root@server1 consul]# ll
总用量 9996
-rw-r--r--. 1 root root 10233177 314 2021 consul_0.9.2_linux_amd64.zip

[root@server1 consul]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul  

[root@server1 consul]# ls
consul  consul_0.9.2_linux_amd64.zip

[root@server1 consul]# mv consul /usr/bin/      

②建立Consul 服务

[root@server1 consul]# consul agent \
> -server \
> -bootstrap \
> -ui \
> -data-dir=/var/lib/consu-data \
> -bind=20.0.0.11 \
> -client=0.0.0.0 \
> -node=consul-server01 &> /var/log/consu.log &
[1] 63029

[root@server1 consul]# jobs
[1]+  运行中               consul agent -server -bootstrap -ui -data-dir=/var/lib/consu-data -bind=20.0.0.11 -client=0.0.0.0 -node=consul-server01 &>/var/log/consu.log &

③查看集群信息

[root@server1 consul]# consul members
Node             Address         Status  Type    Build  Protocol  DC
consul-server01  20.0.0.11:8301  alive   server  0.9.2  2         dc1

[root@server1 consul]# consul info | grep leader
 leader = true
 leader_addr = 20.0.0.11:8300

④通过http api 可以获取到集群信息

# 查看群集server成员
[root@server1 consul]# curl 127.0.0.1:8500/v1/status/peers

# 群集中 Raf leader
[root@server1 consul]# curl 127.0.0.1:8500/v1/status/leaders

# 注册的所有服务
[root@server1 consul]# curl 127.0.0.1:8500/v1/catalog/services  

# 群集节点详细信息
[root@server1 consul]# curl 127.0.0.1:8500/v1/catalog/nodes 

# 查看nginx 服务信息
[root@server1 consul]# curl 127.0.0.1:8500/v1/catalog/nginx 
7.4.2、后端服务器配置

①让容器服务自动加入nginx集群

  • 20.0.0.12操作
[root@server2 ~]# docker run -d \
> --name=registrator \                          # 下载registrator容器
> --net=host \                                  # 使用host网络
> -v /var/run/docker.sock:/tmp/docker.sock \    # 数据卷挂载(使用的是系统默认的)
> --restart=always \                            # 重启策略(遇到问题会重启)
> gliderlabs/registrator:latest \               # 下载的仓库名称/镜像名称
> -ip=20.0.0.12 \                               # 指向本地服务器IP地址
> consul://20.0.0.11:8500                       # 指向注册中心的地址

②查看镜像和容器列表

[root@server2 ~]# docker images
REPOSITORY               TAG       IMAGE ID       CREATED       SIZE
gliderlabs/registrator   latest    3b59190c6c80   4 years ago   23.8MB

[root@server2 ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS     NAMES
9ccbbc413d79   gliderlabs/registrator:latest   "/bin/registrator -i…"   17 seconds ago   Up 16 seconds             registrator

③创建两个nginx容器测试

[root@server2 ~]# docker run -itd -p:83:80 --name test-01 -h test01 nginx
[root@server2 ~]# docker run -itd -p:84:80 --name test-02 -h test02 nginx

[root@server2 ~]# docker ps -a
CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS          PORTS                NAMES
8e8d8318414d   nginx                           "/docker-entrypoint.…"   28 seconds ago   Up 27 seconds   0.0.0.0:84->80/tcp   test-02
52e27f93a52d   nginx                           "/docker-entrypoint.…"   41 seconds ago   Up 40 seconds   0.0.0.0:83->80/tcp   test-01

④使用浏览器20.0.0.11:8500
Docker-----compose搭建consul集群解析_第3张图片

  • 再次创建测试
[root@server2 ~]# docker run -itd -p:88:80 --name test-03 -h test03 httpd
[root@server2 ~]# docker run -itd -p:89:80 --name test-04 -h test04 httpd

Docker-----compose搭建consul集群解析_第4张图片
以上可见nginx与httpd服务已注册到consul

4.8、实现容器服务自动加入Nginx集群

4.8.1、Consul-template简介

1、Consul-Template 是一个守护进程,用户实时查询Consul集群信息,并更新文件系统上任意数量的指定模板,生成配置文件。更新完成后,可以选择运行shell命令执行更新操作,重新加载Nginx

2、特点

  • consul-template是基于Consul的自动替换配置文件的应用
  • 可以查询Consul中的服务目录,key、key-values
  • 其强大的抽象功能和查询语言模板使得Consul-Template特别适合动态的创建配置文件,
    例如:Nginx/Apache Proxy Balancers、Haproxy Backends
4.8.2、配置过程

思路(以nginx为例)

  • ① 定义template nginx.ctmpl 模板(如果需要实现动态变化,则在此模板中的参数需要定义为变量—以双大括号括起来的参数)此配置文件仅与consul有关(consul使用此配置文件模板生成nignx的主配置文件)
  • ② 配置nginx(修改文件,添加配置文件的路径)
  • ③ 启动template(自动生成/更新配置文件供与nginx使用)

实验环境

  • 继承之前的服务环境继续进行配置
4.8.3、准备 Template nginx模板文件
  • 在consul服务器的consul目录中添加nginx模板
[root@server1 ~]# cd consul/
[root@server1 consul]# vi nginx.ctmpl
upstream http_backend {                                 #群集模块模板
    {{range service "nginx"}}                           #指定nginx服务项
     server {{.Address}}:{{.Port}};                     #指向真实服务器的地址和端口“{{.Address}}” 此参数会根据consul群集的参数自动设置上去
     {{end}}                                            #结束语句(以上为轮询请求方式)
}

server {
       listen 85;                                       #对外提供的端口,可自行设置,只要不起冲突
       server_name localhost 20.0.0.11;                 #本地反向代理的节点地址
       access_log /var/log/nginx/kgc.cn-access.log;     #访问日志文件目录(需手动创建)
       index index.html index.php;                      #指定访问的index 首页类型
       location / {
          proxy_set_header HOST $host;                  #反向代理的请求头部信息
          proxy_set_header X-Real-IP $remote_addr;      #真实服务器IP
          proxy_set_header Client-IP $remote_addr;      #客户IP
          proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for;  #Forward转发地址
          proxy_pass http://http_backend;               #反向代理指向upstream地址池
                 }
       }
4.8.4、手工编译安装nginx服务
[root@server1 consul]#  yum -y install gcc gcc-c++ pcre-devel zlib-devel

[root@server1 consul]# tar zxvf nginx-1.12.2.tar.gz 

[root@server1 consul]# cd nginx-1.12.2/
[root@server1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.12.2]# make && make install
  • 修改nginx配置文件
[root@server1 ~]# cd /usr/local/nginx/conf/
[root@server1 conf]# vi nginx.conf

http {
   include       mime.types;
   include       vhost/*.conf;   # 添加   19 
  • 创建vhost文件目录
[root@server1 ~]# mkdir /usr/local/nginx/conf/vhost
  • 创建nginx访问日志目录
[root@server1 ~]# mkdir /var/log/nginx
  • 启动nginx
[root@server1 ~]# /usr/local/nginx/sbin/nginx
4.8.5、 配置、启动Template

1、上传 consul-template_0.19.3_linux_amd64.zip 包到/root 目录下
在这里插入图片描述
2、解压

[root@server1 ~]# unzip consul-template_0.19.3_linux_amd64.zip 
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: consul-template       

[root@server1 ~]# mv consul-template /usr/bin/

3、启动template

[root@server1 ~]# consul-template -consul-addr 20.0.0.11:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/test.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
2021/03/10 18:25:15.690480 [INFO] consul-template v0.19.3 (ebf2d3d)
2021/03/10 18:25:15.690511 [INFO] (runner) creating new runner (dry: false, once: false)
2021/03/10 18:25:15.691117 [INFO] (runner) creating watcher
2021/03/10 18:25:15.691512 [INFO] (runner) starting
2021/03/10 18:25:15.691537 [INFO] (runner) initiating run
2021/03/10 18:25:15.695918 [INFO] (runner) initiating run

#template开启后会进入实时监控状态,监控后端容器的变化,如果有增减,则会直接从consul中拉取参数,然后更新配置文件

参数详解

  • -consul-addr 192.168.226.132:8500:指向consul服务端节点
  • -template "/root/consul/nginx.ctmpl:指定模板路径
  • :/usr/local/nginx/conf/vhost/test.conf:指定文件生成到vhost中并命名为test.conf
  • :/usr/local/nginx/sbin/nginx -s reload:不中断服务reload重载nginx服务让配置文件生效
  • –log-level=info:产生日志,级别为info(日志生成位置在nginx.ctml中定义“access_log”)

4、 测试

  • 另起一个终端,进行之后的测试

    ① 查看nginx的/vhost文件中是否生成test.conf配置文件

[root@server1 ~]# cd /usr/local/nginx/conf/vhost/
[root@server1 vhost]# ls
test.conf
  • ② 查看test.conf配置文件中的地址池信息(是否已自动更新添加)
[root@server1 vhost]# vi test.conf 
upstream http_backend {                                                                 
     server 20.0.0.12:83;                                               
     server 20.0.0.12:84;
}

server {
       listen 85;                                    
       server_name localhost 20.0.0.11;                
       access_log /var/log/nginx/kgc.cn-access.log;     
       index index.html index.php;                    
       location / {
          proxy_set_header HOST $host;                 
          proxy_set_header X-Real-IP $remote_addr;  
          proxy_set_header Client-IP $remote_addr;     
          proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for; 
          proxy_pass http://http_backend;               
                 }
       }
  • ③ 在后端服务器中再次添加一个容器,查看vhost中配置文件是否会自动发现/更新
  • 20.0.0.12
[root@server2 ~]# docker run -itd -p:90:80 --name test-05 -h test05 nginx
  • 查看test.conf中的服务信息
  • 20.0.0.11
[root@server1 vhost]# cat test.conf 
upstream http_backend {     
     server 20.0.0.12:83;  
     server 20.0.0.12:84;  
     server 20.0.0.12:90;         # 已经更新
}

server {
       listen 85;     
       server_name localhost 20.0.0.11;  
       access_log /var/log/nginx/kgc.cn-access.log; 
       index index.html index.php;   
       location / {
          proxy_set_header HOST $host;   
          proxy_set_header X-Real-IP $remote_addr; 
          proxy_set_header Client-IP $remote_addr;  
          proxy_set_header X-Fprwarded-For $proxy_add_x_forwarded_for; 
          proxy_pass http://http_backend;
                 }
       }

总结

  • 介绍了Docker Compose 简单的容器编排思路与实操,重心在于consul-template 的编写,服务器节点指向的对象、参数变量的设置
  • consul server定义,读取前端的配置模板后端的客户端部署registrator去监听本地集群是否出现扩展,如果出现扩展容器,会报告给consul server端,由consul agent代理去指定更新(前端的反向代理池)到模板文件中并同步到前端,保证前端对后端的动态识别。

你可能感兴趣的:(Docker,docker)