web-dev-qa-db-ja.com

VM内でdockerコンテナーを実行する場合と、ベアメタルでdockerコンテナーを実行する場合の利点は何ですか?

VM vsベアメタルでドッカーコンテナーを実行する(ホスト上で直接))内部でドッカーコンテナーを実行する利点は何ですか?

VM内でdockerコンテナーを実行している企業について聞いたことがあります。特に、一部の組織がそれを実行しているとdocker会議で言及されています。どうして?

(ホスト上で実行されているDockerコンテナーと内部で実行されているDockerコンテナーの比較KVM)

  • DockerとKVMには現在の状態を保存する方法があり、ここでは追加の利点はありません。
  • DockerとKVMの両方に、ネットワーク用に個別のIPを提供できます
  • DockerとKVMは、実行中のプログラムを個別に分離し、ホストの実行中のプロセスと競合しないようにインストールします。
  • DockerとKVMはどちらも企業の成長に合わせて拡張する簡単な方法を提供します
  • どちらもインスタンスを異なるホストに移動する簡単な方法を提供します

では、なぜ誰もがDockerをKVM内で実行するのでしょうか。 KVMから不必要なパフォーマンスヒットを受けているのではないでしょうか。

4
TrevorKS

主なポイントについて:

DockerとKVM=には現在の状態を保存する方法があり、ここでは追加の利点はありません。

ただし、状態を保存する方法が異なり、いずれかの方法の方が効率的です。また、コンテナの状態を100%確実に保存することはできません。

DockerとKVM=は、ネットワークで使用するために個別のIPを提供できます。

使用するVMおよび使用するコンテナーシステムによっては、コンテナーよりもVMの方が簡単に設定できる場合があります。これは、VM /コンテナーに専用のレイヤー2インターフェイスが必要な場合に特に当てはまります。ほとんどの場合、これはVMで行う方が簡単です。

DockerとKVMは、実行中のプログラムを個別に分離し、ホストの実行中のプロセスと競合しないようにインストールします。

VMはコンテナよりも優れています。コンテナは依然としてホストOSに対してネイティブシステムコールを行っています。つまり、それらは潜在的に直接これらのシステムコールのバグを悪用する可能性があります。 VMには独自のOSがあるため、VMははるかに分離されています。

DockerもKVM=も、企業の成長に合わせて簡単に拡張できます

これはほぼ同じですが、VMが適切に実行された場合、コンテナーは適切に実行された場合よりもスケーリングが少し良好であることがわかりました(おそらく、VMが正しく実行されたため、ハードウェアへのアクセス許可の問題がオフロードされ、コンテナーはソフトウェアを処理する必要があります)。

どちらもインスタンスを異なるホストに移動する簡単な方法を提供します

いいえ、正確ではありません。どちらもオフライン移行を実行できますが、多くのコンテナシステムはライブマイグレーションを実行できません(つまり、あるホストから別のホストにrunningコンテナを移動します)。ライブマイグレーションはvery合理的な規模で実行している場合、管理上の理由から重要です(ホストで更新を実行する必要がありますか?すべてを別のシステムに移行し、ホストを再起動し、2番目のホストからすべてを移行します最初に、それをリブートし、リバランスします。

いくつかの追加ポイント:

  • VMは一般に、高可用性オプションを使用する方が簡単です。これは、コンテナーにそのようなオプションがないということではなく、通常、VMでのアプリケーションコードの操作とアプリケーションコードへの適応がより簡単であることだけです。
  • VMは、クラウドホスティングとの間で直接移行する方が少し簡単です(基盤となるホスティング環境がどの程度であるかを気にする必要はありません)。
  • VMを使用すると、ホストOSとは異なるプラットフォームを実行できます。異なるLinuxディストリビューションでも、カーネル構成に十分な違いがあるため、あるディストリビューション向けに書かれたものは別のディストリビューションでの動作が完全に保証されていません。
  • VMを使用すると、潜在的な攻撃面をより適切に制御できます。コンテナーを使用すると、ホストOSのコードがまだメモリ内にあるという事実、つまり潜在的な攻撃ベクトルを取り除くことはできません。 VMを使用すると、分離されたOSを実行しているので、実際に必要な最小限のOSまでそれを取り除くことができます。
  • VMで関連するコンテナーのグループを一緒に実行すると、そのコンテナーのグループを一緒に開始および停止する簡単で簡単な方法が得られます。
6

仮想化は、単一の負荷に対してハードウェアが大きくなり、単一の強力なマシンに複数のタスクを実行させ、タスクを互いに分離させる必要性が明らかになったときに始まりました。 VMは、大きなホストを複数の小さなホストに分割するという、まさにそれを行う素晴らしい仕事をします。コンテナーは、ホストを使用可能なチャンクに分割しない方法であり、特定のアプリとワークロードを分離する方法です。

したがって、強力なマシンを使用している場合は、プロパティ(リソース、OSなど)が異なるいくつかの小さな部分に分割し、ユースケースに応じてこれらのVM内でアプリを実行します。

もちろん、これは絶対的な唯一の方法ではありませんが、VMとコンテナを混在させる最も明白なケースです。

2
dyasny