web-dev-qa-db-ja.com

コンテナーと仮想マシンの違いは何ですか?

コンテナーと仮想マシンの違いをすべて理解したいと思います。これらの仮想化方法の両方で、すべての運用システムを備えたファイルシステムを監視できます。ただし、Dockerコンテナでは、 centos 5.x、私が実行した場合uname -aコンテナのシェルでは、出力にホストカーネルのバージョンが表示されます。それはどのように機能し、クラシック仮想マシン(vmware、virtualbox、xenなど)との主な違いは何ですか?

どちらの形式でも、単一の物理マシン上で複数のオペレーティングシステムを実行できます。

コンテナーを使用すると、これらのオペレーティングシステムは分離されます(独自のファイルシステム、プロセス、libcを含むライブラリ、IPアドレスなどが含まれます)が、それでもまったく同じカーネルを共有しています。それがuname -aは、ホストカーネルのバージョンを示しました。

従来の仮想化では、オペレーティングシステムはそれぞれ独自のカーネルを実行しています。これらの複数のカーネルは、実際のハードウェアではなく、ハイパーバイザーと呼ばれるソフトウェアによって提供される仮想化されたハードウェア上で実行されます。これは、コンテナーベースの仮想化と比較して追加のレイヤーです。

仮想化の種類にはそれぞれ長所と短所があります。コンテナはオペレーティングシステムの選択においてより制限されています。コンテナは、実行中のカーネルによってサポートされている必要があります(例: Solaris上のSolarisゾーンLinux上のLXCAIX上のWPAR )技術的には、カーネル開発者が「エイリアン」ユーザーランドのサポートを実装することを禁止するものはありません(例:lxbrand = Solaris 10上のLinuxゾーン および SmartOS 、または最近 Windows 10のUbuntuランタイム )ハイパーバイザーを使用している場合、オペレーティングシステムは仮想ハードウェアでのみサポートされる必要があり、これにより多くの異種構成が可能になります(例:Linux 32ビットおよび64ビットカーネル、 * BSD、Solaris、Windows、Mac OS Xなど)

コンテナーの主な利点は、コンテナーがはるかに軽いことです。アプリケーションのパフォーマンスは、真のベアメタルOSインストールの場合と本質的に同じです。起動する追加のカーネルがないため、新しいコンテナのインスタンス化ははるかに速くなり、実行する追加のカーネルがないため、仮想環境の密度ははるかに高くなる可能性があります。

Dockerコンテナ実装ではないことに注意してください。 Dockerは containers で実行されるアプリケーションの構築/パッケージ化/配布の標準であり、それらを実行するために engine を含み、最近 orchestrator も追加しました。このエンジンは、ハイパーバイザーのエンジンと同様の役割を果たしますが、コンテナー上のアプリケーション用です。

11
jlliagre

良い出発点は、ウィキペディアを読むことでしょう 記事

オペレーティングシステムレベルの仮想化は、サーバーの仮想化方法であり、オペレーティングシステムのカーネルでは、1つだけではなく、複数の分離された ser-space instances を存在させることができます。このようなインスタンスは、コンテナー、ソフトウェアコンテナー、 仮想化エンジン (VE)または刑務所( FreeBSD jail または chroot jail )と呼ばれることもありますが、所有者とユーザーの観点からは、実際のサーバーのように感じます。

Unixライクなオペレーティングシステムでは、このテクノロジーは標準の chroot メカニズムの高度な実装と見なすことができます。分離メカニズムに加えて、カーネルはしばしば resource-management 機能を提供して、他のコンテナーに対する1つのコンテナーのアクティビティーの影響を制限します。 [...]


仮想マシンとコンテナーが異なるすべてを理解したいと思います。

仮想化テクノロジを使用すると、受け渡すことができるパッケージは仮想マシンであり、オペレーティングシステム全体とアプリケーションが含まれます。 3つの仮想マシンを実行する物理サーバーには、ハイパーバイザーとその上で実行される3つの個別のオペレーティングシステムがあります。

対照的に、Dockerのように3つのコンテナー化されたアプリケーションを実行するサーバーは、単一のオペレーティングシステムを実行し、各コンテナーは他のコンテナーとオペレーティングシステムカーネルを共有します。オペレーティングシステムの共有部分は読み取り専用ですが、各コンテナには書き込み用の独自のマウント(つまり、コンテナにアクセスする方法)があります。つまり、コンテナは仮想マシンよりもはるかに軽量で、使用するリソースがはるかに少なくなります。

他に何が知りたいですか?正確にはどの詳細が欠けていますか?

1
gf_