独自のカーネルを実行している仮想マシンとは異なり、Dockerコンテナは自分のカーネルを実行せずにホストマシンとカーネルを共有することを知っていますが、DebianのドッカーイメージとDebianがインストールされている仮想マシンの実際の違いは何ですか?
あるコンテナ内では実行できますが、他のコンテナでは実行できないことはありますか?それとも機能的に同じで、実際のDebianインストールで実行されるすべてがdocker Debianコンテナ内で実行されますか?
ホストオペレーティングシステムにも変化がありますか? CentOSシステムでDebianコンテナを実行すると、DebianシステムのDebianコンテナとは異なる動作をしますか?
答え1
DockerコンテナとVMの主な実際の違いは次のとおりです。
Dockerイメージは元のシステムの基本イメージにすぎないため(
debootstap
この基本イメージを取得するのに役立ちます)、カーネル、initrd ...を含めることも含まないかもしれませんが、カーネル、initrd ...は意味がなく、研究もいいえ。開発、その他のパッケージの依存関係。したがって、必要でない場合は安全に削除できます。Dockerコンテナは別々に起動します。名前空間コンテナの影響から実際のシステムプロセス、ネットワーク接続などを隠します。簡単に言えば
kill
、Dockerコンテナでは実際のシステムプロセスを見ることはできませんが、Dockerコンテナプロセスを実際のシステムの一般的なプロセスとして扱い、それを使用して何でもできます。 VMの設定が難しいです。名前空間概念:すべての仮想マシンは、仮想マシンソフトウェア(VirtualBox、VMware ...)によって制御される巨大なアプリケーションから始まります。 VMソフトウェアは、アプリケーションのすべてのシステムコールをキャプチャし、物理ハードウェアに転送します。したがって、コンテナの概念よりも遅くなります。Dockerコンテナは次のものを提供します。サポートする特定のアプリケーション(特定のライブラリバージョン、ソフトウェアコンポーネント...)を実行する必要があるがカーネルを実行する必要はない環境です。したがって、アプリケーションが新しいカーネル機能を使用しても機能しません。
Dockerの概念の主な目的はアプリケーションを共有することであるため、Dockerコンテナには通常完全なシステムイメージは含まれていません。 VMの主な目的は、オペレーティングシステムを共有することです。
特定のDockerイメージが実行される実際のシステムには違いはありません(アプリケーションが特定のカーネルに依存しない限り)。