Docker コンテナには独自のカーネルがありますか?

Docker コンテナには独自のカーネルがありますか?

docker リポジトリ内の多くの docker イメージは Ubuntu ベースで作成されていることがわかります。

それはどういう意味ですか? 各コンテナには Linux カーネルの簡略化されたバージョンがバンドルされているのですか?

コンテナは独自のカーネルの上に存在しますか? しかし、コンテナはホストのカーネルを共有すると考えていました (場合によっては boot2docker、カスタム Tiny Core Linux ビルド、その他の場合は CoreOS など)。

編集:質問を少し明確にします。はい、docker はプロセス コンテナーであり、完全な VM ではないことは知っています。しかし、公式の docker hub レジストリには「Ubuntu」コンテナーがあり、CentOS などの他の OS もあるので、コンテナー内で Ubuntu を実行するとはどういう意味ですか?

答え:ああ、やっと分かりました。これは、Ubuntu ユーザー ランド プロセスで、特定の Ubuntu ビルド用の apt-get やその他の構成プロセスが含まれています。CentOS も同様です。Docker は単一のプロセスではなく、単一のエントリです。したがって、これらのディストリビューションの場合、エントリ ポイントは、他のプロセスを生成する何らかの init プロセスです。

答え1

Docker はホスト OS カーネルを使用します。コンテナ内にはカスタム カーネルや追加カーネルはありません。マシン上で実行されるすべてのコンテナは、この「ホスト」カーネルを共有しています。

ウィキペディアによればhttp://en.wikipedia.org/wiki/Docker_(ソフトウェア)それ

Docker は、cgroup やカーネル名前空間などの Linux カーネルのリソース分離機能を使用して、独立した「コンテナ」を単一の Linux インスタンス内で実行できるようにし、仮想マシンの起動のオーバーヘッドを回避します。

cgroups、名前空間、および LXC は、プロセスのグループを分離するための Linux カーネルの機能です。単一のカーネル、単一のスケジューラ、およびカーネル メモリ マネージャーの 1 つのインスタンスが依然として存在します。

Boot2docker と CoreOS は、ホスト カーネルを備えた軽量の Linux ディストリビューションであり、Docker コンテナーをロードするために使用できます。

参考:

boot2docker は、Docker コンテナを実行するために特別に作成された Tiny Core Linux に基づく軽量 Linux ディストリビューションです。完全に RAM から実行され、サイズは約 27 MB、起動時間は 5 秒程度です (YMMV)。

http://en.wikipedia.org/wiki/CoreOS

単一の制御ホスト(CoreOSインスタンス)は、Linuxカーネルの基盤となるオペレーティングシステムレベルの仮想化機能への抽象化およびインターフェース[14]の追加レイヤーとしてDockerを使用し、複数の分離されたLinuxシステム(コンテナ)を実行します。...このアプローチは、Linuxカーネルのcgroups機能に依存しており、名前空間の分離と、プロセスのコレクションのリソース使用量(CPU、メモリ、ディスクI/Oなど)を制限、計算、分離する機能を提供します。

答え2

ほとんどの場合、ホスト OS カーネルは共有されます。別のカーネルを実行するには、仮想化を使用する必要があります。これはまれであり、パフォーマンスの低下のために必要な場合にのみ使用されます。

「Docker Engine コンテナは、アプリケーションとその依存関係のみで構成されます。ホスト オペレーティング システムのユーザー空間で分離されたプロセスとして実行され、他のコンテナとカーネルを共有します。したがって、VM のリソース分離と割り当ての利点を享受しながら、移植性と効率性がはるかに高くなります。」

これがどのように機能するかを説明するのに役立つかもしれません: ここに画像の説明を入力してください

ソース:https://www.docker.com/whatisdocker/

答え3

すべての Docker コンテナはホスト カーネルを使用します。

また、これは、ホスト カーネルとコンテナー ディストリビューション間の非互換性によって問題が発生する可能性があることも意味します。理論上は。たとえば、コンテナー化されたソフトウェアが、ホスト カーネルにコンパイルされていないカーネル機能を使用したい場合、その機能は動作しません。

実際には、これは起こりません。Docker コンテナの主なトラブルの原因は、Docker 自体の (多くの場合は説明できない) 制限であり、ホストとゲストのカーネルの非互換性ではありません。

(Ps 事実上すべての Linux ディストリビューションはどの Linux カーネルでも動作するからです。)

関連情報