Dockerのメリットと可能性

https://www.youtube.com/watch?v=mVN7aTqr550

1 comment | 2 points | by WazanovaNews 約3年前 edited


Jshiike 約3年前 | ▲upvoteする | link

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のfleetApache Mesosなどのプロジェクトがある。

#ruby #docker #coreos #mesos

Back