そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

Consulに自動でDockerコンテナのサービスを登録する

ここのところすっかりマイ・フェイバリット・ツールなConsulとDockerの話題。

blue1st.hateblo.jp


別件を色々調べてたんだけど、なんだか便利なものを見つけたので。

Registrator

大雑把に言えば、ホスト上で起動しているコンテナの情報を読み取って、 うまい感じにConsulのAPIを通じてサービスを登録してくれるツール。


導入

まんま公式の手順に従うだけでも良い感じに動いてくれる。

docker pull gliderlabs/registrator
docker run -d \
    --name=registrator \
    --net=host \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:latest \
      consul://localhost:8500

とはいえ他の運用と合わせるためにdocker-compose.yml化しておく。

以下のような感じで記述しておく。

registrator:
  image: gliderlabs/registrator:latest
  net: host
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock
  command: -tags docker consul://localhost:8500
  restart: always

動かしてみる

1. Consul素の状態

f:id:blue1st:20160321143857p:plain

APIを使った登録なので、Registratorを一度起動しちゃうとコンテナ止めても良くも悪く永続してしまってた。

というわけで検証のために一旦Consulのdataディレクトリを空にした上で起動。

2. Registrator起動

先ほど作ったdocker-compose.ymlのある場所で起動コマンドを叩く。

docker-compose up -d

f:id:blue1st:20160321143909p:plain

動かしているコンテナのサービスが見事に登録されていることが分かる。

3. サービスの増減

Registratorが起動している状態で更にコンテナを起動してみる。(この例だとWekan)

f:id:blue1st:20160321143931p:plain

ちゃんと追従して登録されたことが確認できる。

逆にコンテナを止めると、これまた追従してリストから消えてくれる。


シコシコjsonに記述加えるのはイケてないしかったるいなーと感じてて、 なんとかコンテナ側で上手いこと自動登録できないかと思ってたんだけど、 それはそれで結構大変だなーと悩んでいたところでコレ。

いやー、めっちゃ便利ですね!


登録されたサービスの情報を見るとコンテナのホストから見たアドレスになっちゃってるから マルチホスト環境では使えないかな?と思っていたらちゃんとそこも抑えられていて、 オプションとして登録用のIPを指定できたりするみたい。

Run Reference - Registrator

registrator:
  image: gliderlabs/registrator:latest
  net: host
  volumes:
    - /var/run/docker.sock:/tmp/docker.sock
  command: -ip <コンテナのホストのIP> consul://<ConsulのホストのIP>:8500
  restart: always

監視がどうとかそういうもっと細かい要件が入ってくると分からないけど、 「ひとまずコンテナをConsulで一覧にしたい」という場合には非常に役立つのではないだろうか。

DevOpsを支える HashiCorpツール大全 (Think IT Books)

DevOpsを支える HashiCorpツール大全 (Think IT Books)

  • 作者: 前佛雅人,クリエーションライン株式会社
  • 出版社/メーカー: インプレス
  • 発売日: 2015/10/22
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る