前言 拉取 Consul 镜像 1 2 3 4 5 # docker pull consul:latest# docker pull consul:1.7.3
Docker 安装 Consul 单机 Docker 安装 创建并启动容器,默认是以开发模式启动,数据保存在内存中 1 # docker run -d --name =consul -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.7.3
若需要持久化 Consul 的数据,则需要挂载数据卷和指定数据目录,并以服务器模式启动 1 $ docker run -d --name =consul -p 8500:8500 -v /path/on/host:/consul/data -e CONSUL_BIND_INTERFACE=eth0 consul:1.7.3 agent -server -bootstrap -expect=1 -data -dir=/consul/data -client =0.0.0.0 -ui
Docker Compose 安装 Docker Compose 可以使用以下配置内容创建并启动容器,默认是以开发模式启动,数据保存在内存中 1 2 3 4 5 6 7 8 9 10 11 version: '3.5' services: consul: image: consul:1.7.3 container_name: consul restart: always ports: - "8500:8500" environment: CONSUL_BIND_INTERFACE: eth0
若需要持久化 Consul 的数据,则需要挂载数据卷和指定数据目录,并以服务器模式启动 1 2 3 4 5 6 7 8 9 10 11 12 13 14 version: '3.5' services: consul: image: consul:1.7.3 container_name: consul restart: always ports: - "8500:8500" environment: CONSUL_BIND_INTERFACE: eth0 command: agent -server -bootstrap-expect=1 -data-dir=/consul/data -client=0.0.0.0 -ui volumes: - '/path/on/host:/consul/data'
访问 Consul 的管理界面
Consul 默认会以开发模式启动,数据保存在内存中,重启后会丢失数据,而且默认会启用 Web UI。在开发模式下,可以直接通过 8500
端口访问 Consul 的 UI 管理界面。
Docker 安装 Consul 集群 开发模式下的集群 这里将演示在开发模式下,如何创建拥有 3 个节点的 Consul 集群,数据默认保存在内存中。这对于开发阶段很有用,但不应该在生产中使用。值得一提的是,在开发模式下可以直接通过 8500
端口访问 Consul 的 UI 管理界面。
Docker 安装 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 # docker run -d --name =consul-node1 -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.7.3# docker inspect -f ='{{.NetworkSettings.IPAddress}}' consul-node1# docker run -d --name =consul-node2 -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.7.3 agent -dev -join =172.17.0.3# docker run -d --name =consul-node3 -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul:1.7.3 agent -dev -join =172.17.0.3# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1ac5832f79f4 consul:1.7.3 "docker-entrypoint.s…" 31 seconds ago Up 30 seconds 8300-8302/tcp, 8500-8500/tcp, 8301-8302/udp, 8600/tcp, 8600/udp consul-node3 533b0f12877a consul:1.7.3 "docker-entrypoint.s…" 56 seconds ago Up 55 seconds 8300-8302/tcp, 8500-8500/tcp, 8301-8302/udp, 8600/tcp, 8600/udp consul-node2 d25f90dffa94 consul:1.7.3 "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 8300-8302/tcp, 8500-8500/tcp, 8301-8302/udp, 8600/tcp, 8600/udp consul-node1 # docker exec -t consul-node1 consul membersNode Address Status Type Build Protocol DC Segment 1ac5832f79f4 172.17.0.5:8301 alive server 1.7.3 2 dc1 <all> 533b0f12877a 172.17.0.4:8301 alive server 1.7.3 2 dc1 <all> d25f90dffa94 172.17.0.3:8301 alive server 1.7.3 2 dc1 <all>
Consul 容器进阶使用 在 Consul 容器内,有两个核心目录,分别是:
/consul/data
:Consul 容器内部存放数据的目录/consul/config
:Consul 容器内部存放配置文件的目录数据持久化 在开发模式下启动 Consul 容器,数据默认保存在内存中,容器重启后数据会丢失。若想使用 Docker 的数据卷来持久化容器内的数据,则需要使用服务器模式启动 Consul,并通过启动参数 -data-dir
来指定 Consul 的数据目录。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 version: '3.5' services: consul: image: consul:1.7.3 container_name: consul restart: always ports: - "8500:8500" environment: CONSUL_BIND_INTERFACE: eth0 command: agent -server -bootstrap-expect=1 -data-dir=/consul/data -client=0.0.0.0 -ui volumes: - '/path/on/host:/consul/data'
配置信息说明:
/path/on/host
:在宿主机内部存放数据的目录/consul/data
:在 Consul 容器内部存放数据的目录指定配置文件 可以通过启动参数 -config-dir
来指定 Consul 的配置文件。首先,在宿主机内创建 Consul 的配置文件,比如 consul.hcl
,其配置内容如下所示:
1 2 3 log_level = "INFO" bind_addr = "0.0.0.0" server_rejoin_age_max = "168h"
然后在 docker-compose.yml
文件中,将宿主机上的 Consul 配置文件挂载到容器中的合适路径,通常是 /consul/config
目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 version: '3.5' services: consul: image: consul:1.7.3 container_name: consul restart: always ports: - "8500:8500" environment: CONSUL_BIND_INTERFACE: eth0 command: agent -server -bootstrap-expect=1 -config-dir=/consul/config -client=0.0.0.0 -ui volumes: - '/path/on/host:/consul/config
配置信息说明:
/path/on/host
:在宿主机内部存放配置文件的目录/consul/config
:在 Consul 容器内部存放配置文件的目录Consul 的常用启动参数 参数 使用示例 描述 -dev
以开发模式启动 Consul。在开发模式下,Consul 会自动配置为一个单节点服务器,不需要进行集群的配置,而且不会持久化数据到磁盘,但默认会启用 Web UI。所有的操作都是在本地进行的,不涉及到其他节点。 -server
启动一个 Consul 服务器节点。服务器节点负责处理集群状态、选举领导者、存储服务目录等。 -ui
启用 Consul 的内置 Web UI 界面。启用后,可以通过浏览器访问 Consul 的图形用户界面,查看服务、KV 存储等内容。 -bind
-bind=127.0.0.1
指定 Consul 绑定的 IP 地址,这个地址通常是 Consul 用来与其他节点通信的地址。比如绑定了 127.0.0.1
,表示 Consul 只能与本机上的其他应用程序通信。 -client
-client=0.0.0.0
指定 Consul 客户端的监听地址,0.0.0.0
是一个通配符地址,表示接受所有网络接口的客户端连接。 -data-dir
-data-dir=/opt/consul/data/
指定 Consul 的数据存储目录,所有的持久化数据(如服务注册信息、KV 数据等)将存储在该目录下。 -config-dir
-config-dir=/opt/consul/config/
指定一个目录,该目录中包含配置文件,Consul 在启动时会加载这些配置文件。 -node
-node=node1
指定节点的名称,默认为主机名。如果在同一网络中有多个节点运行,最好为每个节点指定唯一的名称。 -datacenter
-datacenter=dc1
指定数据中心的名称,默认为 dc1
。适用于在多个数据中心部署 Consul 的场景。 -bootstrap-expect
-bootstrap-expect 1
指定预期启动的服务器数量,这个值通常用于集群的初始化。设置为 1 表示这是一个单节点集群,只需一个服务器节点启动即可。 -join
-join=192.168.0.3
指定要加入的现有集群节点的地址。启动时 Consul 会自动加入这个地址的节点所在的集群。 -advertise
-advertise=192.168.0.4
指定 Consul 对其他节点通告的 IP 地址。通常用于 NAT 环境中,内网和外网 IP 不一致的情况。 -encrypt
-encrypt=xxxxx
设置用于加密集群中节点之间通信的密钥(Gossip 协议)。 log-level
-log-level=DEBUG
设置日志的级别。常用级别包括 INFO、DEBUG、WARN、ERR 等。
1 consul agent -dev -client=0.0.0.0
1 consul agent -server -bootstrap-expect=3 -data-dir=/opt/consul/data -node=server1 -bind =192.168.1.100 -client=0.0.0.0 -ui
参考资料