6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Docker-composeで気軽にetcdに触れてみる

Posted at

はじめに

この記事はITRC Advent Calendar 2020の10日目の記事です。
前の記事→ [Unity]ゼロプログラミングでギャルゲー風ゲームを作ろう!day1 ~MMDのモーションをUnityに入れて鑑賞会をしよう~
こんにちはRIN1208です今回はいろいろあって最近etcdに触れたのでそのことについて書いていきたいと思います。

必要環境

  • docker-compose
  • mac os

上記の環境で説明していきます

etcdって何?

etcd(エトセディーと読むらしい)とはOSSの分散型KVS(Key-Value Store)です
curlなどのHTTPツールを使用して読み書きすることができます。
またオプションのSSL認証をオプションで使用することも可能です

構築してみる

dockerでの構築のやり方は以下のGit Hubに書いてあります。

ただdockerコマンドで構築しようとするとコマンド長い、
複数立てるのに複数回コマンド打たなきゃいけない、
データを残さなくてもいい、
ポート変えたいと思った時に編集しづらいので今回はdocker-composeを使用してささっと構築していきたいと思います。

準備

まずはdocker-compose.ymlを書いていきます。
また今回、コマンドに関する説明は省かせていただきす。

version: "3"
services:
  etcd1:
    build: .
    ports: ["12379:12379", "12380:12380"]
    command: >-
      /usr/local/bin/etcd 
      -name etcd1 
      -data-dir /etcd-data 
      -listen-client-urls http://0.0.0.0:12379 
      -advertise-client-urls http://0.0.0.0:12379 
      -listen-peer-urls http://172.16.0.4:12380 
      -initial-advertise-peer-urls http://172.16.0.4:12380 
      -initial-cluster etcd1=http://172.16.0.4:12380,etcd2=http://172.16.0.5:12382 
      -initial-cluster-token tkn 
      -initial-cluster-state new
    networks:
      etcd-network:
        ipv4_address: 172.16.0.4

  etcd2:
    build: .
    ports: ["12381:12381", "12382:12382"]
    command: >-
      /usr/local/bin/etcd 
      -name etcd2 
      -data-dir /etcd-data 
      -listen-client-urls http://0.0.0.0:12381 
      -advertise-client-urls http://0.0.0.0:12381 
      -listen-peer-urls http://172.16.0.5:12382 
      -initial-advertise-peer-urls http://172.16.0.5:12382 
      -initial-cluster etcd1=http://172.16.0.4:12380,etcd2=http://172.16.0.5:12382 
      -initial-cluster-token tkn 
      -initial-cluster-state new

    networks:
      etcd-network:
        ipv4_address: 172.16.0.5

  
networks:
  etcd-network:
    name: etcd-network 
    ipam:
     driver: default
     config:
       - subnet: 172.16.0.0/24

次にDockerfileです。こちらはdocker-compose.ymlに書いても良かったのですが。今回は書きました。

FROM gcr.io/etcd-development/etcd:v3.4.7 

次にネットワークの作成です。下記のコマンドを実行してネットワークを作成してください 

$ docker network create etcd-network --subnet=172.16.0.0/24 --ip-range=172.16.0.0/24

起動してみる

それでは起動してみましょう。

$ docker-compose build
$ docker-compose up -d 

上記のコマンドを実行しコンテナを起動します。

書き込んでみる

それでは次に書き込んでみましょう。

$ curl -X POST -d '{"key": "hoge","value": "hogehoge"}' http://localhost:12379/v3/kv/put

 
上記のコマンドを実行し書き込んでみましょう
下記のように表示されれば成功です

{"header":{"cluster_id":"10899443767562795482","member_id":"10670599892879733166","revision":"2","raft_term":"2"}}%

読み込んでみる

それでは次にetcd1からデータを読み込んでみましょう。

$ curl -L http://localhost:12379/v3/kv/range -X POST -d '{"key": "hoge"}'

 
上記のコマンドを実行しetcd1のデータを読み込んでみましょう
下記のように表示されれば成功です。きちんとvalueのhogehogeが取得できています。

"header":{"cluster_id":"10899443767562795482","member_id":"2275886477673874084","revision":"2","raft_term":"2"},"kvs":[{"key":"hoge","create_revision":"2","mod_revision":"2","version":"1","value":"hogehoge"}],"count":"1"}%

次にetc2からデータを取得します。

$ curl -L http://localhost:12381/v3/kv/range -X POST -d '{"key": "hoge"}'

上記のコマンドを実行しetcd2のデータを読み込んでみましょう。
先ほど実行したコマンドと同じように表示されれば成功です。きちんと分散されているのが確認できました。

終わりに

気軽にetcdを試す際にdockerで構築できる時点で楽なのですがもっと楽したかったのでdocker-compose使って構築してみました。
やっぱり楽ですね。
明日はhashy0917先輩の記事になります

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?