77

コンテナー内の OpenSUSE などの Debian ホストで docker を実行するにはどうすればよいですか? モジュールが分離された、異なるカーネルを使用します。また、古い Debian バージョンは古いカーネルを使用しているため、カーネル バージョン 3.10+ でどのように実行できますか? 古いカーネルには古いビルトイン関数しかありません。古いディストリビューションはどのようにして新しい機能を管理できますか? その「コツ」とは?

4

2 に答える 2

52

コンテナ内のOpenSUSEなどのDebianホストでdockerを実行するにはどうすればよいですか

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

コンテナの設計: ユーザー空間とカーネル空間の問題を理解する理由」を参照してください。

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

https://rhelblog.files.wordpress.com/2015/07/user-space-vs-kernel-space-simple-container.png?w=584&h=231

時々、新しいシステム コールが追加され、古いシステム コールは廃止されます。これは、コンテナ インフラストラクチャのライフサイクルとその中で実行されるアプリケーションについて考える際に考慮する必要があります。

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

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

于 2015-09-29T11:16:00.720 に答える