D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2014年12月

2013年年末に次男が産まれて晴れて年子の男の子二人の子供の親になってしまったので2014年は忙しすぎて全体的に記憶にもやがかかっていてる。基本いくら思い出そうとしても「保育園への登園」「保育園のからのお迎え」「子供の風呂」「子供の飯」「子供の寝かしつけ」しか思い出せない



と、思っていたら「peco作ったやないですか><」言われて「あー、そういえば!」となった。あれ、Rebuild.fmに出たの今年だっけ?あ、あとそういえば某急成長中企業を退職したんだった。 色々あってYAPC::Asia Tokyo 2015をやることになって、慌てて会場を探してなんとか借りれる事になってアナウンスしたりもしたなー。年末はDocker漬けでDockerのツールとか書いてたな。あとは思い出せないかブログにはかけない事ばかりや…

まぁわりと開発的にはスローな1年だった(それもあって転職という道を選んだ)が、個人の活動としてはとにかく目の回る忙しさだった。来年はもう少し外に出て行く機会を増やして行く予定なのでもう少しアウトプットが増えるかもしれません。そうなるといいな。

それでは皆様よいおとしを。


    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

最近自分のSNSのフィードを読んでいる方には色々と新しめのツールを使ったりして今までやれなかったことをやろうと色々とつまづきながら学習しているのがわかると思うのですが、その一環としてConsulやらなにやらをがっつり使おうと思ってさー、やるぞ!と思ったら二つほど問題があってはまった:
  1. Consulもぼちぼち設定が面倒くさいからDockerで投入したいのに、DockerにARPまわりにバグがあるらしく、UDP経由のraft通信が時々おかしなことになる(多分コレ
  2. 何百台もマシンを使いたいわけじゃないから、Consulの認証・セキュリティ周りを設定するのがだるい
ConsulはDNSのインターフェースが非常にすてきで使いたかったんだが、うーーーーむ。registratorも見てみたんだけど、なんかAddress欄がうまくコンテナが動作してるサーバーのIPアドレスになってないような感じもして微妙〜〜〜〜な感じを受けた。削除もうまくいかなかったし… そしてドキュメントが… う〜む。

というわけで一歩戻って「俺は何をしたいのか?」と考えたところ、したいことは「コンテナをデプロイした時に何かトリガーを走らせたい」というだけだということがわかった。これなら小さそうだし、ちょうどregistratorのコードを読んでdocker remote APIも把握したところだったので、じゃあ、ということで二つほどツールを書いた。

tp (lightwegith template processor)

tp=template processorのイメージ。もうアホみたいに簡単なツール。ただただシェルスクリプトとかでJSONをSTDINに受け取って、テンプレート(goのtext/template形式)に渡して処理してSTDOUTに吐く。それだけ。だけで手元にあると超便利じゃね?

こんな感じで、curlでJSONのAPI叩いて、直接流し込む感じで使うイメージ

001


dockeractd (docker event receiver)

dockerの走ってるサーバー上でコンテナの開始とかのイベントを受け取った時に任意のコマンドを動かすためだけのツール。 コンテナが作成された、稼働した、止まった、等々のイベントが受け取れるので、それをJSON形式でSTDIN経由で任意のコマンドに流す。それをどうするかはあなたの自由。分散システム的な要素はないけど、serf agentの動きに似てます。

自分の意図としてはとりあえずdockerでアプリのコンテナを起動した時に前段にあるnginxのupstream設定を書き換えてHUPしたい。それだけ!

001


あ、コマンドラインの引数とか途中までしか書いてないし超絶いけてないので、PRとかissuesとかまってます。


 
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

「なんか外部CIサービスだるいなー」「リリースとかもうローカルの環境でやりたいなー」「マシン取っ替えてもすぐ環境作れるようにしたいなー」などなどの欲求があったのと、go1.4がリリースされたのもあってDockerで全部自動化してみた。

戦略としては
  1. Travis CIとかの連携は残すけど、手元でいつでも同様のテストを走らせられるようにしておく
  2. リリースは手元でバージョン指定すれば基本的に一発で通るようにしておく
実装は単純で、ubuntuベースのイメージに必要なgoのバージョンとツール類(goxcghr)を展開しておいて、pecoのディレクトリは後からdocker run -vでマウントできるようにしておく

使う時は先にイメージを作成しておく(キャッシュ使ってるから当然素早く走りますね!)

001

あとはpeco-dockerレポジトリについてくるスクリプトでCI的なテストとリリースができる。(リリースは本当にリリースはしっちゃって面倒くさいのでここではテスト画面だけ)

001

test.shの中身は基本的に"docker run peco-docker:go1.4 /test-docker.sh"というコマンドを実行しているだけです。

で、先ほどpeco v0.2.11 をリリースしましたバグフィックスと機能追加両方ありますので、是非お試しください。

というわけでdockerを使ってpecoさんを手元で色々できるようにしてみた、というお話でした。オーケストレーションは色々と微妙なところはあるけど、こういう単純な自動化にはdockerすごいフィットしてる感あるという感じがしましたね。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

YAPC::Asia Tokyo 2015 は ななななんと!8/20-8/22にビッグサイトで開催されます! まだまだ本番までは時間はありますが、本エントリではどどーーーーーんとその辺りを先取りして 皆様に紹介したいと思います! 

もしこれを見て「スポンサーに興味あるんだけど、この会場だったら○○とかできる?」というような興味が湧いた方は是非こちらのフォームからお問い合わせください続きを読む
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

このページのトップヘ