第12章 コンテナーのプロビジョニング

Red Hat Satellite 6 では、オンプレミスレジストリーを作成して複数のソースからイメージをインポートし、コンテンツビューを使用してこれらのイメージをコンテナーに配信することができます。Satellite Server は、コンテナー実行用のサーバーとして機能する 1 つ以上の Docker コンピュートリソースの作成をサポートします。

イメージのインポート、このイメージをベースにしたコンテナーの起動、コンテナーのアクティビティーの監視、さらに伝搬可能な新規イメージ階層への状態のコミットが可能です。

コンテナーに関する情報は、Red Hat Enterprise Linux Atomic Host 7「Getting Started with Containers」 ガイドを参照してください。

コンテナーイメージのインポートやこれらのイメージを使用したコンテナーの作成については、この章をご利用ください。

12.1. コンテナープロビジョニングの要件

Red Hat Enterprise Linux Atomic Host を使用してコンテナーをプロビジョニングする前に、コンテナーレジストリーなど、イメージのソースが必要です。

Red Hat Satellite 6 はコンテナーイメージの 3 つのソースを使用します。

  • Satellite Server のアプリケーションライフサイクルの一部である、同期済みの Docker 形式のコンテナーイメージ。
  • Docker Hub からのパブリックイメージ。
  • Red Hat のコンテナーイメージのレジストリーを含む他の外部レジストリー。これは、「Satellite Server への外部レジストリーの追加」 で説明されています。

12.2. コンテナーイメージのインポート

Red Hat Container Catalog または Satellite に接続する他のイメージレジストリーからコンテナーイメージリポジトリーをインポートできます。

以下の手順はリポジトリー検出を使用して、インポートするコンテナーイメージを検索します。製品およびリポジトリーを手動で作成する情報は、『コンテンツ管理ガイド』の「カスタム製品の作成」を参照してください。

手順

コンテナーイメージリポジトリーをインポートして、製品を作成するか、製品と関連付けるには、以下の手順を実行します。

  1. Satellite Web UI で コンテンツ > 製品 に移動して、リポジトリーの作成 をクリックします。
  2. リポジトリータイプ リストから コンテナーイメージ を選択します。
  3. 検出するレジストリー フィールドには、イメージのインポート元となるレジストリーの URL を入力します。
  4. レジストリーのユーザー名 フィールドには、コンテナーのイメージレジストリーのユーザ名に対応する名前を入力します。
  5. レジストリーのパスワード フィールドには、入力したユーザ名に対応するパスワードを入力します。
  6. レジストリー検索パラメーター フィールドには、検索の絞り込みに使用する検索条件を入力して、検出 をクリックします。
  7. オプション: 検出されたリポジトリー リストをさらに絞り込むには、フィルター フィールドに、使用する追加の検索条件を入力します。
  8. 検出されたリポジトリー リストからインポートするリポジトリーを選択して、選択項目の作成 クリックします。
  9. オプション: 製品 リストから製品を作成するには、新しい製品 を選択します。
  10. 名前 フィールドに製品名を入力します。
  11. オプション: リポジトリー名リポジトリーラベル のコラムで、リポジトリー名とラベルを編集できます。
  12. リポジトリー作成の実行 をクリックします。
  13. リポジトリーの作成が完了したら、各新規リポジトリーをクリックして詳細情報を確認できます。
  14. オプション: リポジトリーにインポートするコンテンツをフィルタリングするには、リポジトリーをクリックして、同期タグの制限 に移動します。これをクリックし、Satellite への同期コンテンツを制限するタグを編集または追加します。
  15. コンテンツ > 製品 に移動し、製品名を選択します。
  16. 新規リポジトリーを選択し、同期開始 をクリックして同期プロセスを開始します。

同期の進捗状況を表示するには、コンテンツ > 同期の状態 に移動して、リポジトリーツリーを展開します。

同期が完了したら、Docker マニフェストの管理 をクリックして利用可能なマニフェストを一覧表示します。また、必要のなくなったマニフェストは、このリストから削除できます。

CLI をご利用の場合

  1. カスタムの Red Hat Container Catalog 製品を作成します。

    # hammer product create \
    --name "Red Hat Container Catalog" \
    --sync-plan "Example Plan" \
    --description "Red Hat Container Catalog content" \
    --organization "My_Organization"
  2. コンテナーイメージ用のリポジトリーを作成します。

    # hammer repository create \
    --name "RHEL7" \
    --content-type "docker" \
    --url "http://registry.access.redhat.com/" \
    --docker-upstream-name "rhel7" \
    --product "Red Hat Container Catalog" \
    --organization "My_Organization"
  3. リポジトリーを同期します。

    # hammer repository synchronize \
    --name "RHEL7" \
    --product "Red Hat Container Catalog" \
    --organization "My_Organization"

12.3. Satellite Server への外部レジストリーの追加

外部レジストリーのイメージからコンテナーを作成する場合は、先に Satellite にレジストリーを追加する必要があります。

外部のコンテナーレジストリーを追加するには、以下の手順を行います。

  1. Satellite Web UI で、コンテナー > レジストリー に移動して、レジストリーの作成 をクリックします。
  2. 名前 フィールドには、レジストリーの名前を入力します。
  3. URL フィールドには、https://registry.access.redhat.com などのレジストリーの場所を入力します。
  4. オプション: 説明 フィールドには、レジストリーエントリーの説明を入力します。
  5. ユーザー名 フィールドにには、レジストリーのユーザーアカウントに対応するユーザ名を入力します。
  6. パスワード フィールドには、レジストリーのユーザーアカウントに対するパスワードを入力します。
  7. ロケーション タブで、ロケーションを選択します。
  8. 組織 タブで、組織を選択します。
  9. 送信 をクリックして外部レジストリーを保存します。

CLI をご利用の場合

hammer docker registry create コマンドを使用してレジストリーを作成します。

# hammer docker registry create --name "Red Hat" \
--url "https://registry.access.redhat.com" \
--description "Red Hat Container Image Registry" \
--organization "Default_Organization" \
--location "Default_Location"

12.4. コンテナー名のパターンの管理

Satellite を使用してコンテナーの作成や管理を行う場合には、コンテナーはコンテンツビューのバージョン間や異なるステージの Satellite ライフサイクル環境間を移動するので、コンテナー名はステージごとに変化します。たとえば、アップストリームのリポジトリーから、ssh 名を使用してコンテナーイメージを同期する場合には、そのイメージを Satellite 製品と組織に追加してコンテンツビューの一部として公開する時に、コンテナーイメージは my_organization_production-custom_spin-my_product-custom_ssh という名前になる可能性があります。これが原因で、コンテナーイメージをプルする時に問題が発生する可能性があります。理由は、コンテナーレジストリーに、コンテナー名のインスタンスが 1 つしか含まれていない可能性があるためです。Satellite の命名規則の問題を回避するには、デフォルト名を上書きするようにレジストリー名のパターンを設定して、コンテナー名が後で使用するときに明確になるようにします。

制限事項

レジストリー名のパターンを使用してコンテナーの命名規則を管理する場合には、レジストリーの命名パターンが理由でグローバル一意名を生成する必要があるので、命名時に競合の問題が発生する可能性があります。以下の例を示します。

  • repository.docker_upstream_name のレジストリー名パターンを設定した場合に、Production ライフサイクルと同じリポジトリー名のコンテナーコンテンツが含まれるコンテンツビューを公開またはプロモートできません。
  • lifecycle_environment.name のレジストリー名パターンを設定した場合には、同じ名前を指定して 2 つ目のコンテナーリポジトリーを作成することができません。

コンテナーに対してレジストリーの命名パターンを定義する場合には、注意を払って進めて行く必要があります。

手順

レジストリー名パターンで、コンテナーの命名を管理するには、以下の手順を実行します。

  1. Satellite Web UI で、コンテンツ > ライフサイクル環境 に移動して、ライフサイクル環境を作成するか、編集するライフサイクル環境を選択します。
  2. コンテナーイメージのレジストリー エリアで、レジストリー名のパターン の右側にある編集アイコンをクリックします。
  3. 変数一覧と例を使用して、必要とされるレジストリー名のパターンを判断します。
  4. レジストリー名のパターン フィールドに、使用するレジストリー名のパターンを入力します。たとえば、repository.docker_upstream_name を使用するには、以下を入力します。

    <%= repository.docker_upstream_name %>
  5. 保存 をクリックします。

コンテナーのリポジトリーは即時に更新され、docker pull を使用して、指定の名前でコンテナーイメージをプルできます。

12.5. Satellite でのコンテナーイメージの管理

コンテンツビューでコンテナーイメージを管理するには、以下の手順を行います。

  1. Satellite web UI で コンテンツ > コンテンツビュー に移動して、 新規ビューの作成 をクリックします。
  2. 名前 フィールドには、コンテナー を入力します。これにより、自動的に ラベル フィールドにデータが投入されます。
  3. 説明 フィールドには、Container image for Red Hat Enterprise Linux 7 など、説明を入力します。
  4. 複合コンテンツビューを使用して他のコンテンツビューを使用する場合には、複合ビュー のチェックボックスを選択します。
  5. オプション: 複合コンテンツビュー を選択する場合は、新しいバージョンの複合コンテンツビューが作成された場合に、複合ビューを自動公開するかどうかを選択します。
  6. 保存 をクリックして、コンテンツビューを作成します。
  7. Docker コンテンツ のサブタブに移動して、追加 をクリックします。
  8. Red Hat Enterprise Linux 7 Server iイメージのコンテナーリポジトリーを選択します。
  9. リポジトリーの追加 をクリックします。
  10. バージョン に移動して、新規バージョンの公開 をクリックします。

バージョンの 説明 を入力します。わかりやすい説明を入力しておくことで、新しいコンテンツバージョンの記録をするのに役立ちます。

Satellite Server がビューの新バージョンを作成し、ライブラリー環境に公開します。

プロモート をクリックして、アプリケーションライフサイクルの環境でこのコンテンツビューをプロモートすることもできます。

CLI をご利用の場合

  1. リポジトリー ID 一覧を取得します。

    # hammer repository list --organization "My_Organization"
  2. コンテンツビューを作成して、リポジトリーを追加します。

    # hammer content-view create \
    --name "Containers" \
    --description "Container image for Red Hat Enterprise Linux 7" \
    --repository-ids 8 \
    --organization "My_Organization"
  3. ビューを公開します。

    # hammer content-view publish \
    --name "Containers" \
    --description "Initial Content View for our container image" \
    --organization "My_Organization"

12.6. Red Hat Enterprise Linux Atomic Host の設定

Docker 形式のコンテナー向けの Red Hat API を Satellite Server に公開するなど、Satellite に接続する前に Atomic Host を設定します。コンテナーに関する情報は、Red Hat Enterprise Linux Atomic Host 7『Getting Started with Containers』ガイドを参照してください。

  1. Atomic Host にログインし、/etc/sysconfig/docker ファイルを編集します。

    $ vi /etc/sysconfig/docker
  2. OPTIONS パラメーターを見つけ、API を公開するように編集します。

    OPTIONS='--selinux-enabled -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375'
    重要

    ポート 2375 または 2376 のいずれかを使用して接続します。Satellite Server には、これらのポートへのアクセスを許可する特定の SELinux ルールが含まれます。別のポートを使用すると、認証が失敗してしまいます。

  3. ポート 2375 のファイアウォールを開放します。

    # firewall-cmd --add-port=2375/tcp
    # firewall-cmd --add-port=2375/tcp --permanent
  4. Satellite Server 証明書をインポートします。

    $ curl http://satellite.example.com/pub/katello-server-ca.crt \
    -o /etc/pki/ca-trust/source/anchors/katello-server-ca.crt
    $ update-ca-trust
  5. docker サービスを再起動します。

    # systemctl restart docker

12.7. Satellite Server への Atomic Host 接続の追加

Satellite Server のコンピュートリソースに Red Hat Enterprise Linux Atomic 接続を追加するには、以下の手順を行います。

  1. Satellite Web UI で インフラストラクチャー > コンピュートリソース に移動して、コンピュートリソースの作成 をクリックします。
  2. 名前 フィールドに、リソースの名前を入力します。
  3. プロバイダー の一覧から Docker を選択します。
  4. オプション: 説明 フィールドには、リソースの説明を追加できます。
  5. ロケーション タブで、使用するロケーションを選択します。
  6. 組織 タブで、使用する組織を選択します。
  7. 送信 をクリックして保存します。

CLI をご利用の場合

hammer compute-resource create コマンドで接続を作成します。

# hammer compute-resource create --provider docker \
--name "Atomic" --url "http://atomic.example.com:2375" \
--organizations 'Default Organization' --locations 'Default Location'

12.8. コンテナーの作成

この手順を使用して Satellite にコンテナーを作成します。Satellite Web UI には、作成プロセスを順を追って進めるウィザードが含まれています。外部レジストリー、コンテンツビュー、Docker Hub から、Satellite に追加するコンテナーイメージを選択できます。

  1. Satellite web UI で、コンテナー > コンテナーの作成 に移動します。
  2. デプロイ先 リストから、使用するコンピュートリソースを選択します。
  3. ロケーション タブで、ロケーションを選択します。
  4. 組織 タブで、組織を選択します。
  5. 次の手順 をクリックします。

コンテナーを作成する方法には 3 つのオプションがあります。

  • コンテンツビューのコンテナーイメージからの作成
  • Docker Hub のコンテナーイメージからの作成
  • 外部レジストリーのコンテナーイメージからの作成

コンテンツビューからのコンテナーの作成

  1. ライフサイクル環境 リストから、使用するライフサイクル環境を選択します。
  2. コンテンツビュー リストから、使用するコンテナーイメージを選択します。
  3. レジストリー リストから、使用するレジストリーを選択します。
  4. タグ リストから、使用するタグを選択します。
  5. Capsule リストから、使用する Capsule を選択します。
  6. 次の手順 をクリックします。

Docker Hub からのコンテナーの作成

  1. Docker Hub タブを選択して、検索 フィールドに、使用する Docker コンテナーを入力します。
  2. タグ フィールドには、使用するコンテナーイメージタグの名前を入力し、イメージの検索 をクリックします。
  3. 使用するコンテナーイメージを選択して、次の手順 をクリックします。

外部レジストリーからのコンテナーの作成

  1. レジストリー リストから、使用するレジストリーを選択します。
  2. 検索 フィールドには、使用するコンテナーイメージの名前を入力します。
  3. タグ フィールドには、使用するコンテナーイメージに関連付けられたタグを入力します。
  4. イメージの検索 をクリックして使用するイメージを選択し、次の手順 をクリックします。

コンテナー作成プロセスの完了

  1. 名前 フィールドには、新規コンテナーの名前を入力します。
  2. command フィールドには、コンテナーで実行するコマンドを入力します。
  3. エントリーポイント フィールドには、コンテナーの起動時に自動的にコンテナーが実行するコマンドを入力します。デフォルトのエントリーポイントは、/bin/sh -c です。
  4. コンピュートオプション タブを選択します。
  5. CPU セット フィールドで、コンテナーに CPU を割り当てます。たとえば、0-2,16 は CPU 0、1、2 および 16 を表します。
  6. CPU シェア フィールドでは、コンテナーの CPU シェアを割り当てます。これにより、コンテナー化されたタスクに提供される CPU 時間のシェアが設定されます。
  7. メモリー フィールドには、コンテナーに割り当てるメモリーサイズを入力します。
  8. 次の手順 をクリックします。
  9. 環境変数 フィールドには、LANG=en_US.UTF-8 などの環境変数セットを定義します。
  10. 公開されたポート (Exposed Ports) フィールドには、コンテナーで開くポートの番号を入力します。たとえば、コンテナーへの SSH 通信は、ポート 22 を開きます。
  11. DNS フィールドには、コンテナーの DNS サーバーを入力します。
  12. 実行 のチェックボックスを選択して、作成後に自動的にコンテナーを起動します。
  13. 送信 をクリックして、コンテナーを作成します。

CLI をご利用の場合

以下では、hammer docker container create コマンドの例を 3 つ紹介しています。

  • コンテンツビューからコンテナーを作成します。

    # hammer docker container create --compute-resource "Atomic" \
    --repository-name "rhel7" --tag "latest" --name "docker-test1" \
    --command "bash" --organizations "My_Organization" --locations "New York"
  • 次に Docker Hub からプロビジョニングします。

    # hammer docker container create --compute-resource "Atomic" \
    --repository-name "docker.io/redhat" --tag latest \
    --name "docker-test2" --command bash --organizations "My_Organization" \
    --locations "New York"
  • 外部レジストリーからプロビジョニングします。

    # hammer docker container create --compute-resource "Atomic" \
    --registry-id 1 --repository-name "rhel" --tag latest \
    --name "docker-test3 --command bash --organizations "My_Organization" \
    --locations "New York"

12.9. コンテナーレジストリーの認証管理

デフォルトでは、Satellite のイメージレジストリーのコンテナーにアクセスするには認証が必要です。docker login コマンドを使用して Satellite にログインします。次に、docker pulldocker search コマンドで、Satellite パーミッションをもとにコンテナーにアクセスできます。

ライフサイクル環境で管理する Satellite イメージレジストリーのコンテナーイメージにアクセスするのにユーザーの認証をするかどうかを指定できます。たとえば、認証要件なしに Production ライフサイクルからコンテナーイメージをプルできるようにしたり、認証済みのユーザーだけに Development および QA 環境へのアクセスを制限したりすることもできます。

手順

Satellite イメージレジストリーの認証設定を管理するには、以下の手順を実行します。

  1. Satellite Web UI で、コンテンツ > ライフサイクル環境 に移動して、認証管理するライフサイクル環境を選択します。
  2. このライフサイクル環境に認証なしでアクセスできるようにするには、非認証のプル のチェックボックスを選択します。認証なしのアクセスを制限するには、非認証のプル チェックボックスのチェックを外します。
  3. 保存 をクリックします。

12.10. コンテナーの起動、コミット、削除

コンテナーの起動または停止

コンテナーの作成時には、デフォルトの状態は無効となっています。コンテナーを有効化して、コンピュートリソースでコンテナー化されたアプリケーションのプロセスを開始します。ホストは、Web アプリケーションの場合と同様にコンテナーと通信できます。

  1. Satellite web UI で、コンテナー > すべてのコンテナー に移動します。
  2. 既存のコンテナーリストから、任意のコンテナーを選択し、電源オン をクリックします。コンテナーを停止するには、電源オフ をクリックします。

コンテナーのコミット

イメージからコンテナーを起動すると、書き込み可能な階層がこのイメージの上層に追加されます。コンテナーをコミットすると、コンテナーのステータスを保存するイメージ階層が作成されます。コンテナーをコミットするたびに、変更を保存するために新しいイメージ階層が追加されます。たとえば、コンテナーが Docker Hub からプルしたイメージをもとにしている場合には、コミットされた変更は Docker Hub にプッシュし直されます。

  1. Satellite web UI で、コンテナー > すべてのコンテナー に移動します。
  2. 既存のコンテナーリストから、任意のコンテナーを選択し、コミット をクリックします。
  3. user/my-rhel-image などのリポジトリー名を入力します。
  4. タグをイメージに割り当てます。
  5. 連絡先情報を入力します。
  6. コミットについて分かりやすいコメントを入力します。
  7. 送信 をクリックします。

コンテナーの削除

  1. Satellite web UI で、コンテナー > すべてのコンテナー に移動します。
  2. 既存のコンテナーリストから、任意のコンテナーを選択し、削除 をクリックします。
  3. 警告ウィンドウで OK をクリックして削除を確定します。