Docker Hub リモート リポジトリを作成する
Docker Hub のプロキシとして機能するリモート リポジトリを作成します。
準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Secret Manager APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 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 を起動するには、次の手順に従います。
Google Cloud Console に移動します。
[Cloud Shell をアクティブにする]()ボタンをクリックします。
コンソールの下部にあるフレーム内で Cloud Shell セッションが開きます。このシェルで gcloud
コマンドを実行します。
ローカルシェルの設定
gcloud CLI と Docker をインストールする手順は次のとおりです。
gcloud CLI をインストールします。既存のインストールを更新するには、
gcloud components update
コマンドを実行します。Docker をまだインストールしていなければ、インストールします。
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 は、ユーザー名です。
ログアウトして再度ログインすると、グループ メンバーシップの変更が反映されます。仮想マシンを使用している場合、メンバーシップの変更を有効にするために、仮想マシンの再起動が必要になることがあります。
Docker が稼働中であることを確認するには、現在の時刻と日付を返す次の Docker コマンドを実行します。
docker run --rm busybox date
--rm
フラグは、終了時にコンテナ インスタンスを削除します。
Docker Hub 認証を構成する
未認証の Docker Hub の割り当てが使用されないようにするには、リモート リポジトリを使用するときに Docker Hub で認証することをおすすめします。リモート リポジトリを使用すると、Docker Hub ユーザー名と、Docker Hub で認証するためのシークレットとして保存した個人用アクセス トークンを追加できます。
Docker Hub の個人用アクセス トークンを作成する
- Docker Hub にログインします。
- 読み取り専用の権限を持つ個人用アクセス トークンを作成します。
アクセス トークンをコピーします。
アクセス トークンをローカルまたは Cloud Shell のテキスト ファイルに保存します。
個人用アクセス トークンをシークレット バージョンに保存する
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[シークレット マネージャー] ページで、[シークレットを作成] をクリックします。
-
[シークレットの作成] ページの [名前] で、シークレットに
my-secret
という名前を付けます。 -
[シークレットの値] フィールドに、Docker Hub の個人用アクセス トークンを入力します。
-
[リージョン] セクションは変更しません。
-
[シークレットを作成] ボタンをクリックします。
gcloud CLI
gcloud secrets create my-secret --data-file="/path/to/file.txt"
ここで、/path/to/file.txt
は、個人用アクセス トークンを含むテキスト ファイルの場所です。
Artifact Registry サービス アカウントにシークレットへのアクセス権を付与する
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、
my-secret
の横にあるチェックボックスをオンにします。 -
まだ開いていない場合は、[情報パネルを表示] をクリックしてパネルを開きます。
-
情報パネルで [プリンシパルを追加] をクリックします。
-
[新しいプリンシパル] テキスト領域に、Artifact Registry サービス アカウントのメールアドレスを入力します。Artifact Registry サービス アカウントのメールアドレスは、次の形式になっています。
service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com
PROJECT-NUMBER はプロジェクト番号です。
プロジェクト番号を確認するには:
-
Google Cloud コンソールの [ダッシュボード] ページに移動します。
-
ページ上部の [選択元] プルダウン リストをクリックします。
-
表示された [選択元] ウィンドウで、プロジェクトを選択します。
プロジェクト ID とプロジェクト番号が、プロジェクト ダッシュボードの [プロジェクト情報] カードに表示されます。
-
-
[ロールを選択] プルダウンで、[シークレット マネージャー]、[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-central1
に quickstart-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 に対するリクエストを認証します。
Docker コマンドを実行するユーザーとして gcloud CLI にログインします。
gcloud auth login
リージョン
us-central1
の Docker リポジトリの認証を設定するには、次のコマンドを実行します。gcloud auth configure-docker us-central1-docker.pkg.dev
このコマンドにより、Docker 構成が更新されます。Google Cloud プロジェクトの Artifact Registry に接続して、イメージの push と pull ができるようになりました。
その他の認証方法については、認証方法をご覧ください。
リモート リポジトリにイメージを pull する
Docker コマンドを実行するユーザーとして gcloud CLI にログインします。
gcloud auth login
次のコマンドを使用して、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 の認証情報が使用されます。
リモート リポジトリに保存されているアーティファクトを一覧表示します。
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 アカウントに課金されないようにするには、次の手順を実施します。
リポジトリを削除する
プロジェクトを維持し、リポジトリ リソースのみを削除する場合は、このセクションの手順を行ってください。プロジェクト全体を削除するには、プロジェクトの削除の手順を行います。
リポジトリを削除する前に、保持する必要があるイメージが別の場所で使用可能であることを確認してください。
リポジトリを削除するには、次の手順を行います。
コンソール
Google Cloud コンソールで [リポジトリ] ページを開きます。
[リポジトリ] リストで、
quickstart-docker-hub-remote
リポジトリを選択します。[削除] をクリックします。
gcloud
quickstart-docker-hub-remote
リポジトリを削除するには、次のコマンドを実行します。
gcloud artifacts repositories delete quickstart-docker-hub-remote \ --location=us-central1
プロジェクトを削除する
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
次のステップ
- Artifact Registry のさまざまなリポジトリ モードを確認する。
- Artifact Registry のリモート リポジトリの詳細を確認する。
- CI / CD の詳細