0

0

如何使用 Docker 配置 Consul KV

舞夢輝影

舞夢輝影

发布时间:2025-01-10 16:31:27

|

1163人浏览过

|

来源于digitalocean.com

转载

hashicorp 的 consul 是一款多功能工具,可在现代 devops 环境中提供多种功能。它广泛用于服务发现、运行状况检查、负载平衡,尤其是作为分布式键值 (kv) 存储。 consul 中的 kv 存储非常适合在整个基础设施中以高度可用、一致的方式存储动态配置数据、功能标志、秘密和元数据,以便分布式系统中的服务可以动态访问它们。使用 docker 配置 consul

如何使用 Docker 配置 Consul KV

本教程将引导您完成设置和开发的过程 使用 Docker 配置 Consul 的 KV 存储。到最后,你将拥有一个 在 Docker 中运行的功能齐全的 Consul 实例,带有 KV 对 已配置且可访问。此设置对于动态服务至关重要 分布式系统中的配置和状态管理。

第 1 步 - 拉取 Consul Docker 镜像

让我们从 Docker Hub 拉取官方 Consul 镜像。这张图片是 由 HashiCorp 维护,包含运行 Consul 所需的一切。

登录到 Ubuntu Droplet 的控制台并运行:

docker pull hashicorp/consul:latest
Outputlatest: Pulling from hashicorp/consul
c8bcd218a73d: Pull complete 
5f1ac8227c2a: Pull complete 
c51fd79d429a: Pull complete 
91eff479bde6: Pull complete 
4dfcc18e51db: Pull complete 
3e2a8bf39bf9: Pull complete 
bd9ddc54bea9: Pull complete 
2054d291fb84: Pull complete 
Digest: sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb
Status: Downloaded newer image for hashicorp/consul:latest
docker.io/hashicorp/consul:latest

步骤2 — 运行Consul容器

现在Consul镜像已经下载完毕,你可以启动一个新的Consul 容器。该容器将作为您的 Consul 服务器并且将 允许您与 KV 存储交互。

要启动容器,运行:

docker run -d --name=consul-server -e
OutputCONSUL_BIND_INTERFACE=eth0 -p 8500:8500 -p 8600:8600/udp hashicorp/consul
c893b6707686bce8434213975a75c936b834cf25fc84d10b407a11c4fa8ca8ba

这是此命令的作用:

  • -d 以分离模式(在后台)运行容器。
  • --name=consul-server 为容器分配名称。
  • -e CONSUL_BIND_INTERFACE=eth0 设置 Consul 应绑定到的网络接口。这是正确网络通信所必需的。
  • -p 8500:8500 将 Consul Web UI 和 API 端口映射到主机。
  • -p 8600:8600/udp 映射 DNS 服务端口 服务发现。

这一步至关重要,因为它设置了您将使用的核心 Consul 服务配置KV存储。

第3步 - 验证Consul安装

为了确保Consul正确运行,您需要验证容器状态并访问Consul UI。

首先,运行 docker ps 列出所有正在运行的容器并验证 Consul 容器是否为

❯ docker ps                                                                                                      CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
c893b6707686   hashicorp/consul   "docker-entrypoint.s…"   51 seconds ago   Up 50 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp   consul-server

现在,检查 Consul 是否可以访问,打开 Web 浏览器,然后导航到 http://localhost:8500. 您应该看到 Consul UI。

此验证步骤对于确认您的领事 在将数据存储到 KV 之前,实例运行没有任何问题 store(步骤 5)。

步骤 4 — 配置防火墙(可选)

如果您的 Consul 实例需要从外部访问(例如,从 集群中的其他节点),您必须调整防火墙设置以 允许必要端口上的流量。

例如,如果您在云实例上运行 Consul,您可以 需要允许端口 8500 (HTTP API) 和 8600 (DNS) 上的入站流量。 具体命令将根据您的防火墙解决方案(UFW、 iptables 等)。

此步骤确保您的 Consul 实例可以从其他实例访问 机器,这对于分布式配置至关重要。

第 5 步 — 存储键值对

Consul 运行后,您现在可以使用 KV 存储来存储 配置数据。您可以使用 Consul CLI 添加键值对或 Web UI。

要通过 CLI 存储键值对,运行:

docker exec -it consul-server consul kv put config/db_host 
192.168.1.100
Success! Data written to: config/db_host
docker exec -it consul-server consul kv put config/db_port 3306         Success! Data written to: config/db_port

这是此命令的作用:

  • -it - 从本地系统启动交互式终端到容器。
  • consul kv put - kv put 命令将数据写入给定路径 KV store.
  • config/db_host - 存储路径value.
  • 192.168.1.100 - Value.

使用 Web UI,

  1. 导航到 Consul UI (http://localhost:8500).
  2. 点击“键/值”选项卡。
  3. 单击“创建”创建一个新密钥。
  4. 输入密钥(例如 config/db_host)和值(例如 192.168.1.100)。

这些命令和操作存储您的服务可以动态访问的关键配置数据

第 6 步 — 检索键值对

存储了一些 KV 对后,您将需要检索它们以确保它们已正确存储。

使用 CLI,使用以下命令检索值命令:

易森网络企业版
易森网络企业版

如果您是新用户,请直接将本程序的所有文件上传在任一文件夹下,Rewrite 目录下放置了伪静态规则和筛选器,可将规则添加进IIS,即可正常使用,不用进行任何设置;(可修改图片等)默认的管理员用户名、密码和验证码都是:yeesen系统默认关闭,请上传后登陆后台点击“核心管理”里操作如下:进入“配置管理”中的&ld

下载
docker exec -it consul-server consul kv get config/db_host     
192.168.1.100

使用 Web UI,

  1. 转到到 Consul 中的“键/值”选项卡UI。
  2. 找到您创建的密钥并单击它以查看存储的值。

Web GUI

检索 KV 对是必要的步骤验证您的数据是否正确存储且可访问。

第 7 步 — 使用 Docker 持久保存数据卷

默认情况下,Docker 容器是短暂的,这意味着任何数据 如果容器被移除,存储在其中的信息将会丢失。坚持 您的 Consul KV 数据,您应该使用 Docker 卷。

  1. 停止并删除当前 Consul 容器:
docker stop consul-server 
docker rm consul-server

现在,检查容器,您应该注意到 Consul 容器不再运行。

docker ps CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2.运行新的 Consul具有 Docker 卷的容器附:

docker run -d --name=consul-server -e
OutputCONSUL_BIND_INTERFACE=eth0 -p 8500:8500 -p 8600:8600/udp -v consul_data:/consul/data hashicorp/consul
2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1
docker ps
OutputCONTAINER ID   IMAGE              COMMAND                  CREATED         STATUS         PORTS                                                                                    NAMES
2d2a7d3ff191   hashicorp/consul   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp   consul-server

-v consul_data:/consul/data 选项将 Docker 卷挂载到容器,确保您的 KV 存储在容器重新启动后仍然存在。

第 8 步 — 自动 Consul 启动(可选)

用于生产部署时,您可能希望自动启动 使用 Docker Compose 的 Consul 容器。 Docker Compose 简化了 多容器 Docker 应用程序并使其易于管理

创建一个包含以下内容的 docker-compose.yml 文件:

docker-compose,yml
services:
  consul:
    image: hashicorp/consul:latest    environment:
      - CONSUL_BIND_INTERFACE=eth0    volumes:
      - consul_data:/consul/data 
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    restart: alwaysvolumes:
  consul_data:

然后,运行:

docker-compose up -d
Output[ ] Running 2/2
 ✔ Network work_default     Created                                                                                                           0.0s 
 ✔ Container consul-server  Started                                                                                                           0.1s
docker ps
OutputWARN[0000] /Users/anandhkumar/work/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
NAME            IMAGE                     COMMAND                  SERVICE   CREATED          STATUS          PORTS
work-consul-1   hashicorp/consul:latest   "docker-entrypoint.s…"   consul    40 seconds ago   Up 11 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp

这个命令自动启动 Consul 并确保它在失败时重新启动,使其更适合生产使用。

第 9 步 - 清理

完成 Consul 实例的使用后,您应该清理你的 Docker 环境以释放资源。

让我们停止并删除 Consul容器:

docker stop consul-server   
docker rm consul-serverdocker ps
outputCONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

如果您已经完成了 Consul,您还可以删除 Docker图片:

docker rmi hashicorp/consul
outputhashicorp/consul@sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb
Deleted: sha256:eff8ccb509560987755a70df8d6c0b9410538d503d99498ae1ea9f48066b0439
Deleted: sha256:b5e6402bbb78eb061d538505a30300ef7f612104eaf0f11b17839a9b29bc5603
Deleted: sha256:1c61ada2ad8074615120d13bd805260d766ae8424cafbda4bded529d6a204d6f
Deleted: sha256:9b36da670e2a59f1d81c6e3c9d55906c576b384df51272977e5a9caea7131e74
Deleted: sha256:8c6e52c441c246f60ca146b71204b7d6511df75fa87a0dc0a0f91141964e8fd9
Deleted: sha256:1fce18208235de2be3c419764ec1d469229af5387447d21649c841632c653cef
Deleted: sha256:68e0a114c9c35b9aa8cac31fa32b27f886361bc85fcc63f34e882e9128f33a14
Deleted: sha256:3da5b888208a9b19694bfeaf8c74a432b50f44542d717c9e1f3ab273e505855a
Deleted: sha256:dea73e9287e6e2f3b7f9fcac4f20767d7badeefa24e52f990f1674e98abfa1a3
Deleted: sha256:201fa22d1f4c7d6e7ec43135c63b2260f303f4864f5eb43569faaa1731628799

清洁up 有助于维护整洁的开发环境,并确保 Docker 资源不会被不必要地消耗。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

403

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

249

2023.10.07

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1801

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

593

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2341

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

45

2026.01.19

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

280

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

515

2024.04.08

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 2万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 18万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号