1. ホーム
  2. docker

Dockerコンテナで異なるLinux OSを動作させる?

2023-10-14 18:30:33

質問

Docker を学ぼうとしているのですが、1つだけ不可解なことがあります。それは、(ホスト OS とは)異なる Linux のフレーバーが、実際に Docker コンテナでどのように動作するのかということです。

私の Docker ホストが RedHat を実行していると仮定して、私が Ubuntu イメージからコンテナを開始する場合、次のことは本当でしょうか。

  • 論理的に言えば、Ubuntu イメージのフットプリントが約 550MB の場合、Docker デーモンはコンテナを作成するために、(イメージレジストリから)実際に 550MB 相当の Ubuntu イメージをダウンロードしますか?
  • コンテナー内で実行されている Ubuntu のインスタンスは、同じバージョンを手動でダウンロードしてインストールした場合と本質的に変わらないのでしょうか。

Docker コンテナがホスト OS によって使用される同じカーネルを共有すること、および Docker の基本的なポイントの 1 つが、基礎となる OS を使用するコンテナの効率的な利得であることは承知しています。そのため、ホストとは異なる Linux バージョンから作成されたコンテナーを起動したときに実際に何が起こるかについて、少し混乱しています。

どのように解決するのですか?

この前の記事で、もう少し理解できると思います。 Dockerコンテナの分離、基盤となるLinux OSを気にするか? .

問題の核心は、もしホストOSがRedHatであれば、Dockerコンテナで実行するLinuxのどのビルドでも、例えばあなたの例ではUbuntuで使用するのはRedHatカーネルであるということです。

これは、Linux と Docker コンテナの違いが何であるかを理解することになります。 OS と、Linuxの 画像 . Dockerコンテナ内では、完全なUbuntu OSを実行するのではなく、Ubuntuのイメージを実行することになります。

ご質問の目的には、次のように考えています。

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

画像 = ファイルシステム/ライブラリ

Dockerコンテナ内で実行されているUbuntuイメージは、Ubuntuファイルシステム/ライブラリだけであり、Ubuntuカーネルは含まれません。これは、基礎となるホストのカーネル (その他のもののうち) を活用する Docker コンテナから得られる効率性を部分的に説明するものです。