Consul是一个使用广泛的服务发现、kv存储的应用。
近期因工作需要,我搭建了一个简单的consul,在这里记录下过程。
consul官方提供了一个docker镜像,这里我直接使用它作为基础镜像
FROM consul:1.8.3
consul镜像中提供了 consul 的可执行文件,也内置了 /consul/data 等目录结构,不过这里我没有使用默认地址,改成了自定义的路径。
consul既可以作为server模式启动,也可以作为client模式启动。因为我这里只启动一个实例,所以选择的是server模式。
添加server.json
文件
{
"ui": true,
"server": true,
"dns_config": {
"allow_stale": false
}
}
ui
字段控制是否启用图形界面。Consul内置了一套UI,打开此选项即可以看到。
再添加一个agent.json
配置文件:
{
"client_addr": "0.0.0.0",
"data_dir": "/var/lib/consul",
"leave_on_terminate": true,
"dns_config": {
"allow_stale": true,
"max_stale": "1s"
}
}
这里我选择了 /var/lib/consul
作为数据存储目录,代替默认的/consul/data
。
然后,修改Dockerfile,应用这两个配置文件
FROM consul:1.8.4
RUN mkdir -p /etc/consul.d/
COPY agent.json /etc/consul.d/
COPY server.json /etc/consul.d/
这里我也没有使用默认的配置目录/consul/config
,换成了自定义目录/etc/consul.d
因为我对consul还不太熟悉,命令记不清楚,所以选择在Dockerfile中固定写好配置。
FROM consul:1.8.4
RUN mkdir -p /etc/consul.d/
COPY agent.json /etc/consul.d/
COPY server.json /etc/consul.d/
ENTRYPOINT ["consul", "agent", "-server", "-bootstrap", "-config-dir=/etc/consul.d/"]
这个entrypoint配置中,打开了 server 开关、bootstrap开关,同时设置了自定义配置目录。
这三步完成之后,就可以启动容器查看了。consul默认使用的 8500 端口提供UI服务,所以使用
docker build . -t myconsul
docker run -p 8500:8500 myconsul
之后,即可访问 localhost:8500/ui/ 访问到consul提供的UI页面。
consul的固定存储位置即为配置文件中的 data_dir
,默认是/consul/data
,我改成了/var/lib/consul
。
要使此存储固定下来,就需要用到Docker的volume。
这里我使用的是简单的文件系统映射:
docker build . -t myconsul
docker run -p 8500:8500 -v /data/consul:/var/lib/consul myconsul
即将本地的 /data/consul
映射到容器内的/var/lib/consul
目录。
安装完成之后,打开localhost:8500
,切换到KV
标签,添加一些数据。
然后本地安装consul
命令,如在macOS中可使用brew install consul
,然后使用如下的命令测试:
consul kv get --http-addr localhost /my-key
以上就是这次搭建Consul过程记录。