Red Hat Training
A Red Hat training course is available for Red Hat Satellite
第6章 コンテナーの使用
Docker は、Linux コンテナー内でのアプリケーションの導入を自動化し、アプリケーションにラインタイム依存パッケージを持たせて 1 つのコンテナーにパッケージ化する機能を提供するオープンソースプロジェクトです。Linux コンテナーでは安全性を強化する一方、迅速なアプリケーション導入およびテスト、メンテナンス、トラブルシューティングなどの簡略化を可能にします。詳細については、Red Hat カスタマーポータル[1] の Get Started with Docker Formatted Container Images on Red Hat Systems (Docker フォーマットのコンテナーイメージの使用方法)についての記事を参照してください。
Docker フォーマットのコンテナーは以下の部分で構成されています。
コンテナー
: アプリケーションサンドボックスです。各コンテナーは必要な設定データを保持するイメージをベースとしています。イメージからコンテナーを起動すると、書き込み可能なレイヤーがイメージの上部に追加されます。コンテナーをコミットする際はいつでも、変更を保存するために新規のイメージレイヤーが追加されます。イメージ
: 決して変更されることのない、コンテナーの設定の静的なスナップショットです。コンテナーへの変更は新規イメージレイヤーを作成することによってのみ保存できます。各イメージは 1 つまたは複数の親イメージに依存します。プラットフォームイメージ
: 親を持たないイメージです。プラットフォームイメージは、ランタイム環境、パッケージ、コンテナー化されたアプリケーションの実行に必要なユーティリティーなどを定義します。プラットフォームイメージは書き込みができないため、変更はすべて上に重ねられるコピーイメージに反映されます。Red Hat Satellite から Red Hat Enterprise Linux プラットフォームイメージにアクセスする方法については、例6.1「Satellite での Red Hat Enterprise Linux コンテナーの作成」 を参照してください。レジストリー
: ダウンロードできるイメージが含まれる公開または非公開のアーカイブです。一部のレジストリーを使うと、イメージをアップロードして他のユーザーに利用可能にすることができます。Red Hat Satellite では、ローカルおよび外部レジストリーからイメージをインポートすることができます。Satellite 自体はホストのイメージレジストリーとして機能できますが、ホストは変更をレジストリーに戻すことはできません。詳細は、「コンテナーの作成」 を参照してください。タグ
: リポジトリーにあるイメージを、通常はイメージに保存されたアプリケーションのバージョンで区別するために使用されるマークです。リポジトリーは、コンテナーレジストリーの同様のイメージを分類するために使用されます。イメージには固有の英数字の ID のみを設定できるので、repository:tag などの形式により、人間の読み取り可能な方法でイメージを識別できます。詳細は、「コンテナータグの使用」 および 「リポジトリーの管理」 を参照してください。
Red Hat Satellite では、オンプレミスレジストリーを作成し、複数のソースからイメージをインポートし、コンテンツビューを使用してそれらをコンテナーに配信することができます (イメージをコンテンツビューにロードする方法の詳細については、「リポジトリーのコンテンツビューへの追加」 を参照してください)。Satellite は、コンテナーを実行するためのサーバーとして機能する 1 つ以上の Docker コンピュートリソースの作成をサポートします。これにより、イメージをインポートし、このイメージをベースとしたコンテナーを開始し、コンテナーのアクティビティーをモニターし、その状態を新規のイメージレイヤーにコミットしてさらに伝播するようにできます。
6.1. コンテナーの管理
以下のセクションでは、コンテナーを作成し、表示し、開始し、停止し、コミットする方法について示します。
前提条件
Red Hat Satellite では、コンテナーを Docker プロバイダータイプのコンピュートリソースのみにデプロイできます。そのため、コンテナーの表示または作成の初回の試行時に、Satellite によって Docker コンピュートリソースの作成を求めるプロンプトが出されます。これを実行するには、まずコンテナーホストを作成し、このホストをコンピュートリソースとして指定します。
手順6.1 コンテナーホストを準備するには、以下を実行します。
- Red Hat カスタマーポータルにある Get Started with Docker Formatted Container Images on Red Hat Systems (Docker フォーマットのコンテナーイメージの使用方法) ガイドの Getting Docker in RHEL 7 (RHEL 7 の Docker の取得) セクション[2] で説明されているように、イメージをホストする Red Hat Enterprise Linux 7 サーバーを準備し、このサーバーで
docker
サービスを有効にします。コンテナーホストは、Satellite Server と同じマシンにデプロイすることも、独立してデプロイすることもできます。注記
現在、Red Hat Enterprise Linux 7 はコンテナーホスト用にサポートされる唯一のシステムです。docker パッケージは rhel-7-server-extras-rpms リポジトリーで利用できます。Red Hat Enterprise Linux 6 システムは、現在のところコンテナーをホストするシステムとしてサポートされていません。 - コンテナーホストで以下のコマンドを実行し、Satellite Server の CA 証明書をインストールします。
rpm -Uvh https://satellite.example.com/pub/katello-ca-consumer-latest.noarch.rpm
ここで、satellite.example.com は Satellite Server の完全修飾ドメイン名です。コンテナーホストが Satellite ホストとしてすでに登録されている場合にはこの手順を省略します。 - コンテナーホストのロケーションに応じて以下のタスクを実行します。
- コンテナーホストが Satellite Server と同じマシンにある場合には、以下を実行します。
- docker ユーザーグループを作成し、foreman ユーザーをそれに追加します。
# groupadd docker # usermod -aG docker foreman
- 以下のように
/etc/sysconfig/docker
ファイルの OPTIONS 変数を変更します。OPTIONS='--selinux-enabled -G docker'
- 影響を受けるサービスを再起動して変更を適用します。
# systemctl restart docker.service # katello-service restart
- コンテナーホストが Satellite Server 以外のマシンにある場合は、以下を実行します。
- コンテナーホストのポートを開き、Satellite Server と通信します。これを実行するには、以下のように
/etc/sysconfig/docker
ファイルの OPTIONS 変数を変更します。OPTIONS='--selinux-enabled -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
TLS が有効な場合はポート2376
を使用できます。 - 以下のように docker サービスを再開し、設定を検証します。
# systemctl restart docker.service # systemctl status docker.service
手順6.2 Docker コンピュートリソースを作成するには、以下を実行します。
- ポート 5000 が Satellite Server で有効にされていることを確認します。コンテナーホストはこのポートを使用して Satellite Server のコンテンツビューからイメージをプルします。
- 「コンピュートリソース」 にあるようにコンピュートリソースを作成します。コンテナーホストのロケーションに応じてリソース URL を指定します。
- コンテナーホストが Satellite Server と同じマシン上にある場合、unix://var/run/docker.sock をリソース URL として設定します。
- コンテナーホストが Satellite Server 以外のマシンにある場合、以下の形式で URL を指定します。
http://container_host_fqdn:2375
ここで、container_host_fqdn はコンテナーホストの完全修飾ドメイン名を表し、Satellite との通信用にコンテナーホストで開かれるポート番号は2375
か、TLS を使用している場合は2376
にすることができます。
- テスト接続 をクリックしてコンテナーホストが利用できるかどうかをテストします。
- 送信 をクリックしてコンピュートリソースを作成します。
6.1.1. コンテナーの作成
Satellite に 1 つ以上の Docker コンピュートリソースがある場合、コンテナーを作成することができます。新規コンテナーを作成するには、手順6.3「コンテナーを作成するには、以下を実行します。」 にある手順に従います。既存コンテナーをモニターする方法については、「コンテナーのモニター」 を参照してください。
コンテナーを作成するには、まずイメージをインポートする必要があります。これは、プラットフォームイメージまたは先に作成したレイヤー化したイメージである場合があります。Satellite は以下のイメージソースをサポートします。
- ローカルコンテンツ: コンテナーの作成時に
コンテンツビュー
オプションによって表されます。このオプションを使用すると、一部のコンテンツビューおよびライフサイクル環境で Capsule Server にすでに存在するリポジトリーからイメージをインポートすることができます。ローカルレジストリーを作成し、これにデータを設定する方法についての詳細は、「リポジトリーの管理」 を参照してください。 - Docker ハブ: Docker ハブレジストリーを検索して、そこからイメージをプルすることができます。検証済みのコンテンツを含む信頼されたイメージのみをプルするようにしてください。
- 外部レジストリー: 先に作成した外部レジストリーからイメージをインポートできます。レジストリーを Red Hat Satellite で作成する方法についての詳細は、「外部レジストリーのインポート」を参照してください。
注記
既存コンテナーの設定を変更することはできません。設定を変更するには、手順6.3「コンテナーを作成するには、以下を実行します。」 で説明されているように、変更された設定を含む交換用のコンテナーを作成する必要があります。そのため、実際のワークフローでコンテナーが置き換え可能であることを確認してください。
手順6.3 コンテナーを作成するには、以下を実行します。
- コンテナー → 新規コンテナー に移動します。または、コンテナー → すべてのコンテナー に移動して 新規コンテナー をクリックします。
- コンテナー作成の Preliminary ステージで、以下の設定を行います。
- ロケーション タブで、新規コンテナーを利用可能にするロケーションを選択します。
- 組織 タブで、新規コンテナーを利用可能にする組織を選択します。
次へ をクリックして進みます。 - コンテナー作成の イメージ ステージでは、コンテナーのベースとして機能するイメージをインポートします。これは、プラットフォームイメージの場合も、先に作成したレイヤー化されたイメージである場合もあります。以下のいずれかのオプションから選択してください。
- コンテンツビュー タブを選択してイメージをライフサイクル環境からインポートします。ライフサイクル環境、コンテンツビュー、リポジトリー、タグおよび Capsule Server を指定します。
- Docker ハブ タブを選択し、Docker ハブレジストリーからイメージをインポートします。イメージ名を 検索 フィールドに入力すると、Satellite はコンピュートリソースを自動的に検索します。眼鏡 (Looking Glass) のアイコンをクリックして Docker ハブを検索します。検索結果の一覧からイメージを選択し、ドロップダウンリストからタグを選択します。
- 外部レジストリー タブを選択し、既存のレジストリーからイメージをインポートします。ドロップダウンメニューからレジストリーを選択し、イメージ名でこれを検索します。Satellite は タグ フィールドに、選択したイメージ名に使用できるタグを設定します。詳細は、「外部レジストリーのインポート」を参照してください。
次へ をクリックして進みます。 - コンテナー作成の 設定 ステージでは、以下の設定を行います。
- コンテナー名を指定します。
- コンテナー内で実行するコマンドを指定します。
- コンテナーが起動するとすぐに実行されるコマンドのエントリーポイントを指定します。デフォルトのエントリーポイントは
/bin/sh -c
です。 - CPU をコンテナーに割り当てます。たとえば、
0-2,16
は CPU 0, 1, 2、および 16 を表します。 - コンテナーに使用できる CPU 時間の相対的配分を定義します。
- コンテナーのメモリー制限を指定します。たとえば、
512m
により、コンテナーのメモリー使用が 512 MB までに制限されます。
次へ をクリックして進みます。 - 環境 というコンテナー作成の最終ステージでは、pseudo-tty を割り当てる必要があるかどうかを選択し、STDIN、STDOUT、および STDERR をコンテナーに割り当てます。環境変数の追加 をクリックしてコンテナーのカスタム環境変数を作成します。Run? (実行?) チェックボックスを選択して作成後のコンテナーを自動的に開始します。
- 送信 をクリックしてコンテナーを作成します。
コンテナーの作成後に、Satellite はコンテナーのメタデータの概要を表示します。デフォルトで、新規コンテナーは無効にされています (コンテナーの作成時に Run? (実行?) チェックボックスを選択していない場合)。コンテナーの開始方法については、手順6.5「コンテナーを開始または停止するには、以下を実行します。」 を参照してください。
例6.1 Satellite での Red Hat Enterprise Linux コンテナーの作成
Red Hat Enterprise Linux コンテナーを Red Hat Satellite で有効にするには、以下の操作を実行します。
- 「外部レジストリーのインポート」 で説明されているようにカスタムレジストリーを作成します。registry.access.redhat.com をレジストリー URL として指定します。
- 「コンテナーの作成」 で説明されているように新規コンテナーを作成します。コンテナー作成の イメージ ステージで、外部レジストリー タブに移動し、直前の手順で作成されたレジストリーを選択します。検索フィールドを使用して Red Hat Enterprise Linux イメージの必要なバージョンを検索します。設定 および 環境 ステージに進み、コンテナーを完成します。
6.1.2. コンテナーのモニター
Red Hat Satellite では、コンテナーとコンテナーの内部で実行されるプロセスの状態をモニターすることができます。一部のコンテナーには managed (管理) というマークが付けられます。つまり、それらは Satellite 環境内で作成されており、プロビジョニングされていることを意味します。
以下の手順では、選択した組織を一覧表示し、コンテナーのメタデータをモニターする方法について示します。
手順6.4 コンテナーを調査するには、以下を実行します。
- コンテナー → すべてのコンテナー に移動します。
- コンテナー ページでは、すべての Docker コンピュートリソースに専用タブが付けられています。これらのタブのそれぞれには、各コンテナーの選択されたパラメーターと共に利用可能なコンテナーの表が含まれています。検査するコンピュートリソースのタブを選択します。
- コンテナーのメタデータを表示するには、検査するコンテナーの名前をクリックします。Satellite ではコンテナーのプロパティーの表が表示されます。
- プロセス タブでは、コンテナー内で現在実行されているプロセスを表示できます。プロセス名をクリックしてそのプロセスのメタデータを表示します。
- コンテナーが実行されている場合、その標準出力を ログ タブで確認できます。コンテナーの作成時に pseudo-tty の割り当て チェックボックスを選択している場合、コンソールは対話的になります。そうでない場合は、コンテナーの開始時に生成される初期の標準出力が表示されます。
6.1.3. コンテナーの開始、コミットおよび削除
デフォルトで新規コンテナーは無効にされます。コンテナーを有効にして、コンピュートリソースでコンテナー化されたアプリケーションのプロセスを開始します。次にホストは、Web アプリケーションの場合と同様にコンテナーと通信できます。以下の手順では、コンテナーを開始し、停止する方法を示します。
手順6.5 コンテナーを開始または停止するには、以下を実行します。
- コンテナー → すべてのコンテナー に移動し、利用可能なコンテナーの一覧を表示します。
- 開始するコンテナーの横にある このマシンのパワーをオンにする をクリックします。コンテナーの開始後にボタンは Power Off (パワーオフ) に切り替わります。これにより、コンテナーを停止することができます。これらの操作は
docker start
およびdocker stop
コマンドと同等です。
以下の手順では、コンテナーをコミットしてコンテナーの状態を保存する新規のイメージレイヤーを作成します。
手順6.6 コンテナーをコミットするには、以下を実行します。
- コンテナー → すべてのコンテナー に移動し、利用可能なコンテナーの一覧を表示します。
- コミットするコンテナーの名前をクリックします。
- コミット をクリックします。Satellite は以下を実行するようにプロンプトを出します。
- リポジトリー名を指定します。これには単一の名前や、または user/my-rhel-image などのようにユーザー名と組み合わせを指定できます。
- タグをイメージに割り当てます。
- 問い合わせ先情報を指定します。
- イメージ情報のコメントを入力します。
- 送信 をクリックします。
注記
コンテナーは元のイメージのリポジトリーにコミットされます。たとえば、コンテナーが Docker ハブからプルされたイメージをベースにしている場合、コミットされた変更は Docker ハブに戻されます。
手順6.7 コンテナーを削除するには、以下を実行します。
- コンテナー → すべてのコンテナー に移動し、利用可能なコンテナーの一覧を表示します。
- 削除するコンテナーの名前をクリックします。
- 削除 をクリックします。
- 警告ボックスで、OK をクリックしてコンテナーを削除します。