Close

コンテナーと仮想マシンの比較

コンテナーと仮想マシン (VM) の違い、それぞれの一般的なプロバイダー、それらを併用する方法について確認します。

Ian Buchanan の顔写真
Ian Buchanan

プリンシパル ソリューション エンジニア


コンテナーと仮想マシンは、非常に類似したリソース仮想化テクノロジーです。仮想化とは、RAM、CPU、ディスク、ネットワークなどのシステムの単一リソースを「仮想化」して、複数のリソースとして表現できるプロセスです。コンテナーと仮想マシンの重要な違いは、仮想マシンはハードウェア層まで含めたマシン全体を仮想化し、コンテナーはオペレーティング システム レベル以上のソフトウェア層のみを仮想化することです。

仮想マシンとコンテナーの違いを示すコンテナー。
ロゴ: Compass。

Compass を無料で試す

開発者のエクスペリエンスを向上させ、すべてのサービスをカタログ化し、ソフトウェアの健全性を高めましょう。

コンテナーとは何か


コンテナーは軽量ソフトウェア パッケージで、そこに含まれているソフトウェア アプリの実行に必要なすべての依存関係が組み込まれています。これらの依存関係には、システム ライブラリ、外部サードパーティ コード パッケージ、その他のオペレーティング システム レベルのアプリなどが含まれます。コンテナーに含まれる依存関係は、オペレーティング システムよりも上位のスタック レベルで存在します。

メリット

  • イテレーション速度
    コンテナーは軽量で複雑ではないソフトウェアのみを含むため、非常に高速な変更や反復処理が可能です。
  • 堅牢なエコシステム
    ほとんどのコンテナー ランタイム システムでは、事前に作成されたコンテナーのホスト型のパブリック リポジトリを提供しています。これらのコンテナー リポジトリにはデータベースやメッセージング システムなどの一般的なソフトウェア アプリケーションが多数含まれており、すぐにダウンロードして実行できるため開発チームの時間を節約できます。

デメリット

  • 共有ホストの不正アクセス
    コンテナーはすべて、オペレーティング システム層の下にある同じ基礎的なハードウェア システムを共有しています。あるコンテナー内の不正アクセスが他のコンテナーから抜け出し、共有ハードウェアに影響する可能性があります。一般的なコンテナー ランタイムには、ビルド済みのコンテナーのパブリック リポジトリがあります。いずれかのパブリック イメージの使用には、不正アクセスが含まれたり悪質なアクターによってハイジャックされる恐れがあったりするため、セキュリティ上のリスクが伴います。

一般的なコンテナー プロバイダー


アイコン: コードのビルド
関連資料

Kubernetes と Docker の比較

アイコン: 3 つの輪
ソリューションを見る

Compass による DevEx の向上

  • Docker
    Docker は、最も一般的で広く使用されているコンテナー ランタイムです。Docker Hub は、コンテナー化された一般的なソフトウェア アプリケーションの巨大なパブリック リポジトリです。Docker Hub 上のコンテナーは、ローカルの Docker ランタイムに即座にダウンロードしてデプロイできます。
  • RKT
    「ロケット」と発音される RKT は、セキュリティを第一とするコンテナー システムです。RKT コンテナーでは、ユーザーが安全でないフィーチャーを明示的に有効にしない限り、安全でないコンテナー機能は許可されません。RKT コンテナーの目的は、他のコンテナー ランタイム システムが抱える根本的なクロス コンタミネーションによるセキュリティ問題に対処することです。
  • Linux コンテナー (LXC)
    Linux コンテナー プロジェクトは、オープンソースの Linux コンテナー ランタイム システムです。LXC は、オペレーティング システム レベルのプロセスを互いに分離するために使用されます。実際に、Docker は背後で LXC を使用しています。Linux コンテナーは、ベンダー ニュートラルなオープン ソース コンテナー ランタイムを提供することを目的にしています。
  • CRI-O
    CRI-O は、Kubernetes コンテナー ランタイム インターフェイス (CRI) の実装で、オープン コンテナー イニシアチブ (OCI) 対応のランタイムを使用できるようにするものです。これは、Kubernetes のランタイムとして Docker を使用する軽量化の代替手段です。

仮想マシンとは何ですか?


仮想マシンは、重量ソフトウェア パッケージで、CPU、ディスク、ネットワークなどの低レベルのハードウェア デバイスを完全にエミュレートします。仮想マシンは、エミュレートされたハードウェアで実行するための補完的なソフトウェア スタックを含むこともできます。これらのハードウェア パッケージとソフトウェア パッケージを組み合わせることで、計算システムの完全な機能のスナップショットが生成されます。

メリット

  • 完全な隔離セキュリティ
    仮想マシンは、完全にスタンドアロン システムとして独立して実行されます。つまり、共有ホスト上の他の仮想マシンからの不正アクセスや干渉の影響を受けないということです。それでも、個々の仮想マシンは不正アクセスによってハイジャックされる可能性はありますが、不正アクセスされた仮想マシンは隔離されるため、他の隣接する仮想マシンは汚染されません。
  • インタラクティブ開発
    コンテナーは、通常、コンテナーの実行に必要な想定される依存関係と構成の静的な定義です。仮想マシンはよりダイナミックで、インタラクティブに開発することができます。仮想マシンの基本的なハードウェア定義を指定すると、その仮想マシンは必要最小限のコンピューターとして扱えるようになります。仮想マシンにソフトウェアを手動でインストールでき、仮想マシンのスナップショットを撮って現在の設定状態を取得することができます。仮想マシンのスナップショットは、その時点の仮想マシンを復元したり、その設定で追加の仮想マシンをスピン アップしたりするために使用できます。

デメリット

  • イテレーション速度
    仮想マシンは、フル スタック システムを包含するため、ビルドと再生成に時間がかかります。仮想マシンのスナップショットに変更を加えると、想定通りに動作するかを再生成して検証するためにかなりの時間がかかる場合があります。
  • ストレージ サイズのコスト
    仮想マシンは、多くのストレージ スペースを占有してしまいます。すぐに数ギガバイトのサイズになることもあります。このため、仮想マシンのホスト マシンのディスク容量不足の問題が発生することがあります。

一般的な仮想マシン プロバイダー

  • VirtualBox
    VirtualBox は、Oracle が所有する無料のオープン ソースの x86 アーキテクチャ エミュレーション システムです。VirtualBox は、仮想マシンのイメージの開発と配布を支援する補足ツールのエコシステムで確立された、最も一般的な仮想マシン プラットフォームの 1 つです。
  • VMware
    VMware は、最初の x86 ハードウェア仮想化テクノロジーの 1 つでビジネスを展開した上場企業です。VMware には、複数の仮想マシンをデプロイおよび管理するためのユーティリティであるハイパーバイザーが付属しています。VMware は、仮想マシンを管理するための堅牢な UI を備えています。VMware は、優れたエンタープライズ仮想マシン オプションとして、サポートを提供しています。
  • QEMU
    QEMU は最も堅牢なハードウェア エミュレーション仮想マシン オプションです。あらゆる汎用 ハードウェア アーキテクチャをサポートしています。QEMU はコマンド ラインのみのユーティリティであり、設定や実行のためのグラフィカル ユーザー インターフェイスは提供されません。このトレードオフにより、QEMU は最速の仮想マシン オプションの 1 つとなっています。

自分に適したオプションはどれか


プロジェクトに特定のハードウェア要件がある、またはあるハードウェア プラットフォームで開発を進めていて Windows と MacOS のような別のプラットフォームをターゲットにする必要がある場合は、仮想マシンを使用する必要があります。その他のほとんどの「ソフトウェアのみ」の要件には、コンテナーを使用すれば対応できます。

コンテナーと仮想マシンをどのように併用しますか?


コンテナーと仮想マシンを併用することは十分可能ですが、実際のユース ケースには制限があります。独自のハードウェア構成をエミュレートする仮想マシンを作成することができます。オペレーティング システムは、この仮想マシンのハードウェア内にインストールできます。仮想マシンが機能してオペレーティング システムが起動したら、コンテナー ランタイムをオペレーティング システムにインストールできます。この時点で、エミュレートされたハードウェアを備えた計算システムが機能して、コンテナーをそこにインストールできます。

この構成の実用的な用途としては、システム オン チップのデプロイのための実験があります。Raspberry Pi 開発ボードや BeagleBone 開発ボードのような一般的なシステム オン チップのコンピューター デバイスを仮想マシンとしてエミュレートし、実際のハードウェアでテストする前にコンテナーの実行を実験することができます。

しかし、大抵の場合、ニーズはそのいずれかで満たされます。仮想化のニーズに合わせてコンテナーまたは仮想マシンを決定する上で重要なのは、リソースのニーズと実際に行うトレードオフを理解することです。

Ian Buchanan
Ian Buchanan

Ian は Java および .NET の両方について広範で豊富な経験を持ち、大企業でのアジャイル手法の推進者として最もよく知られています。現在は、継続的インテグレーション、継続的なデリバリー、データ分析をより適切に実行できるよう、新たな DevOps 文化とツールに焦点を当てています。Ian のキャリアでは、企業のソフトウェア開発ツールのライフサイクルのすべての段階でそれらを適切に管理してきました。組織全体のプロセス改善を推進し、生産性、品質、顧客満足度を向上させています。自己主導性および自己組織化を尊重する多国籍チームを構築しています。会話したり、コーディングしたりしていない時には、Ian はパーサー、メタプログラミング、ドメイン特化言語に没頭しています。@devpartisan で Ian をフォローしましょう。


この記事を共有する

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

DevOps のイラスト

Compass コミュニティ

イラスト: 障害の克服

チュートリアル: コンポーネントを作成する

マップのイラスト

Compass を無料で始める

DevOps ニュースレター購読

Thank you for signing up