2015-09-24 10 views
7

ドッカーでは、ゲストOSはホストOSと同じカーネルを共有します。Dockerの共有カーネルはどういう意味ですか?

誰かがもっと詳しく説明することができますか?

いくつかのカーネルバージョンを持つcentos osを持っていますが、私たちがubuntuイメージをプルすると、別のカーネルを持っている場合、どうやってそれらが同じカーネルを持っていると言うことができますか?

答えて

10

我々はUbuntuのイメージを引くとき、それは別のカーネルを持って

それはないん:それはカーネルの一部がありません:それはホスト(ドッカエンジンを実行している1)のカーネルに依存していますすべての場合system calls "Docker vs Virtualization" で述べたように

:最初ドッカーは、Linuxコンテナ(LXC)の上に抽象化レイヤーとして建設された

。 LXC自体は、Linuxの包含機能の単なるAPIです。
Docker 0.9以降、LXCはデフォルトではなく、Goで書かれたカスタムライブラリ(libcontainer)に置き換えられました。全体的なlibcontainerの利点は、さまざまなLinuxディストリビューションでカーネルとのより一貫したインターフェースです。唯一の問題は、Linux 3.8以上が必要だということです。

Why Understanding User Space vs. Kernel Space Matters」をさらにご覧ください。
また、 "Operating System Containers vs. Application Containers":

コンテナは、オペレーティング・システムの仮想化の製品です。これらは、メモリやCPU、ディスクなどのプロセスやリソースのセットを、ホストや他のコンテナからグループ化し、分離する軽量な仮想環境を提供します。
分離は、コンテナ内のプロセスがコンテナ外のプロセスやリソースを参照できないことを保証します。

https://risingstack-blog.s3-eu-west-1.amazonaws.com/2015/05/os-virtualization.jpg

OSコンテナは、ホストオペレーティングシステムのカーネルを共有するが "Do all Linux distros use the same kernel?" で述べたように、ユーザの空間分離

https://risingstack-blog.s3-eu-west-1.amazonaws.com/2015/05/os-containers.jpg

を提供する仮想環境であり、各ディストリビューションに独自のカーネル構成があっても、カーネルはディストリビューション全体で共有することができます。

+0

Von、ホストカーネルに依存する方法をもっと詳しく教えてください。 – gaurav

+0

@ gauravそれは自分のカーネルを引き出すことではなく、既に存在するカーネルに依存しています。 – VonC

+0

Voc、しかし、私たちはcentosを知っています。ubuntuは異なるカーネルを持っています。どのようにubuntuがcentosのカーネルを使うことができるのですか? – gaurav

0

Dockerは以前LinuX Containers(LXC)を使用していましたが、ホストと同じオペレーティングシステムで動作するrunC(以前はlibcontainer)に切り替えました。これにより、多くのホストオペレーティングシステムリソースを共有できます。また、AuFSのような階層化されたファイルシステムも使用します。また、あなたのためのネットワーキングも管理します。

AuFSはレイヤードファイルシステムなので、読み取り専用部分と書き込み部分を持つことができ、それらを一緒にマージすることができます。したがって、オペレーティングシステムの共通の部分をすべてのコンテナの間で共有されている読み取り専用として持つことができ、各コンテナに書き込みのための独自のマウントを与えることができます。

1GBのサイズのコンテナイメージがあるとします。フルVMを使用する場合は、必要なVMの数を1GB x数にする必要があります。 LXCとAuFSでは、1GBの大容量を共有することができます。また、1000台のコンテナがある場合は、コンテナOSが同じOSイメージを実行していると仮定して、1GB以上の空き容量しか残さない可能性があります。

関連する問題