運用道場に行ってきた

2014/07/05 23:21

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

よねさんとモペモペの書いた Dockerの薄い本 はポチったものの、世間の様子についてけて無かったので 運用道場 というものに行ってみた。

適当にぶつくさ行って帰ってきてしまったので、気になるところ満載で追試。 Consul のサービスレジストリは Docker のツラいところを優しくケアしてくれるのか?

ブラウザから試せるdockerのチュートリアルもあるっぽいが、今回の目的から外れるのでちゃんとインストールする。

https://docs.docker.com/installation/#installation

vmwareに入れてるubuntu 14.04で試す。

https://docs.docker.com/installation/ubuntulinux/

ドキュメント通りにやったら 0.9.1~dfsg1-2 が入った。

続きに最新を入れる方法が書いてあったのでその通りやったらうまくいかなくって調べるの面倒なので curl でらくちんにやる方法使った。lxc-docker (1.1.0) ってのが入った。

とりあえず consul だけ入れたdockerイメージを作る

Dockerfileは超簡単に

FROM ubuntu
MAINTAINER tsuyukimakoto

RUN apt-get -qq update
RUN apt-get install -yqq wget unzip
RUN wget https://dl.bintray.com/mitchellh/consul/0.3.0_linux_amd64.zip
RUN unzip 0.3.0_linux_amd64.zip && mv consul /tmp/consul
# Consul port -> DNS HTTP RPC SERF_LAN SERF_WAN SERVER
EXPOSE 8600/TCP 8600/UDP 8500/TCP 8500/UDP 8400/TCP 8400/UDP 8301/TCP 8301/UDP 8302/TCP 8302/UDP 8300/TCP 8300/UDP

イメージをビルド

$ sudo docker build --no-cache --rm -t tsuyukimakoto/consul .

起動してみる

$ sudo docker run -i -t tsuyukimakoto/consul /bin/bash

とりあえず起動を3回繰り返して3つ起動してみた。

おっさんだけどipコマンドで確認してみたところ、172.17.0.34と172.17.0.35と172.17.0.36だった。

172.17.0.35でサーバとして起動してみる

# /tmp/consul agent -server -bootstrap -data-dir=/tmp/consul_data -bind=172.17.0.35 -client=172.17.0.35

単独なので選挙に勝った

2014/07/05 12:15:55 [INFO] serf: EventMemberJoin: 10a6653b6910 172.17.0.35
2014/07/05 12:15:55 [INFO] serf: EventMemberJoin: 10a6653b6910.dc1 172.17.0.35
2014/07/05 12:15:55 [INFO] raft: Node at 172.17.0.35:8300 [Follower] entering Follower state
2014/07/05 12:15:55 [INFO] consul: adding server 10a6653b6910 (Addr: 172.17.0.35:8300) (DC: dc1)
2014/07/05 12:15:55 [INFO] consul: adding server 10a6653b6910.dc1 (Addr: 172.17.0.35:8300) (DC: dc1)
2014/07/05 12:15:55 [ERR] agent: failed to sync remote state: No cluster leader
2014/07/05 12:15:56 [WARN] raft: Heartbeat timeout reached, starting election
2014/07/05 12:15:56 [INFO] raft: Node at 172.17.0.35:8300 [Candidate] entering Candidate state
2014/07/05 12:15:56 [INFO] raft: Election won. Tally: 1
2014/07/05 12:15:56 [INFO] raft: Node at 172.17.0.35:8300 [Leader] entering Leader state
2014/07/05 12:15:56 [INFO] consul: cluster leadership acquired
2014/07/05 12:15:56 [INFO] consul: New leader elected: 10a6653b6910
2014/07/05 12:15:56 [INFO] consul: member '10a6653b6910' joined, marking health alive

クライアントはサーバを知らないって言う

2014/07/05 11:22:38 [ERR] agent: failed to sync remote state: No known Consul servers

お互いのIPを知らないという前提で、その前提からするとこれは困った。サービスレジストリ自体が機能しない。

ネットワークの設定が間違ってる?んじゃないと思って先に進む。

docker-consulってDockerfile他と解説を見つけた

https://github.com/progrium/docker-consul

つまり、consulを起動したdockerのipをホスト側から確認して、次に起動するdockerでは既にわかっているipにjoinするようにconsulに指示を出すと…。

既にわかっているIPの割り出し方に注意すればdockerの起動側で設定はできる。ただし、ホストをまたがろうとすると大変面倒くさそう。

Ambassador Containerを使って…

https://docs.docker.com/articles/ambassador_pattern_linking/

Ambassador Container使って別ホスト上のコンテナと通信するんやーって。mopemopeの薄い本にも書いてあった。でもこれ、やっぱり面倒くさいぜ…

最終的にはSDNに?

http://www.slideshare.net/adrienblind/docker-networking-basics-using-software-defined-networks

あー!という気持ちはわいたけどもう心が折れました。スコッチ呑みます。

Open VSwitch…

※Dockerはやっぱりしばらく置いておくとして、外側からIPコントロールできる環境で Consul を使うこと自体は楽しそうだと思ってるところ…だけどSerfだけで良いかも?

※ただ、Docker自体も古いMBA上にVMWare Fusionでubuntu起動したりしてる身としては、複数nodeでの実験とかに有用な気がしてる。

Prev Entry

Next Entry