Dockerを使用してConsul KVを設定する方法

紹介

HashiCorpのConsulは、モダンのDevOps環境で多くの機能を提供する柔軟なツールです。それは、サービスの発見、ヘルスチェック、ロードバランシングによく使われ、特に分散型キー-値(KV)ストアとして使われています。ConsulのKVストアは、動的な設定データ、機能フラグ、秘密、メタデータを高可用性、一致性のある方法でインフラ全体上で保存するのに最適であり、分散型システムのサービスに動的にアクセスできます。Dockerを使用してConsulのKVストアを設定することは、迅速な設定と隔離された環境を提供し、テストと開発に理想的です。

このチュートリアルは、Dockerを使用してConsulのKVストアを設定し、構成する手順を説明します。最終的に、Docker上で完全に機能するConsulインスタンスが実行され、KV対が設定され、アクセス可能です。この設定は、分散型システムの動的サービス設定と状態管理に欠かせません。

前提条件

開始する前に、以下を確認してください。

  • DigitalOcean Cloudアカウント
  • Ubuntuを実行しているサーバーと、sudo権限を持った非rootユーザー、有効化されたファイアウォール。これらを設定する方法についてのガイドラインは、このリストからあなたのディストリビューションを選択し、初期のサーバー設定ガイドに従ってください。Ubuntuのサポートされているバージョンで作業を行うことを確認してください。
  • Ubuntu Droplet上にDockerがインストールされている。UbuntuでDockerのインストールと使用法のチュートリアルに従ってください。
  • Linuxのコマンドラインを熟悉している。コマンドラインについての入門やリフレッシュには、Linuxコマンドラインの启蒙を参照してください。
  • Dockerコマンドとコンテナ管理の基本知識。

手順 1 — Consul Dockerイメージの取得

今はConsulの公式DockerイメージをDocker Hubから取得しましょう。このイメージは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が bind するネットワークインターフェースを設定します。これは適切なネットワーク通信のために必要です。
  • -p 8500:8500 Consul Web UIとAPIのポートをホストにマッピングします。
  • -p 8600:8600/udp サービス発見のためのDNSサービスポートをマッピングします。

このステップは、KVストアを設定するために使用するコアConsulサービスを設定するために非常に重要です。

ステップ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が表示されるはずです。

この確認ステップは、Step 5でKVストアにデータを格納する前に、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. [“Key/Value”]タブをクリックします。新しいキーを作成するために[“Create”]をクリックします。
  3. キー(例: 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. UIの“Key/Value”タブに移動します。
  2. 作成したキーを探して、その値を表示するにはそれをクリックします。

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.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ストアを設定して構築した方法を学びました。Dockerのインストール、Consulコンテナの実行、KVストアの設定、Dockerボリュームを使用したデータの持続性、および環境の掃除をカバーしました。これらの手順を通じて、Consulを使用して分散型システム内の設定データを動的に管理することができます。Dockerを利用して簡単なデプロイや管理を行います。

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