第3回 コンテナ型仮想化の情報交換会@大阪 (コンテナ型VMや関連するカーネル等の技術が話題の勉強会) に参加してきました。
全体の感想
全体的には LXC や Docker に限らず、 Hyper-V 上での FreeBSD jail の話や Vagrant や CircleCI (LXC を使っている) などの話もあって、面白かったです。
会場
ちょっと早めに出発して、梅田から難波橋を通って堺筋を通って会場まで歩いていきました。 場所もわかりやすくて交差点の名前と目的地のビルの名前をちゃんとチェックしていれば迷わずにたどり着けました。
会場無線 LAN があったのですが、 最初に接続した MacBook Air は問題なく繋がっていたのですが、 後から追加でつなごうとした iPod touch は無線 LAN 自体は繋がっているのに APIPA の IP アドレスになっていて、 DHCP の割り当て IP アドレスが足りなかったのではないかと思いました。
LXC
いろいろと知らないことも多くて勉強になったのですが、特に veth
と macvlan
の違いがよくわかっていなかったので、 veth
は作成しただけだと通信に使えなくてペアの片方をネットワークネームスペースに入れないと使えないというコンテナ用の機能で、 macvlan
は物理 NIC に別 MAC アドレスを付けて使うもの、 というのがわかって良かったです。
LXC という言葉がさすものが「カーネルのコンテナ機能」のときと「lxc-start
などの LXC のユーザーランド」のことがある、というのは気をつける必要があると思いました。 たとえば Docker 0.9 で LXC への依存がなくなったというのは lxc-start
などを使わなくなって、システムコールを libcontainer
という別ライブラリで直接呼んでカーネルのコンテナ機能を使うようになったなど。
FreeBSD jail
jail については存在は知っていたのですが、使ったことはなかったので、そういうものなのかと思ってみていました。
VagrantユーザのためのDocker入門
途中の質問にあった container と image の違いで http://docs.docker.io/en/latest/terms/image/ に書いてある In Docker terminology, a read-only Layer is called an image. An image never changes.
が根拠だと思うのですが、 イメージはコンテナに名前をつけてリードオンリーにしたもの、という説明で 今まで曖昧にしていた違いがちゃんとわかったように思いました。
このブログの Docker 関連記事の中で一番人気の Dockerで不要になったコンテナやイメージを削除する で割とコンテナとイメージを曖昧な感じで書いているのは、はっきりとは区別できていなかったからでした。
Vagrant との使い分けも実際に両方使っている人の話だったので、非常に参考になりました。 基本的には Vagrant も Docker も開発環境として使うという話でした。
Docker運用の観点からみたLXC
いろいろな話がありました。 基本的には production 環境として使う話でした。
Docker の layer 数制限の話
休憩時間に話をしていたのですが layer の制限が 42 から 127 に増えたのは Increase max image depth to 127 からで、 理由は aufs の方で CONFIG_AUFS_BRANCH_MAX_127
という設定を y
にすると 制限が 127 になるから、ということのようでした。
懇親会の時にも話が出たのですが、 RUN
ごとにキャッシュがきくので、 基本的には Dockerfile
の変更を試している間は RUN
ごとに細かくコマンドを並べて試行錯誤して、 出来上がったら &&
でつなげて一行の RUN
にまとめるのが良さそう、 という話でした。
関連する話としては aufs の layer が重なっているのを git で merge するときのようにまとめたい、 という意見に対して、 Dockerfile
をマスター (主) として扱って、 イメージは捨てていつでも作り直せるもの (従) として扱う方が良い、 だから、無理に aufs の差分イメージの中を直接いじってマージしようとせずに Dockerfile
から再生成した方が良い、 という話がありました。
CircleCI, Cucumber-Chef
CircleCI
と ngrok
を組み合わせて、 rebuild.fm で話があったブランチごとよりもさらに富豪的に、 コミットごとに時間制限付きのサーバーを動かす話などがありました。
CircleCI
の1時間という時間制限 (SSH で入れるようにして動かすと30分) と ローカルサーバーを外に公開できる ngrok
というものを組み合わせて コミットごとに一定時間サーバーを動かしているという話でした。
終わり
他の発表の時間に余裕を持たせていて、パネルディスカッションはありませんでした。