Docker 1.0 が出て誰もがユースケースや活用事例を欲している中、自分も大きな関心を持ってこちらのセッションに参加してきました。本番での運用はまだということでしたが、開発フェーズでの活用事例ということでいろいろと参考になることが多かったです。また、Docker って何だっけっていうところも丁寧に説明してくださって、初見の人にもためになる講演だったのではないかと思います。
個人的に響いたこと
- AUFS の仕組み面白い
- Docker を支える技術は namespace と cgroup
- Private Docker Registry 立ててイメージの共有で 開発と CI 回すモデル試したい
- 開発だけでなくデモ環境としても有用
- ブランチごとにコンテナ立てて IP ふれば環境間の干渉を気にせずに動作確認できる
- 従来型のデモ環境も考え直すべき
- IDE も丸っと開発環境としてイメージ化して渡すというのも一考の価値あり
- 使い慣れた設定もありつつ、コーディング規約のこととか考えると設定までパッケージ化して渡すのも良さそう。ただしライセンスフリーでないものはだめかも。
- まだ本番まで適用できてはいない
講演メモ
- Works Applications Advanced Technology and Engineering
- 共通基盤開発などをしている
- クラウド技術の調査検証など
- Docker とは
- 軽い: ハードウェア仮想化 vs コンテナ仮想化
- 仮想化されたハードウェアを経由しないので処理が速い
- コンテナ仮想化は OS を仮想化し、異なるディストリビューションのみ共存できる。起動したものはプロセスとして確認できる。
- sysbench による性能評価をとったところ物理ママとほぼ遜色のない性能
- ポータブル性
- Docker registry
- Docker Hub
- Private Docker registry
- どのクラウドにも物理マシンにも運べる
- Docker registry
- Docker を支える技術
- AUFS
- 複数のファイルシステムをあたかも一つのファイルシステムのように見せる技術
- N-1 代目までのファイルは read-only として保存され、変更が入る際に改めて copy on write でコピーされて使われる
- コンテナ仮想化
- namespace
- ユーザプロセスが動作する空間を分離する
- Docker では PID/Net/UTS/IPC/Mount/User namespace を使っている
- eth0 -> veth0(172.17.0.1) -> docker0 (仮想ブリッジ 172.17.0.0/16)
- ユーザプロセスが動作する空間を分離する
- cgroup
- プロセスが利用可能なリソースについて記述する
- namespace
- AUFS
- 事例紹介 (CI/開発/評価/DB)
- CI 環境での活用
- 上海・シンガポールなど複数拠点で同じ製品開発しているので開発環境を揃えたい
- 製品の数が多く環境の入れ替えがよくある
- 古いバージョンの補修が定期的に必要
- アプリとテスト環境が違う、仮想化かけると重い
- アプリの評価用環境へのデプロイ先に Docker でたてた
- 誰かのアプリが問題を起こしても影響が限定的
- 軽量なので確認時のパフォーマンスも問題にならない
- Eclipse やライブラリなど IDE までまとめてイメージ化した
- 複数拠点で使用する DB を Docker でパッケージ化
- 国を超えた開発で DB へのアクセスがボトルネックになっていた
- Master private registry から Slave private registry へ同期(単なるコピー)され、それを使う
- いろいろな環境で運用するケースでは Docker は最適
- CI 環境での活用
- 本番ではまだ使っていない
- 開発・評価で試して上手くいけば production に持っていくというのはクラウドと同じ
- Docker x AWS でコスト的なメリットは出そうか?
- 社内リソースの有効活用には使えそう(古いPCなど)