Dockerコンテナは独自のカーネルを持っているかどうか?

docker

dockerリポジトリのdockerイメージはUbuntuベースで作られているものが多いですね

それはどういう意味ですか?各コンテナには、Linux カーネルのストリップダウンされたバージョンがバンドルされているのでしょうか?

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

EDIT: 質問を少し明確にします。はい、私はdockerがプロセスコンテナであり、完全なVMではないことを知っています。しかし、公式のdocker hubのレジストリやCentOSなどのOSには「Ubuntu」というコンテナがあるので、コンテナでUbuntuを動かすというのはどういうことなのでしょうか?

答えは?ああ、それはちょうど私にドーンと来ました。それはUbuntuのユーザーランドプロセスで、特定のUbuntuのビルドのためのapt-getやその他の設定プロセスが含まれています。CentOSの場合も同様です。Dockerは単一のプロセスではなく、単に単一のエントリです。なので、これらのディストリビューションでは、エントリーポイントは、他のプロセスをスポーンする何らかのinitプロセスです

  76  stewart99  2015-03-14


ベストアンサー

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

ウィキペディアによると、

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

Container Linux - Wikipedia

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

44  osgx  2015-03-14


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

“Docker Engineコンテナはアプリケーションとその依存関係だけで構成されています。Docker Engineコンテナは、ホストOS上のユーザースペースで孤立したプロセスとして実行され、他のコンテナとカーネルを共有します。そのため、VMのリソースの分離と割り当ての利点を享受しつつ、よりポータブルで効率的です。”

これで仕組みを説明できるかもしれません。enter image description here

ソースは以下の通りです。https://www.docker.com/whatisdocker/

21  JeremiahBarrar  2015-03-14


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

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

実際には、このようなことは起こりません。docker コンテナの主なトラブルの原因は、docker 自体の (しばしば説明のつかない) 制限であり、いくつかのホスト-ゲストカーネルの非互換性ではありません

(P.s. 実質的にすべての Linux ディストリビューションはどの Linux カーネルでも動作するからです)

1  peterh – Reinstate Monica  2020-01-08


タイトルとURLをコピーしました