2015-10-13 16 views
15

Dockerを学ぼうとしていて、私を困惑させることは、Dockerコンテナで実際にLinuxの異なる風味(ホストOSに対する)がどのように動作するかです。Docker Containerで異なるLinux OSを実行しますか?

私たちは私のドッカーホストはRedHatのを実行していると私はUbuntuのイメージからコンテナを起動すると仮定した場合、?:以下、真

  • 論理的に言えば、Ubuntuの画像のフットプリントは、その後、550メガバイト程度であれば意志ドッカーがありますデーモンは実際にコンテナを作成するために550MB相当のUbuntuイメージを(イメージレジストリから)ダウンロードしますか?
  • は、私が手動で同じバージョンを手動でダウンロードしてインストールした場合と違い、コンテナ内で実行されているUbuntuのインスタンスです。

私は、DockerコンテナがホストOSで使用されているのと同じカーネルを共有していることを知っています.Dockerの基本点の1つは、基盤となるOSを使用するコンテナの効率性です。ですから、ホストとは異なるLinuxバージョンから作成されたコンテナを起動すると、実際に何が起きるのか混乱します。

+4

少なくとも私のような初心者がなぜ質問が悪いと思われるのかを判断できるように、投票には強制的な匿名コメントが必要です。すなわち、それは正しいわけじゃないの? – JamieP

答えて

28

私はこの前の投稿がもう少し理解するのに役立つと思います - Docker container isolation, does it care about underlying Linux OS?

ホストOSがRedHatの場合、それはRedHatカーネルであり、Dockerコンテナで実行するLinuxのビルドによって使用されます。あなたの例ではUbuntu。

これは、違いは、Linux OSおよびLinux 画像の間にあるものを理解することにダウンしています。 Docker Container内の完全なUbuntu OSではなく、Ubuntuのイメージを実行します。あなたの質問を考えるの目的のために

: -

OS =カーネル+ファイルシステム/ライブラリ
画像 =ファイルシステム/ライブラリ

あなたドッカー内で実行されているUbuntuの画像コンテナは、Ubuntuのファイルシステム/ライブラリ(Ubuntu OSに同梱されているカーネルではありません)です。コンテナ内で実行されるUbuntuイメージは、Redhatカーネルを使用します。これは、基本的なホストのカーネル(他の中でも)を活用しているDockerコンテナから得られる効率性の一部を説明しています。

+1

ありがとうございます。それは少し物事をクリアしています。 Linuxを理解する必要があるだけです。 – JamieP

+0

RHEL6(またはCentos6)イメージを使用しているコンテナでRHEL7(またはCentos7)OSを実行した経験がありますか?この点で問題があると思われますか? – Voltaire

+0

^^^ [RHEL7とRHEL6の間の3.10.xカーネルと2.6.xカーネルの間にABI互換性の問題があると思われます] – Voltaire

0

Dockerコンテナ内で実行されるUbuntuイメージは、そのコンテナのユーザースペースと呼ばれる場所で実行されます。このイメージはRedHatホストOSカーネルへのカーネルシステムコールを行うことができます(ユーザー操作からカーネルスペースへの制御をユーザーの操作から転送する作業の一部として)。コアカーネルは一般的な技術であるため、UbuntuのユーザスペースコードからRedhatのカーネルコードを呼び出しても、システムコールは互換性があります。この互換性により、すべてが異なる基本OSイメージを持つ可能性のあるコンテナ間でカーネルを共有することが可能になります。

関連する問題