Docker Hub リモート リポジトリを作成する

Docker Hub のプロキシとして機能するリモート リポジトリを作成します。

準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Artifact Registry, Secret Manager API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

  9. Artifact Registry, Secret Manager API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

    gcloud init
  12. Docker Hub アカウントを作成します。

必要なロール

Docker Hub リモート リポジトリの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

  • リモート リポジトリを作成し、個々のリポジトリへのアクセス権を付与する場合: プロジェクトに対する Artifact Registry 管理者 roles/artifactregistry.admin
  • シークレットの作成と管理: プロジェクトに対する Secret Manager 管理者ロール roles/secretmanager.admin

ロールの付与の詳細については、アクセスの管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

シェルを選択する

このクイックスタートをすべて実行するためには、Cloud Shell またはローカルシェルを使用します。

Cloud Shell
Cloud Shell は、Google Cloud でホストされているリソースを管理するためのシェル環境です。Docker と Google Cloud CLI(Google Cloud の主要なコマンドライン インターフェース)がプリインストールされています。
ローカルシェル
ローカルシェルを使用する場合は、ご利用の環境に Docker と gcloud CLI をインストールする必要があります。

Cloud Shell の起動

Cloud Shell を起動するには、次の手順に従います。

  1. Google Cloud Console に移動します。

    Google Cloud Console

  2. [Cloud Shell をアクティブにする]( )ボタンをクリックします。

コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud コマンドを実行します。

ローカルシェルの設定

gcloud CLI と Docker をインストールするには、次の手順に従います。

  1. gcloud CLI をインストールします。既存のインストールを更新するには、gcloud components update コマンドを実行します。

  2. Docker をまだインストールしていなければ、インストールします。

  3. Docker がレジストリを操作するには特権アクセスが必要です。Linux や Windows では、Docker コマンドを実行するユーザーを Docker セキュリティ グループに追加します。Docker Desktop は、root ユーザーとして仮想マシンで実行されるため、この手順は MacOS では不要です。

    Linux

    Docker セキュリティ グループはdockerと呼ばれます。ユーザー名を追加するには、次のコマンドを実行します。

    sudo usermod -a -G docker ${USER}
    

    Windows

    Docker セキュリティ グループはdocker-usersと呼ばれます。管理者のコマンド プロンプトからユーザーを追加するには、次のコマンドを実行します。

    net localgroup docker-users DOMAIN\USERNAME /add
    

    ここで

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

  5. Docker が稼働中であることを確認するには、現在の時刻と日付を返す次の Docker コマンドを実行します。

    docker run --rm busybox date
    

    --rm フラグは、終了時にコンテナ インスタンスを削除します。

Docker Hub 認証を構成する

未認証の Docker Hub の割り当てが使用されないようにするには、リモート リポジトリを使用するときに Docker Hub の認証を行うことをおすすめします。リモート リポジトリを使用すると、Docker Hub のユーザー名とシークレットとして保存された個人用アクセス トークンを Docker Hub の認証に追加できます。

Docker Hub の個人アクセス トークンを作成する

  1. Docker Hub にログインします。
  2. 読み取り専用権限を持つ個人用のアクセス トークンを作成します。
  3. アクセス トークンをコピーします。

  4. アクセス トークンをローカルまたは Cloud Shell のテキスト ファイルに保存します。

個人用のアクセス トークンをシークレットに保存する

コンソール

  1. Google Cloud コンソールの [Secret Manager] ページに移動します。

    [Secret Manager] ページに移動

  2. [シークレット マネージャー] ページで、[シークレットを作成] をクリックします。

  3. [シークレットの作成] ページの [名前] に、シークレットの名前 my-secret を付けます。

  4. [シークレットの値] フィールドに、Docker Hub の個人アクセス トークンを入力します。

  5. [リージョン] セクションは変更しません。

  6. [シークレットを作成] ボタンをクリックします。

gcloud CLI

gcloud secrets create my-secret --data-file="/path/to/file.txt"

ここで、/path/to/file.txt は個人用のアクセス トークンがあるテキスト ファイルの場所です。

Artifact Registry サービス アカウントにシークレットへのアクセス権を付与する

コンソール

  1. Google Cloud コンソールの [Secret Manager] ページに移動します。

    [Secret Manager] ページに移動

  2. [Secret Manager] ページで、my-secret の横にあるチェックボックスをオンにします。

  3. まだ開いていない場合は、[情報パネルを表示] をクリックしてパネルを開きます。

  4. 情報パネルで [プリンシパルを追加] をクリックします。

  5. [新しいプリンシパル] テキスト領域に、Artifact Registry サービス アカウントのメールアドレスを入力します。Artifact Registry サービス アカウントのメールアドレスの形式は次のとおりです。

    service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

    PROJECT-NUMBER はプロジェクト番号です。

    プロジェクト番号を確認するには:

    • Google Cloud コンソールの [ダッシュボード] ページに移動します。

      [ダッシュボード] ページに移動する

    • ページ上部の [選択元] プルダウン リストをクリックします。

    • 表示された [選択元] ウィンドウで、プロジェクトを選択します。

      プロジェクト ID とプロジェクト番号が、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。

  6. [ロールを選択] プルダウンで、[シークレット マネージャー]、[Secret Manager のシークレット アクセサー] の順に選択します。

gcloud CLI

gcloud secrets add-iam-policy-binding my-secret \
    --member="serviceAccount:service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

PROJECT-NUMBER はプロジェクトのプロジェクト番号です。

プロジェクト番号を確認するには:

  • Google Cloud コンソールで、[ダッシュボード] ページに移動します。

    [ダッシュボード] ページに移動する

  • ページ上部の [選択元] プルダウン リストをクリックします。

  • 表示された [選択元] ウィンドウで、プロジェクトを選択します。

    プロジェクト ID とプロジェクト番号が、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。

リモート リポジトリを作成する

次のコマンドを実行し、Docker Hub 認証情報を使用して、ロケーション us-central1quickstart-docker-hub-remote という名前の Artifact Registry リモート リポジトリを作成します。

gcloud artifacts repositories create quickstart-docker-hub-remote \
    --project=PROJECT_ID \
    --repository-format=DOCKER  \
    --location=us-central1 \
    --description="Remote Docker repository" \
    --mode=remote-repository \
    --remote-repo-config-desc="Docker Hub" \
    --remote-docker-repo=DOCKER-HUB \
    --remote-username=USERNAME \
    --remote-password-secret-version=projects/PROJECT/secrets/my-secret/versions/1

ここで

  • quickstart-docker-hub-remote はリポジトリの名前です。プロジェクト内のリポジトリの場所ごとに、リポジトリ名は一意であることが必要です。
  • PROJECT_ID はプロジェクト ID です。このフラグを省略すると、現在のプロジェクトまたはデフォルトのプロジェクトが使用されます。
  • us-central1 は、リポジトリのリージョンまたはマルチリージョンのロケーションです。デフォルトを設定すると、このフラグを省略できます。サポートされているリポジトリのロケーションの一覧を表示するには、コマンド gcloud artifacts locations listを実行します。
  • "Remote Docker repository" は、リポジトリの説明です(省略可能)。リポジトリの説明は暗号化されないため、機密データは含めないでください。
  • "Docker Hub" は、このリモート リポジトリの外部リポジトリの構成の説明です(省略可能)。
  • DOCKER-HUB は、リモート リポジトリのパブリック Docker Hub アップストリームへのリモート リポジトリを設定します。
  • USERNAME は Docker Hub のユーザー名です。
  • projects/PROJECT/secrets/my-secret/versions/1 は、Docker Hub の個人アクセス トークンを保存するために作成したシークレット バージョンです。

Artifact Registry でリポジトリが作成され、リポジトリのリストに追加されます。

Docker 認証を構成する

イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストを認証します。

  1. Docker コマンドを実行するユーザーとして gcloud CLI にログインします。

    gcloud auth login
    
  2. リージョン us-central1 の Docker リポジトリの認証を設定するには、次のコマンドを実行します。

    gcloud auth configure-docker us-central1-docker.pkg.dev
    

    このコマンドにより、Docker 構成が更新されます。Google Cloud プロジェクトの Artifact Registry に接続して、イメージの push と pull ができるようになりました。

その他の認証方法については、認証方法をご覧ください。

リモート リポジトリにイメージを pull する

  1. Docker コマンドを実行するユーザーとして gcloud CLI にログインします。

    gcloud auth login
    
  2. 次のコマンドを使用して、イメージを Docker Hub からマシンに pull し、リモート リポジトリに pull します。

    docker pull us-central1-docker.pkg.dev/PROJECT/quickstart-docker-hub-remote/busybox:latest
    

    ここで

    • us-central1 は、リモート リポジトリのロケーションです。
    • us-central1-docker.pkg.dev は、作成した Docker リポジトリのホスト名です。
    • PROJECT は、Google Cloud プロジェクト ID です。 プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
    • quickstart-docker-hub-remote は、作成したリポジトリの ID です。
    • busybox は、Docker Hub から quickstart-docker-hub-remote に pull するイメージの名前です。
    • latest は、Docker Hub から pull するタグ付きイメージのバージョンです。

    イメージがマシンに pull され、リモート リポジトリのキャッシュに保存されます。タグ付けされた同じイメージを再度 pull すると、リモート リポジトリから pull されます。Docker Hub 認証情報が使用されます。

  3. リモート リポジトリに保存されているアーティファクトを一覧表示します。

    gcloud artifacts packages list \
        --location=us-central1 \
        --repository=quickstart-docker-hub-remote
    

    出力は次のようになります。

    Listing items under project my-project, location us-central1, repository quickstart-docker-hub-remote.
    
    PACKAGE: busybox
    CREATE_TIME: 2023-06-19T18:59:09
    UPDATE_TIME: 2023-06-19T18:59:10
    

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

リポジトリを削除する

プロジェクトを削除せず、リポジトリ リソースのみを削除する場合は、このセクションの手順に沿って操作します。プロジェクト全体を削除するには、プロジェクトの削除の手順に従ってください。

リポジトリを削除する前に、保持する必要があるイメージが別の場所で使用可能であることを確認してください。

リポジトリを削除するには、次の手順を行います。

コンソール

  1. Google Cloud コンソールで [リポジトリ] ページを開きます。

    [リポジトリ] ページを開く

  2. [リポジトリ] リストで、quickstart-docker-hub-remote リポジトリを選択します。

  3. [削除] をクリックします。

gcloud

quickstart-docker-hub-remote リポジトリを削除するには、次のコマンドを実行します。

gcloud artifacts repositories delete quickstart-docker-hub-remote \
    --location=us-central1

プロジェクトを削除する

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ