第6章 コンテナーの使用
Docker は、Linux コンテナー内のアプリケーションのデプロイメントを自動化するオープンソースプロジェクトで、アプリケーションとそのランタイム依存関係をコンテナーにパッケージ化する機能を提供します。Linux コンテナーは、セキュリティーを強化する一方で、迅速なアプリケーションデプロイメント、単純なテスト、メンテナンス、およびトラブルシューティングを可能にします。詳細は、Red Hat カスタマーポータルの記事 Get Started with Docker Formatted Container Images on Red Hat Systems を参照してください。[1].
Docker フォーマットのコンテナーは以下の部分で設定されています。
コンテナー: アプリケーションのサンドボックス各コンテナーは、必要な設定データを保持するイメージに基づいています。イメージからコンテナーを起動すると、書き込み可能な階層がこのイメージの上部に追加されます。コンテナーをコミットするたびに、変更を保存する新しいイメージ層が追加されます。イメージ: 変更されることのない、コンテナーの設定の静的スナップショット。コンテナーに加えた変更は、新しいイメージレイヤーを作成することによってのみ保存できます。各イメージは、複数の親イメージに依存します。プラットフォームイメージ: 親を持たないイメージ。プラットフォームイメージは、コンテナー化されたアプリケーションの実行に必要なランタイム環境、パッケージ、およびユーティリティーを定義します。プラットフォームイメージは書き込み可能ではないため、その上部にスタックされたコピーイメージに変更が反映されます。Red Hat Satellite から Red Hat Enterprise Linux プラットフォームイメージにアクセスする方法は、例6.1「Satellite での Red Hat Enterprise Linux コンテナーの作成」 を参照してください。レジストリー: ダウンロード可能なイメージが含まれるパブリックまたはプライベートアーカイブ。一部のレジストリーでは、ユーザーがイメージをアップロードして他のユーザーが利用できるようにすることができます。Red Hat Satellite では、ローカルおよび外部のレジストリーからイメージをインポートできます。Satellite 自体はホストのイメージレジストリーとして機能できますが、ホストは変更をレジストリーに戻すことができません。詳細は、を参照してください。 「コンテナーの作成」タグ: リポジトリー内のイメージを区別するために使用するマーク(通常はイメージに保存されるアプリケーションのバージョン)。リポジトリーは、コンテナーレジストリー内の同様のイメージをグループ化するために使用されます。イメージには一意の英数字の ID のみがあるため、フォームまたは リポジトリー: :タグ を使用すると、人間が判読できるイメージを識別できます。詳しい情報は、「コンテナータグの使用」 および 「リポジトリーの管理」 を参照してください。
Red Hat Satellite では、オンプレミスレジストリーを作成し、さまざまなソースからイメージをインポートし、コンテンツビューを使用してそれらをコンテナーに配信できます(コンテンツビューにイメージを読み込む方法は、「リポジトリーのコンテンツビューへの追加」 を参照してください)。Satellite は、コンテナーを実行するサーバーとして機能する 1 つ以上の Docker コンピュートリソースの作成をサポートします。このようにして、イメージのインポート、このイメージに基づくコンテナーの起動、コンテナーのアクティビティーの監視、さらに伝搬可能な新規イメージレイヤーに状態をコミットできます。
6.1. コンテナーの管理 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
以下のセクションでは、コンテナーを作成し、表示し、開始し、停止し、コミットする方法について示します。
前提条件
Red Hat Satellite では、Docker プロバイダータイプのコンピュートリソースにのみコンテナーをデプロイできます。そのため、コンテナーを初めて表示または作成しようとすると、Satellite は Docker コンピュートリソースの作成を要求します。これを行うには、まずコンテナーホストを作成し、次にこのホストをコンピュートリソースとして指定します。
手順6.1 コンテナーホストを準備するには、以下を実行します。
- Red Hat カスタマーポータルの Getting Started with Docker Formatted Container Images on Red Hat Systems ガイドの Getting Docker in RHEL 7 セクションで説明されているように、イメージをホストするために Red Hat Enterprise Linux 7 サーバーを準備し、このサーバーで Docker サービスを有効にします。
[2].コンテナーホストは、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
rpm -Uvh https://satellite.example.com/pub/katello-ca-consumer-latest.noarch.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、satellite.example.com は Satellite Server の完全修飾ドメイン名に置き換えます。コンテナーホストがすでに Satellite ホストとして登録されている場合は、この手順をスキップしてください。 - コンテナーホストのロケーションに応じて以下のタスクを実行します。
- コンテナーホストが Satellite Server と同じマシンにある場合には、以下を実行します。
- docker ユーザーグループを作成し、foreman ユーザーをそれに追加します。
groupadd docker usermod -aG docker foreman
# groupadd docker # usermod -aG docker foremanCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のように、
/etc/sysconfig/dockerファイルの OPTIONS 変数を変更します。OPTIONS='--selinux-enabled -G docker'
OPTIONS='--selinux-enabled -G docker'Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 影響を受けるサービスを再起動して変更を適用します。
systemctl restart docker.service katello-service restart
# systemctl restart docker.service # katello-service restartCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- コンテナーホストが Satellite Server 以外のマシンにある場合は、以下を実行します。
- コンテナーホスト上のポートを開いて、Satellite Server と通信します。これを行うには、
/etc/sysconfig/dockerファイルの OPTIONS 変数を以下のように変更します。OPTIONS='--selinux-enabled -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
OPTIONS='--selinux-enabled -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'Copy to Clipboard Copied! Toggle word wrap Toggle overflow TLS が有効な場合、ポート2376を使用できます。 - 以下のように docker サービスを再開し、設定を検証します。
systemctl restart docker.service systemctl status docker.service
# systemctl restart docker.service # systemctl status docker.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
手順6.2 Docker コンピュートリソースを作成するには、以下を実行します。
- ポート 5000 が Satellite Server で有効になっていることを確認します。コンテナーホストはこのポートを使用して、Satellite Server のコンテンツビューからイメージをプルします。
- 「コンピュートリソース」 の説明に従って、コンピュートリソースを作成します。コンテナーホストの場所に従ってリソース URL を指定します。
- コンテナーホストが Satellite Server と同じマシンにある場合は、リソース URL として unix://var/run/docker.sock を設定します。
- コンテナーホストが Satellite Server 以外のマシンにある場合、以下の形式で URL を指定します。
http://container_host_fqdn:2375
http://container_host_fqdn:2375Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここで、container_host_fqdn はコンテナーホストの完全修飾ドメイン名を表し、Satellite との通信用にコンテナーホストで開かれるポート番号は2375または TLS を使用している場合は2376のいずれかになります。
- をクリックして、コンテナーホストが利用可能かどうかをテストします。
- をクリックしてコンピュートリソースを作成します。
6.1.1. コンテナーの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Satellite に Docker コンピュートリソースが少なくとも 1 つある場合は、コンテナーを作成できます。新しいコンテナーを作成するには、手順6.3「コンテナーを作成するには、以下を実行します。」 で説明されている手順に従います。既存のコンテナーをモニターする方法は、「コンテナーのモニター」 を参照してください。
コンテナーを作成するには、まずイメージをインポートする必要があります。これは、プラットフォームイメージまたは以前に作成したレイヤー化されたイメージである場合があります。Satellite は以下のイメージソースをサポートします。
- ローカルコンテンツ: コンテナーの作成時に
コンテンツビューオプションによって表されます。このオプションを使用すると、特定のコンテンツビューおよびライフサイクル環境の Capsule Server にすでに存在するリポジトリーからイメージをインポートできます。ローカルレジストリーの作成および設定方法の詳細は、「リポジトリーの管理」 を参照してください。 - docker Hub: Docker Hub レジストリーを検索して、そこからイメージをプルすることができます。コンテンツの検証済みの信頼できるイメージだけを取得するようにしてください。
- 外部レジストリー: 以前に作成した外部レジストリーからイメージをインポートできます。Red Hat Satellite でのレジストリーの作成の詳細は、「外部レジストリーのインポート」 を参照してください。
注記
既存のコンテナーの設定を変更することはできません。設定を変更するには、手順6.3「コンテナーを作成するには、以下を実行します。」 の説明に従って、設定を変更して代替コンテナーを作成する必要があります。したがって、ワークフローでコンテナーを置き換えることができることを確認してください。
手順6.3 コンテナーを作成するには、以下を実行します。
に移動します。あるいは、 に移動し、 をクリックします。 - コンテナー作成の Preliminary 段階で、以下の設定を設定します。
- Compute resource タブで、Deployed on ドロップダウンメニューからコンピュートリソースを選択します。コンピュートリソースについての詳細は、「コンピュートリソース」 を参照してください。
- Locations タブで、新しいコンテナーを利用可能にするロケーションを選択します。
- 組織 タブで、新規コンテナーを利用可能にする組織を選択します。
をクリックして先に進みます。 - コンテナー作成のイメージ段階で、コンテナーのベースとして機能するイメージをインポートします。これは、プラットフォームイメージ、または以前に作成したレイヤー構造イメージである可能性があります。次のいずれかのオプションを選択します。
- Content View タブを選択して、ライフサイクル環境からイメージをインポートします。ライフサイクル環境、コンテンツビュー、リポジトリー、タグ、および Capsule Server を指定します。
- Docker Hub タブを選択して、Docker Hub レジストリーからイメージをインポートします。検索 フィールドにイメージ名を入力すると、Satellite は自動的にコンピュートリソースを検索します。探している glass アイコンをクリックして、Docker Hub を検索します。検索結果の一覧からイメージを選択し、ドロップダウンリストからタグを選択します。
- External registry タブを選択して、既存のレジストリーからイメージをインポートします。ドロップダウンメニューからレジストリーを選択し、イメージ名で検索します。Satellite は、Tag フィールドに選択したイメージ名で使用できるタグを設定します。詳細は、「外部レジストリーのインポート」 を参照してください。
をクリックして先に進みます。 - コンテナー作成の 設定 段階で、次のパラメーターを設定します。
- コンテナー名を指定します。
- コンテナー内で実行するコマンドを指定します。
- コンテナーが起動するとすぐに自動的に実行されるコマンドであるエントリーポイントを指定します。デフォルトのエントリーポイントは /bin/sh -c です。
- CPU をコンテナーに割り当てます。たとえば、
0-2,16 はCPU 0、1、2、および 16 を表します。 - コンテナーに使用できる CPU 時間の相対的配分を定義します。
- コンテナーのメモリー制限を指定します。たとえば、
512mでは、コンテナーのメモリー使用を 512 MB に制限します。
をクリックして先に進みます。 - Environment という名前のコンテナー作成の最終段階で、pseudo-tty を割り当てるか、STDIN、STDOUT、および STDERR をコンテナーに割り当てるかどうかを選択します。 をクリックして、コンテナーのカスタム環境変数を作成します。Run? チェックボックスを選択して、作成後にコンテナーを自動的に起動します。
- をクリックしてコンテナーを作成します。
コンテナーの作成後、Satellite はコンテナーメタデータの概要を表示します。デフォルトでは、コンテナーの作成時に Run? チェックボックスを選択していない限り、新規コンテナーは無効になっています。コンテナーを起動する方法は、手順6.5「コンテナーを開始または停止するには、以下を実行します。」 を参照してください。
例6.1 Satellite での Red Hat Enterprise Linux コンテナーの作成
Red Hat Satellite で Red Hat Enterprise Linux コンテナーを有効にするには、以下の操作を実行します。
- 「外部レジストリーのインポート」 の説明に従ってカスタムレジストリーを作成します。registry.access.redhat.com をレジストリー URL として指定します。
- 「コンテナーの作成」 の説明に従って、新しいコンテナーを作成します。Image stage of container creation で、External registry タブに移動し、直前の手順で作成したレジストリーを選択します。検索フィールドを使用して、必要なバージョンの Red Hat Enterprise Linux イメージを検索します。設定 ステージと 環境 ステージに従って、コンテナーを完了します。
6.1.2. コンテナーのモニター リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Satellite では、コンテナーとコンテナー内で実行されているプロセスのステータスを監視する手段が提供されます。一部のコンテナーは、マネージド とマークできます。つまり、コンテナーは Satellite 環境内で作成およびプロビジョニングされたことを意味します。
以下の手順では、選択した組織をリスト表示し、コンテナーのメタデータをモニターする方法について示します。
手順6.4 コンテナーを調査するには、以下を実行します。
に移動します。 - コンテナーページでは、すべての Docker コンピュートリソースに専用のタブがあります。これらの各タブには、使用可能なコンテナーの表と、各コンテナーの選択したパラメーターが含まれます。検査するコンピュートリソースのタブを選択します。
- コンテナーのメタデータを表示するには、検査するコンテナーの名前をクリックします。Satellite にはコンテナープロパティーの表が表示されます。
- Processes タブでは、コンテナーで現在実行されているプロセスを表示できます。プロセス名をクリックして、プロセスのメタデータを表示します。
- コンテナーが実行されている場合、その標準出力を Logs タブに表示できます。コンテナーの作成時に allocate a pseudo-tty チェックボックスを選択した場合は、コンソールはインタラクティブになります。それ以外の場合は、コンテナーの起動時に生成された最初の標準出力が表示されます。
6.1.3. コンテナーの起動、コミット、削除 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
新規コンテナーはデフォルトで無効になっています。コンテナーを有効にすると、コンピュートリソースでコンテナー化されたアプリケーションのプロセスを開始します。その後、ホストは Web アプリケーションと同じコンテナーと通信できます。以下の手順では、コンテナーを起動および停止する方法を説明します。
手順6.5 コンテナーを開始または停止するには、以下を実行します。
に移動し、利用可能なコンテナーの一覧を表示します。 - 起動するコンテナーの横にある をクリックします。コンテナーを起動すると、このボタンは に変わります。これにより、コンテナーの停止が可能になります。これらのアクションは docker start および docker stop コマンドと同等です。
以下の手順では、コンテナーをコミットしてコンテナーの状態を保存する新規のイメージレイヤーを作成します。
手順6.6 コンテナーをコミットするには、以下を実行します。
に移動し、利用可能なコンテナーの一覧を表示します。 - コミットするコンテナーの名前をクリックします。
- をクリックします。Satellite は以下を求めるプロンプトを表示します。
- リポジトリー名を指定します。これは、名前を 1 つでも(例: user/my-rhel-image )、ユーザー名と組み合わせることもできます。
- タグをイメージに割り当てます。
- 問い合わせ先情報を指定します。
- イメージ情報のコメントを入力します。
- をクリックします。
注記
コンテナーは元のイメージのリポジトリーにコミットされます。たとえば、コンテナーが Docker Hub からプルされたイメージに基づいている場合、コミットされた変更は Docker Hub にプッシュされます。
手順6.7 コンテナーを削除するには、以下を実行します。
に移動し、利用可能なコンテナーの一覧を表示します。 - 削除するコンテナーの名前をクリックします。
- をクリックします。
- 警告ボックスで、 をクリックしてコンテナーを削除します。