1. ホーム
  2. linux-kernel

Dockerはどのように異なるカーネルのディストロを実行することができますか?

2023-09-25 23:47:48

質問

docker を Debian ホスト、あるいは OpenSUSE のコンテナで実行するにはどうしたらよいでしょうか。異なるカーネルを使用し、モジュールも分かれています。また、古いバージョンのDebianは古いカーネルを使用しているので、カーネルバージョン3.10+でどうすれば実行できますか?古いカーネルには古い組み込み機能しかありません。古いディストロがどうやって新しい機能を管理するのですか? そのトリックは何ですか?

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

<ブロッククオート

どのようにすれば、DebianホストやOpenSUSE上でdockerをコンテナで動かすことができますか?

カーネルが同じで、これらのコンテナイメージをすべて実行するために Docker エンジンをサポートするからです。ホストカーネルは 3.10 以上でなければなりませんが、その のリスト システムコール はかなり安定しています。

"を参照してください。 コンテナのアーキテクト。ユーザー空間とカーネル空間を理解することが重要な理由 " を参照してください。

  1. アプリケーションにはビジネス ロジックが含まれていますが、システム コールに依存しています。
  2. アプリケーションがコンパイルされると、アプリケーションが使用する (すなわち依存する) システム コールのセットはバイナリ (高レベル言語では、これはインタープリターまたは JVM) に組み込まれます。
  3. コンテナーは、ユーザー空間とカーネル空間がシステムコールの共通のセットを共有する必要性を抽象化しません。
  4. コンテナー化された世界では、このユーザー空間はバンドルされ、ラップトップからプロダクション サーバーまで、さまざまなホストに出荷されます。
  5. 今後数年にわたり、これは課題を生み出します。

時々、新しいシステムコールが追加され、古いシステムコールは非推奨になります。これは、コンテナ・インフラストラクチャとその中で実行されるアプリケーションのライフサイクルを考えるときに考慮すべきことです。

"も参照してください。 Docker コンテナでカーネル バージョンが Ubuntu バージョンと一致しないのはなぜですか? "を参照してください。

コンテナの中にカーネルはありません。たとえカーネルをインストールしたとしても、コンテナの起動時にロードされることはありません。コンテナの目的そのものは、新しいカーネルを実行する必要なくプロセスを分離することです。