「Docker でSerf が動いた、よかったね!」までをメモ。
大まかな手順
- Serf をインストールしたDocker イメージの作製
- ローカルにserf agent を待機させる
- コンテナをたくさん起動して、ローカルのserf メンバーに加わるのを眺める
- ユーザイベントを発行してみる
- あとしまつ
前提として、
* ローカルの環境はUbuntu。Docker, Serf インストール済み
ラクしたいひと向け準備
docker pull innocentzero/serf:0.6.0 # 以降 イメージ名はこれに置き換えて
Serf をインストールしたDocker イメージを作製する
Dockerfile を書いたほうがいいけども、今回は手作業で。
コンテナの起動
docker run -i -t ubuntu:trusty /bin/bash
Serf のセットアップ
apt-get update && apt-get -y upgrade
apt-get install -y wget unzip
wget --quiet https://dl.bintray.com/mitchellh/serf/0.6.0_linux_amd64.zip
unzip -f 0.6.0_linux_amd64.zip
mv serf /usr/local/bin/
rm 0.6.0_linux_amd64.zip
exit
コンテナのコミット(イメージの作製)
docker ps -a # で一番新しいコンテナがたぶんそれ。コンテナID をメモ。
# コンテナID は一意に決定できれば先頭数文字で充分
docker commit -m "Installed Serf" -a myusername 19a myusername/serf:0.6.0
docker images | head # でserf のイメージが登録されているのが確認できるはず。
ローカルでSerf の起動
前準備が出来たので 新しいウィンドウでserf agent
を叩いてエージェントを起動させる。
そのまえに、ifconfig eth0
なコマンドで、ローカル環境のIP アドレスを調べておくといい。
if config eth0 #=> 192.168.10.3
serf agent
==> Starting Serf agent...
==> Starting Serf agent RPC...
==> Serf agent running!
Node name: 'ubuntu-local'
Bind addr: '0.0.0.0:7946'
RPC addr: '127.0.0.1:7373'
Encrypted: false
Snapshot: false
Profile: lan
Serf イメージをたくさん起動させる
先ほど調べておいたIP アドレスを、コンテナ起動コマンドと一緒に打ち込む。打ち込む。
docker run mysername/serf:0.6.0 serf agent -join 192.168.10.3
docker run mysername/serf:0.6.0 serf agent -join 192.168.10.3
docker run mysername/serf:0.6.0 serf agent -join 192.168.10.3
...
docker run
するごとに、ローカルのSerf が新規メンバーの参加を検知してログに出力しているはず
==> Log data will now stream in as it occurs:
2014/05/15 05:46:20 [INFO] agent: Serf agent starting
2014/05/15 05:46:20 [INFO] serf: EventMemberJoin: ubuntu-local 192.168.10.3
2014/05/15 05:46:21 [INFO] agent: Received event: member-join
2014/05/15 05:46:45 [INFO] serf: EventMemberJoin: c6467948559c 172.17.0.2
2014/05/15 05:46:46 [INFO] agent: Received event: member-join
2014/05/15 05:47:29 [INFO] serf: EventMemberJoin: c39e76e589b3 172.17.0.4
2014/05/15 05:47:30 [INFO] agent: Received event: member-join
イベントの発行をしてみる
また新たにSerf イメージを、今度は対話モードで起動させて、serf event
を叩いてみる
docker run -i -t myusername/serf:0.6.0 /bin/bash
serf agent -join 192.168.10.3 & # バックグランドで起動
serf event "hello serf"
exit
ローカルのserf agent に"user-event: hello serf" ログが記録されているのが確認できると思う。
(直接確認は出来ないが、バックグランドで起動させているSerf コンテナにもこのメッセージは届いている。)
あとしまつ
バックグランドで起動しているDocker コンテナをすべて停止させて、コンテナもぜんぶ削除する。
docker stop $(docker ps -q) # 起動しているコンテナの停止
docker rm $(docker ps -a -q)# コンテナの削除
Links
(Serf ってなんだろう...)