如何使用Docker配置Consul KV

引言

HashiCorp 的 Consul 是一款多功能的工具,在現代 DevOps 環境中担负著多種任務。它廣泛用於服務發現、健康檢查、負載平衡,尤其是作為分佈式鍵值(KV)存放庫。Consul 中的 KV 存放庫非常适合存放動態配置數據、功能旗帜、秘密和元數據,以高可用性和一致性方式跨基礎設施存取,使服務能在分佈式系統中動態存取。使用 Docker 配置 Consul 的 KV 存放庫可以快速設置和建立獨立環境,使其成為測試和開發的理想選擇。

本教程將带你了解如何使用 Docker 設定和配置 Consul 的 KV 存放庫。到最後,你將有一個完全功能的 Consul 實例在 Docker 中運行,並已配置好 KV 對,可供存取。此設定對於分佈式系統中的服務配置和狀態管理是必要的。

前提準備

開始之前,請確保你已有以下內容:

步驟 1 — 拉取 Consul Docker 映像

我們先從 Docker Hub 拉取官方 Consul 映像。此映像由 HashiCorp 維護,並包含運行 Consul 所需的一切。

登錄到您的 Ubuntu Droplet 的控制台並運行:

docker pull hashicorp/consul:latest
Output
latest: 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 
Output
CONSUL_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 網絡接口映射到宿主機。
  • -p 8600:8600/udp 將 DNS 服務端口映射用於服務發現。

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

步驟 3 — 驗證 Consul 安装

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

首先,運行 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 是否可以訪問,打開網絡瀏覽器,並導航至 http://localhost:8500。你應該能看到 Consul 的介面。

这一步驟對於在 KV 庫(步驟 5)中存儲數據前,确认你的 Consul 實例是否存在任何問題非常重要。

步驟 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庫路徑。
  • config/db_host – 存儲值的路徑。
  • 192.168.1.100 – 值。

使用Web UI,

  1. 導航到Consul UI (http://localhost:8500)。
  2. 點擊“鍵/值”標籤。
  3. 通過點擊“創建”創建新的鍵。
  4. 輸入鍵(例如,config/db_host)和值(例如,192.168.1.100)。

這些命令和行為將關鍵配置數據儲存在您的服務可以動態地在運行時間訪問的位置。

步驟6 – 取回鍵值對

一旦您储存了一些KV對,您將想要取回它們以確保它們已被正確儲存。

使用CLI,使用以下命令取回值:

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

使用Web UI,

  1. 前往 Consul UI 的“Key/Value”標籤頁。
  2. 尋找你創建的鍵並點擊它以查看儲存的值。

取回 KV 對是核實你的數據是否正確储存和可訪問的必要步驟。

步驟 7 — 使用 Docker 卷persisting 數據

預設情況下,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. 運行一個有附帶 Docker 卷的新 Consul 容器:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp -v consul_data:/consul/data hashicorp/consul 2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1
docker ps 
Output
CONTAINER 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: always
volumes:
  consul_data:

然後,運行:

docker-compose up -d
Output
[+] Running 2/2 ✔ Network work_default Created 0.0s ✔ Container consul-server Started 0.1s
docker ps
Output
WARN[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-server
docker ps
output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

如果您已完成 Consul,您還可以移除 Docker 映像:

docker rmi hashicorp/consul  
output
hashicorp/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

清理有助於維護整潔的開發環境,並確保 Docker 資源不受浪費。

結論

在這個教程中,您學習了如何使用 Docker 設定和配置 Consul 的 KV 存儲。您已經cover了Docker的安裝、運行Consul容器、配置KV存儲、使用Docker卷 persist 數據,以及清理您的環境。透過這些步驟,您可以現在使用Consul來動態管理分布在您的系統中的配置數據, leveraging Docker 的威力以實現簡單的部署和管理。

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-consul-kv-using-docker