[和訳]So, when do you use a Container or VM? #docker
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は So, when do you use a Container or VM? (2016/5/13) の和訳です。
最近、私は見本市で登壇しました。話した内容はDockerの基本と、ユニバーサルコントロールプレーンが管理するSwarmクラスター上で、アプリケーションをアイディアから実サービスに至るワークロードの走らせ方です。登壇中に多少時間を割いたのは、コンテナとVMがどのように違うかについてでした。これが特に関心を呼びました。というのも、参加者のほとんどが仮想化システム管理者だったからです。
質疑応答の時、参加者の一人が、「私のアプリケーションをVMに移すのはいつでしょうか。そして、コンテナに移すのはいつでしょうか。」という質問をしました。
当然の成り行きとして、私がいつも回答する通り、この手の質問に回答を始めました(このような質問には適切な回答がないのです)。質問とは「ホスト上ではコンテナをいくつ実行できますか?」や、「物理と仮想のどちらにデプロイすべきですか?」というものです。
私はこう答えました:「時と場合によります。」(聴衆から不満の声が漏れただけでなく、想像ですがあなたもでしょう)
私の最新のブログ記事である、Dockerコンテナを実行するのは物理か仮想サーバーか、で書いたように、可能性がありすぎるのです。
ですが、その投稿と同じように、3つのシナリオを提示します。どこにアプリケーションをデプロイするかの検討にあたり、考慮するであろうものです。
話を進める前に、Dockerが従来の仮想化と同じではないことを再度お伝えします。確かに、Dockerの核心が、アプリケーションの素早い移動や、最高レベルの柔軟性に関している等、類似点はあります。それだけでなく、より伝統的な仮想マシンを使うモノリシックモデルと比べれば、コンテナをベースとしたアプリケーションの理想的なデプロイが、ステートレスなマイクロサービスとしての一連のデリバリにあたります。
これらを踏まえ、次に、どこにアプリケーションをデプロイしたら良いか3つのシナリオを考えます。
1)新しいアプリケーションをゼロから始めようとしている場合(あるいは、既存のアプリケーションをゼロから書き直し)、かつ、マイクロサービスをベースとしたアーキテクチャで書こうとしている場合、コンテナは適切ではありません。
皆さんはDockerコンテナとマイクロサービスを使って次のバージョンの開発を行いますが、社内では既存のモノリシックアプリケーションがそのままです。
Dockerの活用場面とは、コードを書くにあたりインフラが変わろうとも、会社はアプリケーションの開発の迅速化とデリバリ効率化を可能とする点です。
2)あなたはマイクロサービスベースのソフトウェアの開発に力を入れています。しかし、アプリケーションが完全に書き上がるまで待つよりも、すぐにでもDockerの利益を得始めたい場合です。このシナリオでは、顧客は既存のアプリケーションの、VMからDockerコンテナへの「移行」を行います。
コンテナ内でモノリシックアプリケーションを実行しておけば、開発チームはそれを1つ1つに分解し始められます。モノリスからいくつかの機能を取り出し、それらをDockerコンテナで、疎結合なサービスとして配置し始めることができます。
新しいコンテナは、古いものと相互に通信可能です。必要であれば、レガシーアプリケーションとも可能です。そして、アプリケーション全体を繰り返し分解し、環境が変わってもポータブルでスケール可能なサービスとしてDockerコンテナ内にデプロイされます。
3)2番目の類似ケースが存在します。会社がDockerが提供する利益をいくらか要求し、モノリシックアプリケーションを書き直すつもりなどなく、VMからコンテナへ移す場合です。
典型的にこのような顧客は、Dockerコンテナが提供する常識を越えたポータビリティの側面に興味を持っています。あなたのCIOがあなたの所へ来て、「データセンターで実行しているその1,000のVMだが、次週の終わりまでにそのワークロードをクラウドに入れてほしい」と言ったと想像してください。それは最もハードコアなVMニンジャでも大変な仕事です。データセンターからクラウドは、ポータビリティが良くありません。ベンダーを変更したいならなおさらです。データセンターにvSphereがあり、クラウドはAzureであると想像してください。VMの変換はどうするのでしょうか。
しかし、このようなこともDockerコンテナがあればとても容易にできます。Dockerコンテナは元々ポータブルで、VMでもクラウドでも修正なしで実行できます。コンテナはポータブルで、VMからVMへ、ベアメタルへ、移行のための大変な労力など必要ありません。
これらのシナリオが心に響いたようでしたら、Dockerをお試しになる良い機会かと思います。
このシリーズでMike Colemanの投稿をさらに読んでみる:
・コンテナは仮想マシンではない
・コンテナと仮想マシンを一緒に利用する
・アプリケーションの仮想化とDockerは別物である
Dockerに関してさらに学ぶには
・Docker初心者は、10分のオンラインチュートリアルをご覧ください。
・画像、自動構築などを無料のDocker Hubアカウントでシェアしてみましょう。
・Docker 1.10リリースノートを読んでみましょう。
・Docker Weeklyを購読してみましょう。
・次に予定されているDockerオンラインMeetupに登録してみましょう。
・次に予定されているDocker Meetupに参加してみましょう。
・DockerCon 2016に登録してみましょう。
・DockerCon EU 2015のビデオを見てみましょう。
・Dockerコミュニティへの貢献を始めましょう。