Red Hat Training

A Red Hat training course is available for Red Hat Satellite

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

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

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

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

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

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

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

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

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

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

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

コンテナーイメージのインポートは、以下の手順を実行します。

  1. Red Hat Container Catalog 用のカスタム製品を作成します。
  2. Red Hat Container Catalog registry (http://registry.access.redhat.com/) または Satellite のサードパーティーのレジストリーなど、使用するコンテナーカタログにリンクするリポジトリーを追加します。
  3. レジストリーのリポジトリーと同期します。

Red Hat container Catalog のカスタム製品を作成して、イメージリポジトリーを作成するには、以下の手順を実行します。

  1. Satellite Web UI で コンテンツ > 製品 に移動して、新製品 をクリックします。
  2. 名前 フィールドには、製品名を入力します。
  3. 対象の製品の追加情報を入力し、選択します。
  4. 保存 をクリックして製品を作成します。
  5. リポジトリーの作成 をクリックします。
  6. 名前 フィールドには、リポジトリーの名前を入力します。
  7. ラベル フィールドには、リポジトリーの内部 ID を入力します。
  8. タイプ の一覧から docker を選択します。
  9. URL フィールドには、ソースとして使用するレジストリーの URL を入力します。https://registry.hub.docker.com/https://registry.hub.docker.com など、使用する別のソースの URL などが例として挙げられます。
  10. アップストリームのリポジトリー名 フィールドには、リポジトリーの名前を入力します。
  11. 保存 をクリックして、リポジトリーを作成し、Satellite のリポジトリーリストで表示します。
  12. 新規リポジトリーを選択して、同期開始 をクリックして同期プロセスを開始します。

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

同期が完了したら、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 "ACME"
  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 "ACME"
  3. リポジトリーを同期します。

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

11.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"

11.4. 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 "ACME"
  2. コンテンツビューを作成して、リポジトリーを追加します。

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

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

11.5. 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

11.6. 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 "ACME's Atomic" --url "http://atomic.example.com:2375" \
--organizations 'Default Organization' --locations 'Default Location'

11.7. コンテナーの作成

この手順を使用して 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 "ACME's Atomic" \
    --repository-name "rhel7" --tag "latest" --name "docker-test1" \
    --command "bash" --organizations "ACME" --locations "New York"
  • 次に Docker Hub からプロビジョニングします。

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

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

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

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

コンテナーの作成時には、デフォルトの状態は無効となっています。コンテナーを有効化して、コンピュートリソースでコンテナー化されたアプリケーションのプロセスを開始します。ホストは、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 をクリックして削除を確定します。