第1章 Red Hat Quay ビルドの概要
Red Hat Quay ビルド (または単に ビルド) は、コンテナーイメージのビルドの自動化を可能にする機能です。ビルド 機能は、ワーカーノードを使用して、Dockerfiles またはその他のビルド仕様からイメージをビルドします。これらのビルドは、GitHub などのリポジトリーからの Webhook を介して手動でトリガーすることも、自動的にトリガーすることもできるため、ユーザーは継続的インテグレーション (CI) と継続的デリバリー (CD) パイプラインをワークフローに統合できます。
ビルド 機能は、OpenShift Container Platform および Kubernetes クラスター上の Red Hat Quay でサポートされています。Operator ベースのデプロイメントと Kubernetes クラスターの場合、ビルド は、ビルドジョブを調整および処理する ビルドマネージャー を使用して作成されます。ビルドは、ベアメタルプラットフォームと 仮想ビルダー を使用した仮想化プラットフォームの両方での Dockerfile のビルドをサポートします。この汎用性により、組織は Red Hat Quay のコンテナーイメージビルド機能を活用しながら、既存のインフラストラクチャーに適応できます。
Red Hat Quay ビルド 機能の主な特徴は次のとおりです。
- コードコミットまたはバージョン管理イベントによってトリガーされる自動ビルド
- Docker および Podman コンテナーイメージのサポート
- ビルド環境とリソースのきめ細かな制御
- スケーラブルなビルドを実現する Kubernetes および OpenShift Container Platform との統合
- ベアメタルおよび仮想化インフラストラクチャーとの互換性
ベアメタルプラットフォーム上のコンテナー内で直接 ビルド を実行すると、仮想マシンを使用する場合と同じ分離は実現されませんが、それでも十分な保護が提供されます。
ビルド は非常に複雑なので、管理者は続行する前に ビルドの自動化 アーキテクチャーガイドを確認することを推奨します。
1.1. コンテナーイメージのビルド
コンテナーイメージをビルドするには、コンテナー化されたアプリケーションのブループリントを作成する必要があります。ブループリントは、アプリケーションのインストール方法と設定方法を定義する他のパブリックリポジトリーのベースイメージに依存します。
Red Hat Quay は、Docker および Podman コンテナーイメージをビルドする機能をサポートしています。この機能は、コンテナーとコンテナーオーケストレーションを利用する開発者や組織に役立ちます。
1.1.1. ビルドコンテキスト
Docker または Podman でイメージをビルドする際には、ビルドコンテキスト となるディレクトリーを指定します。これは手動ビルドとビルドトリガーの両方に当てはまります。これによって作成されるビルドは、ローカルマシンで docker build
または podman build
を実行する場合と変わらないためです。
ビルドコンテキストは常にビルドセットアップの サブディレクトリー で指定され、ディレクトリーが指定されていない場合はビルドソースのルートにフォールバックします。
ビルドがトリガーされると、ビルドワーカーは Git リポジトリーをワーカーマシンにクローンし、ビルドの前にビルドコンテキストに入ります。
.tar
アーカイブをベースにしたビルドでは、ビルドワーカーがアーカイブを抽出し、ビルドコンテキストに入ります。以下に例を示します。
展開されたビルドアーカイブ
example ├── .git ├── Dockerfile ├── file └── subdir └── Dockerfile
上記の 展開されたビルドアーカイブ は、example という Github リポジトリーのディレクトリー構造を持っていると考えてみてください。ビルドトリガーの設定でサブディレクトリーが指定されていない場合、またはビルドを手動で開始する場合、ビルドは example ディレクトリーで行われます。
ビルドトリガーの設定でサブディレクトリー (subdir
など) を指定した場合は、その中の Dockerfile のみがビルドの対象になります。つまり、Dockerfile の ADD
コマンドを使用して file
を追加することは、ビルドコンテキストの外にあるためできません。
Docker Hub とは異なり、Dockerfile は Build コンテキストの一部であるため、.dockerignore
ファイルには表示されません。