ここのところすっかりマイ・フェイバリット・ツールなConsulとDockerの話題。
別件を色々調べてたんだけど、なんだか便利なものを見つけたので。
大雑把に言えば、ホスト上で起動しているコンテナの情報を読み取って、 うまい感じに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素の状態
APIを使った登録なので、Registratorを一度起動しちゃうとコンテナ止めても良くも悪く永続してしまってた。
というわけで検証のために一旦Consulのdataディレクトリを空にした上で起動。
2. Registrator起動
先ほど作ったdocker-compose.ymlのある場所で起動コマンドを叩く。
docker-compose up -d
動かしているコンテナのサービスが見事に登録されていることが分かる。
3. サービスの増減
Registratorが起動している状態で更にコンテナを起動してみる。(この例だとWekan)
ちゃんと追従して登録されたことが確認できる。
逆にコンテナを止めると、これまた追従してリストから消えてくれる。
シコシコjsonに記述加えるのはイケてないしかったるいなーと感じてて、 なんとかコンテナ側で上手いこと自動登録できないかと思ってたんだけど、 それはそれで結構大変だなーと悩んでいたところでコレ。
いやー、めっちゃ便利ですね!
登録されたサービスの情報を見るとコンテナのホストから見たアドレスになっちゃってるから マルチホスト環境では使えないかな?と思っていたらちゃんとそこも抑えられていて、 オプションとして登録用のIPを指定できたりするみたい。
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)
- 作者: 前佛雅人,クリエーションライン株式会社
- 出版社/メーカー: インプレス
- 発売日: 2015/10/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る