導入
HashiCorp の Consul は、現代の DevOps 環境で複数の機能を実行する多機能ツールです。サービスディスカバリ、ヘルスチェック、負荷分散、そして特に分散キーバリュー (KV) ストアとして広く利用されています。Consul の KV ストアは、動的な構成データ、機能フラグ、シークレット、メタデータをインフラストラクチャ全体で完全に可用性が高く一貫性のある方法で保存するのに適しています。これにより、分散システム内のサービスから動的にアクセスできます。Docker を使用して Consul の KV ストアを構成することで、迅速なデプロイと分離された環境を実現でき、テストと開発に最適です。.
このチュートリアルでは、Docker を用いて KV Consul ストアをセットアップおよび構成する手順を説明します。チュートリアルを完了すると、KV ペアが設定され、利用可能な状態になった、完全に機能する Docker コンソールインスタンスが完成します。このセットアップは、分散システムにおける動的なサービス構成と状態管理に不可欠です。.
前提条件
始める前に、次のものがあることを確認してください。
- DigitalOcean Cloud アカウント。.
- Ubuntu を実行しているサーバーと、sudo 権限を持ち、ファイアウォールが有効になっている非 root ユーザー。.
- Docker は Ubuntu ドロップレットにインストールされています。.
- Linuxコマンドライン入門
- Docker コマンドとコンテナ管理に関する基本的な知識。.
ステップ1 – Consul Dockerイメージの取得
Docker Hubから公式コンソールイメージを取得しましょう。このイメージはHashiCorpによってメンテナンスされており、コンソールの実行に必要なものがすべて含まれています。.
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コンテナを実行する
コンソールイメージが読み込まれたので、新しいコンソールコンテナを起動できます。このコンテナはコンソールサーバーとして機能し、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 コンソールがバインドするネットワークインターフェースを設定します。これは適切なネットワーク通信に必要です。.
- -p 8500:8500 は、Consul Web インターフェースと API ポートをホストにマッピングします。.
- -p 8600:8600/udp は、サービス検出用の DNS サービス ポートをマップします。.
この手順は、KV ストアを構成するために使用する Consul サービスを開始するため、非常に重要です。.
ステップ3 – コンソールのインストールを確認する
コンソールが正常に動作していることを確認するには、コンテナのステータスを確認し、コンソール インターフェイスにアクセスする必要があります。.
まず、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コンソールが利用可能かどうか確認し、Webブラウザを開いて http://localhost:8500 にアクセスしてください。Consulインターフェースが表示されるはずです。.
この検証手順は、データを KV ストアに保存する前に、コンソール インスタンスが問題なく実行されていることを確認するために重要です (手順 5)。.
ステップ4 – ファイアウォールの設定(オプション)
コンソール インスタンスに外部アクセス (クラスター内の他のノードなど) が必要な場合は、必要なポートでトラフィックを許可するようにファイアウォール設定を構成する必要があります。.
例えば、クラウドインスタンスでConsulを実行している場合、ポート8500(HTTP API)と8600(DNS)への受信トラフィックを許可する必要があるかもしれません。具体的なコマンドは、ファイアウォールソリューション(UFW、iptablesなど)によって異なります。.
この手順により、コンソール インスタンスが他のマシンからアクセス可能になります。これは、分散構成に不可欠です。.
ステップ5 – キーと値のペアを保存する
Consul を実行すると、KV ストアを使用して設定データを保存できるようになります。Consul CLI または Web インターフェースを使用して、キーと値のペアを追加できます。.
CLI 経由でキーと値のペアを保存するには、次のコマンドを実行します。
docker exec -it consul-server consul kv put config/db_host
192.168.1.100
Success! Data written to: config/db_hostdocker exec -it consul-server consul kv put config/db_port 3306
Success! Data written to: config/db_portこのコマンドの機能は次のとおりです。
- -it – ローカル システムからコンテナーへの対話型ターミナルを起動します。.
- consul kv put – kv put コマンドは指定されたパスにデータを保存します。.
- config/db_host – 値を保存するパス。.
- 192.168.1.100 – 値。.
ウェブインターフェースを使用して、
- Consul UI (http://localhost:8500) に移動します。.
- 「キー/値」タブをクリックします。.
- 「作成」をクリックして新しいキーを作成します。.
- キー (例: 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ウェブインターフェースを使用して、
- Consul UI の「キー/値」タブに移動します。.
- 作成したキーを見つけてクリックすると、保存されている値が表示されます。.
KV ペアの復元は、データが適切に保存され、アクセス可能であることを確認するための重要な手順です。.
ステップ7 – Dockerボリュームを使用した永続データ
デフォルトでは、Dockerコンテナは一時的なものです。つまり、コンテナが削除されると、コンテナ内に保存されているデータは失われます。Consul KVデータを永続化するには、Dockerボリュームを使用する必要があります。.
現在のコンソール コンテナーを停止して終了します。
docker stop consul-server
docker rm consul-server さて、容器を確認すると、コンシーラーが効かなくなっていることに気がつくでしょう。.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESDocker ボリュームに新しいコンソール コンテナーを接続します。
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
2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1docker 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 – コンソールを自動的に起動する(オプション)
本番環境でのデプロイメントでは、Docker Compose を使用して Consul コンテナのデプロイメントを自動化できます。Docker Compose は、マルチコンテナ Docker アプリケーションを簡素化し、サービスの管理を容易にします。.
次の内容を含む 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 – クリーニング
コンソール インスタンスが完了したら、Docker 環境をクリーンアップしてリソースを解放する必要があります。.
コンソール コンテナーを停止して削除しましょう。
docker stop consul-server
docker rm consul-server
docker psoutput
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESコンソールの使用が終わったら、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 のパワーを活用して簡単にデプロイと管理を行うことができます。.










