イメージの push と pull

このページでは、イメージの push や pull の方法について説明します。これは、Container Registry で行われる最も一般的な 2 つのタスクです。新しいイメージを Container Registry に push するには、まず、以下に説明するように、レジストリ名にタグを付ける必要があります。

Container Registry を起動して実行する方法については、クイックスタートをご覧ください。

イメージのリスト表示、タグ付け、削除の手順については、イメージの管理をご覧ください。

はじめに

次のことを確認してください。

  1. プロジェクトに対する課金が有効になっていること。

  2. Container Registry API が有効になっている

  3. Cloud SDK の最新バージョンをインストールしておくこと。これには gcloud コマンドライン ツールが含まれています。

  4. Docker をインストールしておくこと。認証に gcloud 認証ヘルパーを使用する場合(推奨)は、バージョン 18.03 以降が必要です。

    Ubuntu や Debian などの Linux ベースのオペレーティング システムを使用している場合は、ユーザー名を docker グループに追加して、sudo を使わずに Docker を実行できるようにします。

    sudo usermod -a -G docker ${USER}

    ログアウトして再度ログインすると、グループ メンバーシップの変更が反映されます。仮想マシンを使用している場合、メンバーシップの変更を有効にするために、仮想マシンの再起動が必要になることがあります。

  5. レジストリから push および pull する権限を持っていること。

  6. gcloud を認証ヘルパーとして使用するように Docker を構成しているか、Docker で別の認証方法を使用していること。gcloud を認証ヘルパーとして使用するには、次のコマンドを実行します。

    gcloud auth configure-docker
    
  7. Docker が使用する認証ヘルパーはシステム PATH 内に存在する必要があります。選択した認証ヘルパー、gcloud、または docker-credential-gcr が、PATH システム内にあることを確認してください。

イメージのレジストリへの push

ローカル イメージを Container Registry に push するには、最初にレジストリ名にタグ付けしてからイメージを push する必要があります。

ローカル イメージにレジストリ名でタグ付けする

  1. レジストリ名を指定します。

    1. ホスト名を選択します。ホストによって、イメージを保存する場所が指定されています。

      • gcr.io は米国内のデータセンターでイメージをホストしていますが、今後は場所が変更される可能性があります。
      • us.gcr.io は米国内のデータセンターでイメージをホストしていますが、gcr.io によってホストされるイメージからは独立したストレージ バケットです。
      • eu.gcr.io は、欧州連合でイメージをホストします。
      • asia.gcr.io は、アジアのデータセンターでイメージをホストします。

      これらの場所は、Cloud Storage ストレージ バケットのマルチリージョンに対応します。イメージを新しいホスト名でレジストリに push すると、Container Registry では、指定されたマルチリージョン内にストレージ バケットを作成します。このバケットは、レジストリの基盤となるストレージです。1 つのプロジェクト内では、ホスト名が同じであるすべてのレジストリが 1 つのストレージ バケットを共有します。

      イメージのホスト名は、Console で [場所] の下に表示されます。

    2. ローカルマシン上のイメージ名とは異なるイメージ名を選択します。

    3. ホスト名、Google Cloud Console プロジェクト ID、イメージ名を結合します。

      [HOSTNAME]/[PROJECT-ID]/[IMAGE]
      

      プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。

  2. 次のコマンドを使用して、ローカル イメージにレジストリ名をタグ付けします。

    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]
    

    [SOURCE_IMAGE] はローカル イメージ名またはイメージ ID です。

    このコマンドはイメージにレジストリの名前を付けて、latest タグを適用します。別のタグを適用する場合は、次のコマンドを使用します。

    docker tag [SOURCE_IMAGE] [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]
    

タグ付きイメージを Container Registry に push する

Container Registry で直接認証を行うように Docker を構成するには、Docker 認証ヘルパーを使用するのが最も簡単な方法です。このように構成した後、docker コマンドを使用してイメージのタグ付け、push、pull を行います。別の方法として、クライアント ライブラリを使用してコンテナ イメージを管理することも、Docker API を使用して直接操作することもできます。

次のコマンドを使用して、タグ付きイメージを Container Registry に push します。

docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]

このコマンドは、latest タグが付けられたイメージを push します。別のタグが付けられたイメージを push する場合は、次のコマンドを使用します。

docker push [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

イメージを新しいホスト名でレジストリに push すると、Container Registry では、指定されたマルチリージョンのロケーションにストレージ バケットを作成します。イメージを push した後、次のことが可能になります。

  • Cloud Console に移動し、レジストリとイメージを表示します。

  • gcloud container images list-tags を実行して、イメージのタグと自動生成されたダイジェストを表示します。

    gcloud container images list-tags [HOSTNAME]/[PROJECT-ID]/[IMAGE]
    

    コマンドの出力は次のようになります。

    DIGEST        TAGS        TIMESTAMP
    44bde...      test        2017-..-..
    

レジストリからイメージを pull する

Container Registry から pull するには、次のコマンドを使用します。

docker pull [HOSTNAME]/[PROJECT-ID]/[IMAGE]:[TAG]

または

docker pull [HOSTNAME]/[PROJECT-ID]/[IMAGE]@[IMAGE_DIGEST]

ここで

  • [HOSTNAME] は、Console で [場所] の下に表示されます。gcr.ious.gcr.ioeu.gcr.ioasia.gcr.io の 4 つのうち、いずれかのオプションになります。
  • [PROJECT-ID] は、Google Cloud Console プロジェクト ID です。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • [IMAGE] は、Container Registry 内のイメージ名です。
  • [TAG] はイメージに適用されるタグです。レジストリでは、タグはイメージに固有です。
  • [IMAGE_DIGEST] は、イメージ コンテンツの sha256 ハッシュ値です。Console で、メタデータを表示する特定のイメージをクリックします。ダイジェストはイメージのダイジェストとして一覧表示されます。

特定のイメージの pull コマンドを取得するには:

  1. 特定のレジストリに移動するには、イメージの名前をクリックします。

  2. レジストリで、pull するイメージのバージョンの横にあるチェックボックスをオンにします。

  3. ページの上部にある [pull コマンドを表示] をクリックします。

  4. タグやダイジェストを使用してイメージを識別する pull コマンドをコピーします。

次のステップ