https://www.youtube.com/watch?v=mVN7aTqr550
1 comment | 0 points | by WazanovaNews 約1時間前 edited
Code ClimateのBryan HelmkampのRedDotRuby 2014での講演です。ビデオの前半の30分は、Docker + Rubyアプリのユースケースの場合の、概要/ツール紹介/デモです。ここでは、後半に語られているDockerのバリューについて、まとめてみます。
デリバリーの単位
Rubyエンジニアとして、デリバリーするときの単位という概念が今まではなかった(が、Dockerで実現できた)。かつて、JRubyでしばらく開発していたときがあって、その際は、jarファイルの中身がなんであれ、テストして問題なければ、DevOpsチームに渡すだけ。ある意味それはそれでよかったけど。一方、CRubyだとそのようにはいかず、.devファイルやディスクのファイルなどにパッケージするのにトライした人はわかるだろうが、それほど簡単にはいかない。
- 例えば、Ruby gemがlibxml2に依存していた場合、bundlerが設定したり、「このバージョンがなければインストール」みたいなことはしてくれない。Dockerを使えばそれができる。
- warファイルであれ、jarファイルであれ、対応可能。JavaコードをDockerイメージに入れても問題なし。それ以外のものも、MongoDBであれ、何でも入れることができる。
- 一度ビルドすれば、ローカル、ステージング、本番環境、どこでも実行できる。継続的インテグレーションに対応できる。
immutable infrastructureの実現
Chefを使っていたときに思ったのは、なぜ同じサーバに対して複数回実行しなくてはいけないのか。パッケージのバージョンが変わったので、Chefを再実行とか。どうして複数回実行するかというと、VMをAWSに都度投げるのはコストがかかりすぎるから。実際にそうする人もいるけど、少なくとも時間コストの観点からはタダというわけではない。Dockerであれば、中身が何か把握したうえで、都度すばやく実行できる。
Linuxディストリビューションはホストにとって冗長
コードの全て、MongoDB、Redis、Memcached、Passenger、nginx, などがDockerイメージの中にあり、その下で基盤になるOSとして、例えばUbuntuがある。ところがこの場合になぜ、Ubuntuが必要か?パッケージがDockerイメージなのであれば、どうしてパッケージマネジャが必要か?そういうものがないほうが、もっとシンプルで安全性の高いシステムになるのではないか。役割としては、Dockerの実行と基本的な設定管理だけでよいはず。それを実現するのが、CoreOS。ディストリビューションのインストール/アップデートがトリガーになる様々な障害の心配をなくしてくれる。
Linuxディストリビューションはコンテナにとって不要
Phusion PassengerはUbuntuベースだが、Dockerから見て、Ubuntuの特定の機能に依存しているわけではない。Phusion Passengerで生成するDockerイメージが、Ubuntuベースである本質的な必要はない。例えば、マイクロLinuxディストリビューションであるBusyBox + Ruby + いくつかのC言語レベルの依存関係の組み合わせで、数百MBのイメージを100MB以下にすることができる。
設定管理はほとんど不要
CoreOSをホストにすれば、一つの設定ファイル、それも、利用できるユーザ設定といくつかのカスタム設定のみ。イメージをビルドする場合も、ほとんどのケースでDockerファイルに必要なものが入っている。bashスクリプト、sshファイル、その他パッケージの対応もDockerファイルの中。ChefやAnsibleをDockerファイルの中で使って、依存ファイルをインストールすることはほぼない。Dockerでコードを数行書けば済むから。
SOA (Service-oriented Architecture) の費用対効果
最近流行のSOA/マイクロサービスのメリットは大きくても、「無料のランチ」ではない。本番環境にアップする際には、アプリの数が多くなるので、当然、単一のアプリよりも難度が高い。だから、Herokuを利用していると、全てお任せできるのだが、Dockerではその利点、自前のハードウェアなど任意のところで享受できるようになる。
ファイアウォールの内側でのインストール
クラウドベースのプロダクトをもつ企業が、クライアントから「うちのファイアウォールの中に置いて。」などと要求されて、苦労するケースはよくある。例えば、GitHubのエンタープライズ版とか。Dockerであれば、イメージを渡して、Docker run & ポート指定をしてもらうだけとシンプルになる。
データセンターコンピューティングへの活用
データセンターコンピューティングというコンセプトは、リソースをコンピュータプールにプラグインしておいて、同じタスクを任意の回数実行できる環境。DevOpsチームに、「リソースを追加して。」と言えば、CPUのパワーが追加されて、自由にスケールが効き、かつ、そこで何が実行されているかは抽象化されていている。CoreOSのfleetやApache Mesosなどのプロジェクトがある。
#ruby #docker #coreos #mesos