Google Cloud での Container Registry の使用

ビルドとデプロイのワークフローを簡素化するため、一部の Google Cloud サービス アカウントとランタイム環境には、同じプロジェクトに格納されたコンテナへのアクセス権限が事前に構成されています。

このページでは、Google Cloud サービスとの一般的な統合と、コンテナにアクセスするための関連要件について説明します。

一般的なアクセス要件

デフォルトでは、一部の一般的な統合のサービス アカウントには、同じプロジェクト内の Container Registry にアクセスするための Cloud Storage 権限が構成されています。

Google Kubernetes Engine クラスタ内の VM を含む Compute Engine VM で使用されるサービス アカウントの場合、アクセスは IAM 権限とストレージ アクセス スコープの両方に基づきます。

次の場合は、権限をご自分で構成または変更する必要があります。

  • あるプロジェクトのサービス アカウントを使用して別のプロジェクトの Container Registry にアクセスしている
  • ストレージへの読み取り専用アクセス権を持つデフォルトのサービス アカウントを使用しているが、イメージの pull と push の両方を行う必要がある
  • Container Registry の操作にカスタム サービス アカウントを使用している

詳細については、プロダクト別のセクションをご覧ください。

Cloud Build

デフォルトでは、Container Registry が同じプロジェクトにある場合、Cloud Build サービス アカウントにイメージの push と pull の権限が付与されます。

次の場合は、適切な権限を自分で構成する必要があります。

  • Cloud Build が、ビルドがアクセスするリポジトリとは異なるプロジェクトにある。
  • ビルドが、デフォルトの Cloud Build サービス アカウント以外のサービス アカウントを使用している。この場合、Container Registry にアクセスする権限をサービス アカウントに付与する必要があります。

Compute Engine

VM インスタンスは、Container Registry に格納されているイメージを使用して作成できます。

必要な権限

VM インスタンスと Container Registry が同じ Google Cloud プロジェクトにある場合、Compute Engine のデフォルトのサービス アカウントにはイメージを pull する権限が構成されます。

VM インスタンスが別のプロジェクトにある場合、または VM インスタンスが別のサービス アカウントを使用する場合、サービス アカウントに対して Container Registry が使用するストレージ バケットにアクセスするための適切な権限を付与する必要があります。

デフォルトでは、Compute Engine VM にはストレージ バケットの read-only アクセス スコープが構成されています。非公開 Docker イメージを push するには、VM インスタンスに read-write ストレージ アクセス スコープが必要です。

権限とアクセス スコープの詳細については、Google Cloud サービスとの統合をご覧ください。

イメージのデプロイ

VM を作成する際に、VM にイメージをデプロイできます。詳細については、コンテナのデプロイVM インスタンス テンプレートの作成に関する Compute Engine のドキュメントをご覧ください。

コンテナ用に最適化された Compute Engine インスタンス

レジストリ内のイメージを使用してコンテナ用に最適化された Compute Engine インスタンスを起動する方法については、Cloud-Config 経由で Docker コンテナを開始するをご覧ください。

詳細については、インスタンスの作成と構成をご覧ください。

Google Kubernetes Engine

Google Kubernetes Engine は、クラスタノードの VM インスタンスで構成されたサービス アカウントを使用して、イメージの push と pull を行います。

必要な権限

Google Kubernetes Engine クラスタと Container Registry ストレージ バケットが同じ Google Cloud プロジェクトにある場合、Compute Engine のデフォルトのサービス アカウントには、イメージを push または pull するための適切な権限が構成されます。

クラスタが別のプロジェクトにある場合、またはクラスタ内の VM が別のサービス アカウントを使用する場合、サービス アカウントに対して Container Registry が使用するストレージ バケットにアクセスするための適切な権限を付与する必要があります。

デフォルトでは、Compute Engine VM にはストレージ バケットの read-only アクセス スコープが構成されています。非公開 Docker イメージを push するには、VM インスタンスに read-write ストレージ アクセス スコープが必要です。

権限とアクセス スコープの詳細については、Google Cloud サービスとの統合をご覧ください。

イメージを実行する

次のコマンドを使用して、Google Kubernetes Engine クラスタで Container Registry イメージを実行できます。

kubectl run [NAME] --image=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

ここで

  • [NAME] はリソースの名前です。
  • [HOSTNAME] は、Console で Location の下に表示されます。gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io の 4 つのうち、いずれかのオプションになります。
  • [PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • [IMAGE] は、Container Registry 内のイメージ名です。
  • [TAG] は、Container Registry 内のイメージのバージョンを識別するタグです。タグを指定しない場合、Container Registry はデフォルトタグ latest を探します。

Kubernetes コマンドの詳細については、kubectl の概要をご覧ください。

Cloud Run

Container Registry に格納されているイメージは、Cloud Run にデプロイできます。

必要な権限

Cloud Run にデプロイするには、オーナーまたは編集者のロール、あるいは Cloud Run 管理者とサービス アカウント ユーザーのロールの両方、またはこちらの特定の権限のリストを含むカスタムロールが割り当てられている必要があります。

イメージのデプロイ

Cloud Run へのイメージのデプロイについては、Cloud Run のドキュメントをご覧ください。

App Engine フレキシブル環境

App Engine フレキシブル環境を使用すると、既存のランタイム(Java 8 など)をカスタマイズできます。また、カスタム Docker イメージまたは Dockerfile を提供することによって、独自のランタイムを構成できます。

Cloud Build を使用すると、コンテナのビルド、Container Registry への push、App Engine へのデプロイを自動化できます。

必要な権限

デフォルトでは、App Engine のデフォルトのサービス アカウントには、同じプロジェクトのリポジトリを pull および push するための権限があります。

App Engine が別のプロジェクトにある場合、App Engine サービス アカウントに対して Container Registry リポジトリにアクセスするための権限を付与する必要があります。

App Engine へのデプロイ

Google Cloud CLI を使用して、Container Registry がホストするイメージを App Engine にデプロイできます。

  1. アプリの App Engine 構成ファイルを作成します。
  2. Docker イメージをビルドし、そのイメージをリポジトリに push します。Cloud Build を使用すると、コンテナをビルドしてリポジトリに push できます。
  3. 次のコマンドを実行して、イメージを App Engine にデプロイします。

    gcloud app deploy --image-url=[HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

ここで

  • [HOSTNAME] は、Console で Location の下に表示されます。gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io の 4 つのうち、いずれかのオプションになります。
  • [PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • [IMAGE] は、Container Registry 内のイメージ名です。
  • [TAG] は、Container Registry 内のイメージのバージョンを識別するタグです。タグを指定しない場合、Container Registry はデフォルトタグ latest を探します。