Google Cloud Platform での Container Registry の使用

Google Cloud Platform の Compute リソースは、簡単にアクセスできるように Container Registry と統合されています。このドキュメントでは、Google Cloud Platform でイメージの pull / push を行うために必要なアクセス設定について説明します。

要件

イメージの pull または push に使用される VM に適切な権限とアクセス スコープを構成する必要があります。

IAM 権限

Container Registry ストレージ バケットにアクセスするサービス アカウントに IAM 権限を構成する必要があります。

  • 非公開 Docker イメージを pull するには、VM インスタンスが使用するサービス アカウントに、イメージのストレージ バケットに対する read 権限が必要です。
  • 非公開 Docker イメージを push するには、VM インスタンスが使用するサービス アカウントに、イメージのストレージ バケットに対する read-write または full-control 権限が必要です。

必要な権限の詳細については、アクセス制御の構成をご覧ください。

アクセス スコープ

アクセス スコープは、gcloud ツールからのリクエストで使用されるデフォルトの OAuth スコープを定義します。Container Registry で正常に動作するため、イメージを push または pull する VM インスタンスに正しいストレージ アクセス スコープを構成する必要があります。

イメージの pull だけを行うには、ストレージ バケットに read-only 権限を設定します。イメージの push と pull を行う場合は、ストレージ バケットに read-write 権限を設定します。

VM インスタンスにスコープを設定する

新しい VM インスタンスを作成してスコープを指定するには、--scope オプションを使用します。

  • 読み取り専用権限を持つインスタンスの場合は、次のコマンドを実行します。

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_only
    
  • 読み取り / 書き込み権限を持つインスタンスの場合は、次のコマンドを実行します:

    gcloud compute instances create INSTANCE \
    --scopes https://www.googleapis.com/auth/devstorage.read_write
    

インスタンスのサービス アカウントまたはアクセス スコープを変更する場合、インスタンスを一時的に停止する必要があります。インスタンスを停止する方法については、インスタンスの停止のドキュメントをご覧ください。サービス アカウントまたはアクセス スコープを変更した後で、インスタンスを再起動してください。停止したインスタンスのサービス アカウントまたはアクセス スコープを変更するには、次のコマンドのいずれかを使用します。

  • 読み取り専用権限を設定するには、次のコマンドを実行します。

    gcloud compute instances set-service-account INSTANCE --scopes=storage-ro
    
  • 読み取り / 書き込み権限を設定するには、次のコマンドを実行します。

    gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
    

Google Kubernetes Engine クラスタにスコープを設定する

デフォルトでは、新しい Google Kubernetes Engine クラスタは、ストレージ バケットに読み取り専用権限で作成されます。Google Kubernetes Engine クラスタの作成時に read-write ストレージ スコープを設定するには、--scopes オプションを使用します。たとえば、次のコマンドは、スコープ bigquery を持つクラスタを作成します。

`storage-rw`, and `compute-ro`:

    gcloud container clusters create example-cluster \
  --scopes=bigquery,storage-rw,compute-ro

新しいクラスタの作成時に設定できるスコープの詳細については、gcloud container clusters create コマンドのドキュメントをご覧ください。

Compute Engine

イメージを push または pull する VM インスタンスと Container Registry ストレージ バケットが同じ Google Cloud Platform プロジェクトにある場合、Compute Engine のデフォルトのサービス アカウントには、イメージの push と pull に適切な権限が構成されます。VM インスタンスが別のプロジェクトにある場合や、インスタンスが別のサービス アカウントを使用する場合は、リポジトリで使用されるストレージ バケットへのアクセスを構成する必要があります。

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

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

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

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

Google Kubernetes Engine

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

Google Kubernetes Engine クラスタと Container Registry ストレージ バケットが同じ Google Cloud Platform プロジェクトにある場合、Compute Engine のデフォルトのサービス アカウントには、イメージの push と pull に適切な権限が構成されます。クラスタが別のプロジェクトにある場合や、クラスタ内の VM が別のサービス アカウントを使用している場合は、リポジトリで使用されるストレージ バケットへのアクセスを構成する必要があります。

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

イメージを実行する

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

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

ここで

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

Kubernetes コマンドの詳細については、kubectl の概要をご覧ください。イメージが別のプロジェクトにある場合、Google Kubernetes Engine クラスタが使用するサービス アカウントに、イメージを格納するストレージ バケットに対して読み取りアクセスを明示的に付与する必要があります。

App Engine フレキシブル環境

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

フレキシブル環境では、Cloud Build を使用してコンテナ イメージが自動的にビルドされ、Container Registry に保存されます。

イメージの push または pull を行う VM インスタンスと Container Registry ストレージ バケットが同じ Google Cloud Platform プロジェクトにある場合、Compute Engine のデフォルトのサービス アカウントには、イメージの push と pull に適切な権限が構成されます。VM が別のプロジェクトにある場合や、VM が別のサービス アカウントを使用する場合は、リポジトリで使用されるストレージ バケットへのアクセス権を構成する必要があります。

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

App Engine へのデプロイ

gcloud コマンドライン ツールを使用して、Container Registry がホストするイメージを App Engine にデプロイできます。

イメージのルート ディレクトリで gcloud beta app gen-config コマンドを使用すると、App Engine にデプロイするために必要な app.yaml ファイルが自動的に作成されます。このファイルは自分で作成することもできます。

App Engine 構成ファイルを作成し、Docker イメージをビルドしてイメージを Container Registry に push したら、次のコマンドを実行してイメージを App Engine にデプロイできます。

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

ここで

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

フィードバックを送信...