Dockerコンテナには独自のカーネルがあるかどうか?


66

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

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

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

編集:質問を少し明確にします。はい、Dockerは完全なVMではなく、プロセスコンテナーであることを知っています。しかし、公式ドッカーハブレジストリおよびCentOSのような他のOSには「Ubuntu」コンテナがあるため、コンテナでUbuntuを実行するとはどういう意味ですか?

回答:ああ、それはちょうど私に明かされました。これはUbuntuユーザーランドプロセスであり、特定のUbuntuビルド用のapt-getおよびその他の構成プロセスが含まれます。CentOSについても同様です。Dockerは単一のプロセスではなく、単一のエントリです。したがって、これらのディストリビューションのエントリポイントは、他のプロセスを生成するある種のinitプロセスです。


2
「それはUbuntuユーザーの土地プロセスです」-プロセスだけでなく、ライブラリも。
osgx

回答:


38

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インスタンス)は、Linuxカーネルの基盤となるオペレーティングシステムレベルの仮想化機能への抽象化およびインターフェイスの追加レイヤーとしてDockerを使用して、複数の分離されたLinuxシステム(コンテナー)を実行します。...このアプローチは、Linuxカーネルのcgroups機能に依存しています。この機能は、プロセスのコレクションのリソース使用量(CPU、メモリ、ディスクI / Oなど)を制限、アカウント、および分離するネームスペース分離および機能を提供します。


1
これは質問に答えません。
EML

2
EML、どの質問ですか?デフォルトでは、すべてのDockerコンテナーには独自のカーネルがありません。すべてのDockerコンテナに対して1つのホストカーネルのみがあります。
osgx

確かに、あなたの答えはそれで十分ですが、OP FROMはホストがすでに Ubuntuを実行しいるときにUbuntuのベースイメージが必要な理由を知りたがってます。質問に答えるには、ベースイメージとは何かを説明する必要があります。
EML

2
EML、質問は、私の回答が投稿された後に「Clarifying」(superuser.com/posts/889472/revisions)で編集されたため、明確にされていない元の質問に対する回答です。dockerのベースイメージとカーネルについて共有する情報がある場合は、別の回答を追加します。
osgx

17

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

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

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

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


4
「パッケージは異なるカーネルを使用する場合があります」のソース Docker自体は複数のカーネルを使用できません。常に単一のホストカーネルのみが存在します。ハイパーバイザー(仮想化)と組み合わせた場合にのみ、それぞれ独自のカーネルバージョンで複数のホストを起動し、仮想ホストごとに1つのDockerを実行できます。しかし、どのホストに対しても、ホストとそのドッキングされたコンテナ用のカーネルは1つだけです)
-osgx

2
パッケージとは?Dockerコンテナーにはカーネルがありません。ホストで使用されるカーネルにインストールして起動しただけです。したがって、図に示すように、1つのDocker = 1つのサーバー= 1つのカーネルです。単一のDockerエンジンで2つのカーネルを使用する方法はありません。このエンジン内のすべてのコンテナは同じカーネルを使用します。正解は「いいえ、DockerコンテナはDocker Engineの単一インスタンス内で異なるカーネルを使用できません」
-osgx

1
各Dockerコンテナは、必要なカーネルをロードできる仮想化ソフトウェアなど、必要なコードを実行できます。必要に応じて、コンテナでWindowsを実行できます。
エレミヤ

1
JeremiahBarrar、わかりました、説明をありがとう。Dockerコンテナの内部から仮想化ソフトウェアを実行することは文書化されていますか?また、Dockerでサポートされていますか?Docker(ソフトウェアqemu、qemu + kvm、xenなど)ではどのような仮想化が機能しますか?
osgx

2
最初の文は誤解を招きます。コンテナー内でVMを使用すると、Dockerを使用する意味がなくなります。
user2707671
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.