0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[GCP]Artifact Registryまとめ

Last updated at Posted at 2024-09-12

Artifact RegistryへDockerイメージを保存する際に調査した情報を、自分用にやさしくまとめた記事。

1. 概要

Argifact Registry(略称: GAR)は、アーティファクトを保存して管理できるサービス。
アーティファクトとしてサポートされる形式は、Dockerイメージ、各言語のパッケージ、OSのパッケージである。
具体的にはサポートされている形式に記載されている。

2. リポジトリ

GAR上にあらかじめアーティファクトの保存場所になるリポジトリを作成する必要がある。
リポジトリの作成時には、保存対象の形式が何であるかを指定する必要がある。
また、リポジトリのモードを以下の3つから指定する必要がある。

  • 標準リポジトリ
  • リモートリリポジト
  • 仮想リポジトリ

参考: リポジトリの概要

2.1. 標準リポジトリ

アーティファクトの実体をGCP上に直接保存、管理する通常のリポジトリ。

2.2. リモートリポジトリ

読み取り専用のリポジトリであり、GCP外部のリポジトリに存在するアーティファクトを管理するためのプロキシ。
アーティファクトのバージョンを外部リポジトリからダウンロードする際にキャッシュが生成・保存され、次回以降のダウンロードで高速化が期待できる。

2.3. 仮想リポジトリ

読み取り専用のリポジトリであり、複数の標準リポジトリ、リモートリポジトリ上のアーティファクトをGCP上で一元管理するためのアクセスポイント。
上流のリポジトリはアップストリームリポジトリと呼ばれる。
複数のアップストリームリポジトリにアーティファクトが存在する場合に備え、アップストリームリポジトリの優先度を設定できる。

所感

ググった感じ、リモートリポジトリと仮想リポジトリについてはあまり情報がなく、少なくとも日本での採用事例は少なそう(2024/7/17時点)。

3. Dockerイメージの標準リポジトリを扱う

3.1. 完全名

Google Cloud API(を使うgloud CLI等のツール)を介してDockerイメージの標準リポジトリを操作する際には、リポジトリおよびDockerイメージの完全名について、命名規則を意識しておく必要がある。

3.1.1. リポジトリの完全名

命名規則

<リポジトリのロケーション(リージョン or マルチリージョン)>-docker.pkg.dev/<プロジェクトID>/<リポジトリ名>

例. ロケーション: us-west1, プロジェクトID: my-project, リポジトリ名: my-repo の場合

us-west1-docker.pkg.dev/my-project/my-repo 

3.1.2. コンテナイメージの完全名

命名規則
以下のいずれか

<リポジトリの完全名>/<イメージ名>
<リポジトリの完全名>/<イメージ名>:<タグ>
<リポジトリの完全名>/<イメージ名>@<ダイジェスト>

us-west1-docker.pkg.dev/my-project/my-repo/my-image
us-west1-docker.pkg.dev/my-project/my-repo/my-image:v1.2.3
us-west1-docker.pkg.dev/my-project/my-repo/my-image@sha256:4d11e24ba8a615cc85a535daa17b47d3c0219f7eeb2b8208896704ad7f88ae2d

補足

ダイジェスト
イメージ固有のsha256ハッシュ。自動生成され変更不可。

タグ
イメージにつけるラベル。手動で設定可能。タグはあるイメージの1バージョンを指すもので、リポジトリ内でユニーク。

タグの挙動:

  • 何もタグを指定せずにイメージをpushするとArtifact Registry上でlatestタグが付く。
  • 再度タグを指定せずにイメージをpushするとArtifact Registry上でlatestタグが後にpushしたイメージへ移動する。
  • タグを指定してイメージをpushするとArtifact Registry上でそのタグが付く。
  • 再度タグを指定してイメージをpushするとArtifact Registry上でそのタグが後にpushしたイメージへ移動する。

参考

3.2. ローカルのDockerイメージを標準リポジトリへPUSHする

3.2.1. 前提

  • コンテナイメージの標準リポジトリを作成しておく
  • PUSH対象のArtifact Regstryリポジトリリソース、またはプロジェクト の roles/artifactregistry.writerロール に対して PUSH可能なメンバーをバインディングしておく
  • 操作するマシン上でDockerをインストールしておく
  • Dockerの認証設定を済ませておく
  • ローカルのコンテナイメージが存在する

3.2.2. 手順

# ローカルイメージにArtifact Registryの標準リポジトリ上でのタグを設定する
docker tag <ローカルイメージのID or 名前> <リポジトリの完全名>/<リポジトリ上でのイメージ名>:<タグ>

# 標準リポジトリへpushする
## latestタグがついているローカルイメージをpush
docker push <リポジトリの完全名>/<リポジトリ上でのイメージ名>

## 自身でつけたタグがついているローカルイメージをpush
docker push <リポジトリの完全名>/<リポジトリ上でのイメージ名>:<タグ>

参考

イメージを push および pull する
Dockerの認証設定
[GCP]Artifact Registryへのログイン

    

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?