Red Hat Network サブスクリプションを使用した yum は、rhel Docker イメージ内でどのように機能しますか?

Red Hat Network サブスクリプションを使用した yum は、rhel Docker イメージ内でどのように機能しますか?

Red Hat Enterprise Linux 7 には Docker コンテナの実行に対する公式サポートが含まれており、Red Hat は公式の rhel Docker イメージのセットを提供しています。これらのイメージの興味深い機能は、コンテナ内で構成を実行することなく、ホストの Red Hat Network サブスクリプションを介してパッケージをインストールできることです。

引用するhttps://access.redhat.com/articles/881893#createimage:

「現在の Red Hat Docker リリースでは、Red Hat から取得したデフォルトの RHEL 7 Docker イメージは、ホスト システムから利用可能な RHEL 7 エンタイトルメントを利用できます。したがって、Docker ホストが適切にサブスクライブされ、コンテナーに必要なソフトウェアを取得するために必要なリポジトリが有効になっている限り (および Docker ホストからインターネットにアクセスできる場合)、RHEL 7 ソフトウェア リポジトリからパッケージをインストールできるはずです。」

私が懸念しているのは、これを実現するメカニズムがかなり不透明であるということです。たとえば、rhel7.1 イメージで新しいコンテナを起動する場合、yum install foohttp プロキシ環境変数を設定しなくても実行できます。このメカニズムを理解していないと、システム管理者は、ホスト システム、Docker デーモン、実行中のコンテナ間の未知の相互作用に左右される可能性があります。これは、ホストとコンテナ間の通常の分離が何らかの形で損なわれていることも示唆しています (ただし、無害な方法です)。

要点を言うと、このサブスクリプション サポートはどのようにして実現されるのでしょうか。また、サブスクリプション ネットワーク経由で Red Hat が提供する Docker デーモンのカスタム ビルドに依存しているのでしょうか。

答え1

dockerRed Hat は、コンテナの実行時にエンタイトルメント情報をコンテナにマウントする「シークレット」パッチと呼ばれるパッチを提供しています。

パッチのより詳しい説明とアップストリームPRへのリンクは、プロジェクトアトミック/dockerリポジトリ:

https://github.com/projectatomic/docker/tree/docker-1.13.1-rhel#add-rhel-super-secrets-patchパッチ

注意: 適用されたすべてのパッチ情報を表示するには、ブランチの 1 つ (リンクは 'docker-1.3.1-rhel' ブランチに移動します) を選択する必要があります。

答え2

Red Hat Satellite によって管理される仮想マシンのライセンス方法を理解し、@Leynos のコメントを踏まえると、 に似たものがあると予想されます。virt-whoこれは、仮想化ホスト (vSphere、KVM など) と通信し、クエリを実行して VM の詳細を検索するサービスです。次に、Satellite で必要な API 呼び出しを実行して、VM がホストのデータセンター ライセンスを使用できるようにします。

Red Hat の Docker デーモンも同様の機能を提供し、コンテナーがサブスクライブされた Docker ホストから実行されていることを認識し、そのサブスクリプションを利用できるようにしてくれると期待しています。

また、ここ:

重要: このトピックで説明されているように、docker コマンドを使用してコンテナーを実行する場合、RHEL Atomic Host システムを登録してサブスクリプションをアタッチする必要はありません。ただし、コンテナー内で yum install コマンドを実行する場合、コンテナーは RHEL Atomic Host から有効なサブスクリプション情報を取得する必要があります。そうしないと失敗します。

つまり、コンテナまたはデーモンのいずれかに、ホストにクエリを実行してサブスクリプション情報 (およびおそらくリポジトリ情報も) を検索できるものがあります。

関連情報