第10章 コンテナーイメージの管理

コンテナー化とは、システムレベルの仮想化メソッドを操作することです。標準的な仮想マシンはハイパーバイザーが各システムに割り当てるリソースを消費しますが、コンテナーはホストのカーネルを直接使用する個別システムのように動作します。つまり、コンテナー内のプロセスは、ホストや他のコンテナーとリソースを共有することになります。これにより、単一ホストから複数のシステムを効率的に実行できるようになります。Linux コンテナーはセキュリティーを改善する一方で、アプリケーションのデプロイメントが迅速にでき、簡単なテスト、メンテナンス、トラブルシューティングも提供します。

コンテナーについての詳細情報は、Red Hat Enterprise Linux Atomic Host 7コンテナーの使用ガイド を参照してください。

Docker は、Linux コンテナーとそのアプリケーションのデプロイメントを自動化するオープンソースのプロジェクトです。これは、アプリケーションとそのランタイム依存関係をコンテナーに格納してパッケージ化する機能を提供します。

Docker フォーマットのコンテナーは以下で構成されています。

コンテナー
アプリケーションのサンドボックスです。各コンテナーは必要な設定データが格納されているイメージをベースとしています。イメージからコンテナーを起動すると、書き込み可能なレイヤーがイメージの上に追加されます。コンテナーをコミットする際は毎回、変更を保存するために新規のイメージレイヤーが追加されます。
イメージ
変更されることのない、コンテナー設定の静的なスナップショットです。コンテナーへの変更は新規イメージレイヤーを作成することでのみ保存されます。各イメージは 1 つ以上の親イメージに依存します。
プラットフォームイメージ
親を持たないイメージです。ランタイム環境、パッケージ、コンテナー化されたアプリケーションの実行に必要なユーティリティーなどを定義します。プラットフォームイメージは読み取り専用となるため、変更はすべて上に重ねられるコピーイメージに反映されます。
レジストリー
ダウンロード可能なイメージが含まれる公開または非公開のアーカイブです。レジストリーによっては、イメージをアップロードして他のユーザーに利用可能にすることもできます。Red Hat Satellite では、ローカルおよび外部レジストリーからイメージをインポートすることができます。Satellite 自体はホストのイメージレジストリーとして機能できますが、ホストは変更をレジストリーに戻すことはできません。
タグ
リポジトリーにあるイメージを、通常はイメージに保存されたアプリケーションのバージョンで区別するために使用されるマークです。リポジトリーは、コンテナーレジストリーの同様のイメージを分類するために使用されます。イメージには固有の英数字の ID しか設定できないので、repository:tag などの形式で命名することで、ヒューマンリーダブルな方法でイメージを識別できるようになります。

Red Hat Satellite 6 では、オンプレミスレジストリーを作成し、複数のソースからイメージをインポートし、コンテンツビューを使用してそれらをコンテナーに配信することができます。Satellite Server は、コンテナーを実行するためのサーバーとして機能する 1 つ以上の Docker コンピュートリソースの作成をサポートします。これによりイメージをインポートしこのイメージをベースとしたコンテナーを開始し、コンテナーのアクティビティーをモニターし、その状態を新規のイメージレイヤーにコミットしてさらに伝達するようにできます。

コンテンツをインポートしてコンテナーイメージのライフサイクルを管理することは、RPM や Puppet モジュールといった他のコンテンツタイプの管理に似ています。製品とバンドルされたリポジトリーを設定し、コンテンツビューにこれらのリポジトリーを含めます。

10.1. Red Hat Container Catalog からのコンテナーイメージのインポート

Red Hat Container Catalog は、Satellite Server にインポート可能なコンテナーイメージのセットを提供します。コンテンツをインポートするプロセスは、Red Hat コンテンツ用のリポジトリーを有効にするものとは異なります。プロセスは以下のようになります。

  1. Red Hat Container Catalog 用のカスタム製品を作成します。
  2. Red Hat Container Catalog レジストリー (http://registry.access.redhat.com/) にリンクするリポジトリーを追加します。
  3. レジストリーのリポジトリーと同期します。

Web UI をご利用の場合

コンテンツ > 製品 に移動し、新製品 をクリックします。新しい製品のフォームが表示されます。以下の詳細情報を入力します。

  • 名前 - 製品の簡単な名前。Red Hat Container Catalog と入力します。
  • ラベル - リポジトリーの内部 ID。rhcc と入力します。
  • GPG キー - 製品全体の GPG キー。これは空白にします。
  • 同期プラン - 製品の同期計画。これは Example Plan に割り当てることができます。
  • 説明 - 製品の簡単な説明。Red Hat Container Catalog content と入力します。

保存 をクリックします。

カスタム製品を作成したら、製品のリポジトリー画面が表示されます。リポジトリーの作成 をクリックし、新しいリポジトリー用のフォームを表示します。以下の詳細情報を入力します。

  • 名前 - リポジトリーの簡単な名前。RHEL7 と入力します。
  • ラベル - リポジトリーの内部 ID。RHEL7 と入力します。
  • タイプ - リポジトリーのタイプ。docker を選択すると新たなフィールドが表示されます。
  • URL - ソースとして使用するレジストリーの URL。http://registry.access.redhat.com/ と入力します。
  • アップストリームリポジトリー名 - レジストリー上のリポジトリー名。例えば、rhel7 と入力します。
注記

https://access.redhat.com/containers/ で他のリポジトリーを検索、表示することもできます。

保存 をクリックすると、新規リポジトリーが記載された製品のリポジトリー画面に戻ります。同期開始 をクリックして同期プロセスを開始します。数分すると、Satellite Server が同期を完了します。Docker マニフェストの管理 をクリックして利用可能なマニフェストを一覧表示します。この一覧から必要に応じて不要なマニフェストを削除することができます。

注記

Web UI でも同期の進捗状況を確認することができます。コンテンツ > 同期の状態 に移動して、製品/リポジトリーのツリーを展開します(または すべて展開 をクリックします)。

CLI をご利用の場合

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

# hammer product create \
--name "Red Hat Container Catalog" \
--sync-plan "Example Plan" \
--description "Red Hat Container Catalog content" \
--organization "ACME"

コンテナーイメージ用のリポジトリーを作成します。

# 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"

次にリポジトリーを同期します。

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

これでコンテナーイメージが同期されました。

10.2. 他のイメージレジストリー からのコンテナーイメージのインポート

Red Hat Container Catalog からコンテナーイメージをインポートする他に、Red Hat Satellite 6 ではコミュニティーベースや内部のレジストリーなどの他のイメージレジストリーからコンテンツをインポートすることもできます。サードパーティーレジストリーからインポートするプロセスは、Red Hat Container Catalog からイメージをインポートするものと同様のものです。

  1. カスタム製品を作成します。
  2. 製品にコンテナーイメージ用のリポジトリーを追加し、それを外部レジストリー上にあるリポジトリーにリンクします。
  3. レジストリーのリポジトリーと同期します。

以下の手順では、DockerHub レジストリー (https://registry.hub.docker.com) からの公式 Fedora イメージを使ってこの手順を実行します。

Web UI をご利用の場合

コンテンツ > 製品 に移動し、新製品 をクリックします。新しい製品のフォームが表示されます。以下の詳細情報を入力します。

  • 名前 - 製品の簡単な名前。Fedora と入力します。
  • ラベル - 製品の内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
  • GPG キー - 製品全体の GPG キー。これは空白にします。
  • 同期プラン - 製品の同期計画。これは Example Plan に割り当てることができます。
  • 説明 - 製品の簡単な説明。Fedora content と入力します。

保存 をクリックします。

Fedora 向けカスタム製品を作成したら、製品のリポジトリー画面が表示されます。リポジトリーの作成 をクリックし、新しいリポジトリー用のフォームを表示します。以下の詳細情報を入力します。

  • 名前 - リポジトリーの簡単な名前。Fedora Docker Images と入力します。
  • ラベル - リポジトリーの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
  • タイプ - リポジトリーのタイプ。docker を選択すると新たなフィールドが表示されます。
  • URL - ソースとして使用するレジストリーの URL。https://registry.hub.docker.com/ と入力します。
  • アップストリームリポジトリー名 - レジストリー上のリポジトリー名。例えば、fedora/ssh と入力します。
注記

https://hub.docker.com/explore/ で他のリポジトリーを検索、表示することもできます。

保存 をクリックすると、新規リポジトリーが記載された製品のリポジトリー画面に戻ります。同期開始 をクリックして同期プロセスを開始します。数分すると、Satellite Server が同期を完了します。Docker マニフェストの管理 をクリックして利用可能なマニフェストを一覧表示します。この一覧から必要に応じて不要なマニフェストを削除することができます。

注記

Web UI でも同期の進捗状況を確認することができます。コンテンツ > 同期の状態 に移動して、製品/リポジトリーのツリーを展開します(または すべて展開 をクリックします)。

CLI をご利用の場合

カスタムの fedora 製品を作成します。

# hammer product create \
--name "Fedora" \
--sync-plan "Example Plan" \
--description "Fedora content" \
--organization "ACME"

コンテナーイメージ用のリポジトリーを作成します。

# hammer repository create \
--name "Fedora/SSH" \
--content-type "docker" \
--url "https://registry.hub.docker.com" \
--docker-upstream-name "fedora/ssh" \
--product "Fedora" \
--organization "ACME"

次にリポジトリーを同期します。

# hammer repository synchronize \
--name "Fedora/SSH" \
--product "Fedora" \
--organization "ACME"

これでコンテナーイメージが同期されました。

10.3. コンテンツビューによるコンテナーイメージの管理

コンテンツビューを使用して、アプリケーションライフサイクルにわたってコンテナーイメージを管理します。このプロセスでは、RPM および Puppet モジュールが使用するものと同じ公開とプロモーションのメソッドを使用します。

Web UI をご利用の場合

コンテンツ > コンテンツビュー に移動し、新規ビューの作成 をクリックします。ビューの詳細 のフォームが表示されます。以下の情報を入力します。

  • 名前 - ビューの簡単な名前。Containers と入力します。
  • ラベル - ビューの内部 ID。Red Hat Satellite 6 では、名前 に入力した内容に基づいてこのフィールドに値が自動的に入力されます。
  • 説明 - ビューの簡単な説明。Container image for Red Hat Enterprise Linux 7 と入力します。
  • 複合ビュー - 複合コンテンツビューを使用するかどうかを定義します。チェックを外しておきます。

保存 をクリックします。

これで新規コンテンツビューエントリーが作成されます。Docker コンテンツ のサブタブに移動し、追加 をクリックします。Red Hat Enterprise Linux 7 Server イメージ用のコンテナーリポジトリーを選択します。リポジトリーの追加 をクリックします。これでこのリポジトリーからコンテナーイメージがコンテンツビューに追加されます。

これでコンテンツビューを公開する準備ができました。バージョン に移動し、新規バージョンの公開 をクリックします。Satellite Server が新規バージョン (バージョン 1) についての詳細を提供し、説明 にこのバージョンについての説明が入力できます。ここには、新規コンテンツビューの変更を記録しておくことができます。Initial content view for our container image と入力し、保存 をクリックします。

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

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

CLI をご利用の場合

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

# hammer repository list --organization "ACME"

この例では、コンテナー rhel7 のリポジトリーは ID に 8 を使用します。コンテンツビューを作成して、リポジトリーを追加します。

# hammer content-view create \
--name "Containers" \
--description "Container image for Red Hat Enterprise Linux 7" \
--repository-ids 8 \
--organization "ACME"

ビューを公開します。

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

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

10.4. Docker タグによるコンテナーイメージの管理

コンテナーイメージのなかには Docker タグを使用してバージョン番号や各バージョンについての基本的な情報を特定するものもあります。

Web UI をご利用の場合

コンテンツ > Docker タグ に移動して、コンテナーベースの製品向けのタグ一覧を表示します。タグをクリックすると特定イメージについての情報が表示されます。

CLI をご利用の場合

Docker タグとその ID を一覧表示します。

# hammer docker tag info --id 218 --organization "ACME"

タグ ID を使用して Docker タグを表示します。

# hammer docker tag info --id 218

10.5. 章の概要

本章では、独自のレジストリー作成やアプリケーションライフサイクルにわたるコンテナーイメージの管理方法など、Red Hat Satellite 6 におけるコンテナーイメージコンテンツの基本的な管理方法について説明しました。

次章では、OSTree コンテンツの管理方法を説明します。