web-dev-qa-db-ja.com

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

DockerリポジトリのDockerイメージの多くは、Ubuntuベースで作成されています。

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

コンテナーはそれ自身のカーネルの上に置かれていますか?しかし、私はコンテナがホストのカーネルを共有していると思いました(いくつかのケースではboot2docker、カスタムのTiny Core Linuxビルド、そしてその他ではCoreOSのようなものです)。

編集:質問を少し明確にします。はい、dockerはプロセスコンテナであり、フルVMではありません。しかし、公式のdocker hubレジストリやCentOSのような他のOSには "Ubuntu"コンテナがあるので、Ubuntuをコンテナ内で実行するとはどういう意味ですか?

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

60
stewart99

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

ウィキペディアによると http://en.wikipedia.org/wiki/Docker_(software)

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

cgroup、名前空間、LXCはLinuxカーネルの機能で、プロセスのグループを分離します。単一のカーネル、単一のスケジューラ、そしてカーネルメモリマネージャの1つのインスタンスがまだあります。

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

http://boot2docker.io/

boot2dockerは、Dockerコンテナを実行するために特別に作られたTiny Core Linuxをベースにした軽量のLinuxディストリビューションです。 RAMから完全に動作し、最大27MBの重さで、最大5秒で起動します(YMMV)。

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

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

34
osgx

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

「Docker Engineコンテナーは、アプリケーションとその依存関係だけで構成されています。ホストオペレーティングシステム上のユーザースペースで分離プロセスとして実行され、カーネルを他のコンテナーと共有します。ポータブルで効率的。」

これはそれがどのように機能するかを説明するのを助けるかもしれません: enter image description here

出典: https://www.docker.com/whatisdocker/

13
JeremiahBarrar