5
2

More than 1 year has passed since last update.

【まとめ】実例で覚えよう!有名なコンテナレジストリの認証コマンドとイメージ名規則

Last updated at Posted at 2022-02-13

コンテナレジストリ は、コンテナイメージを保存するためのレポジトリのことで、サービスとして提供している会社がいくつもあります。ただ、それぞれイメージ名の規則やコンテナクライアントの認証方法が異なるため、調べ直すことは多いのではないでしょうか。

この記事では、以下のコンテナレジストリの 認証コマンドイメージ名の規則 を紹介します。コンテナクライアントとして docker を想定しています。

Docker Hub

docker login コマンドで認証します。イメージ名は ACCOUNT_NAME/IMAGE_NAME のフォーマットで書きます。他のレジストリのホスト名をイメージ名の先頭につけることで、そのレジストリにプッシュできますが、つけない場合、デフォルトで registry-1.docker.io のパブリックレジストリを使用するので、会社のパソコンで開発する時には気をつけましょう(私はそもそもログインしないようにしています)

# 認証
docker login

# ビルド/プッシュ
docker build -t hankehly/test-image-1 .
docker push hankehly/test-image-1

AWS Elastic Container Registry (ECR)

Amazon ECRレジストリへの認証に推奨される方法は get-login-password コマンドです。このコマンドで認証トークンを取得して docker login コマンドに渡します。プッシュするイメージ用の レポジトリ を作成してから、そのURLをイメージ名として使います。

export AWS_ACCOUNT_ID="***"
export AWS_REGION="ap-northeast-1"
export REGISTRY_URI="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com"

# 認証
aws ecr get-login-password --region "${AWS_REGION}" | docker login --username AWS --password-stdin "${REGISTRY_URI}"

# レポジトリ作成
aws ecr create-repository --repository-name test-image-1

# ビルド/プッシュ
docker build -t "${REGISTRY_URI}/test-image-1" .
docker push "${REGISTRY_URI}/test-image-1"

Github Container Registry (GHCR)

個人アクセストークン(PAT)docker login コマンドに渡して認証します。イメージをプッシュするために、PATに write:packages のスコープを追加する必要があります。UIからPATを作ると、repo スコープが勝手に選択されますが、イメージ管理するだけならこの権限は不要なので、このリンクwrite:packages のみ選択した状態にできます。

GCRのイメージ名は ghcr.io/OWNER/IMAGE_NAME[:TAG] のフォーマットで書きます。

export GCR_PAT="***"

# 認証
echo $GCR_PAT | docker login ghcr.io -u USERNAME --password-stdin

# ビルド/プッシュ
docker build ghcr.io/hankehly/test-image-1 .
docker push ghcr.io/hankehly/test-image-1

これで GitHub アカウントに紐づけた状態でプッシュされ、https://github.com/{username}?tab=packages で確認できます。さらに、Dockerfile にラベルを追加すれば、特定の GitHub レポジトリに紐付けることができます。

LABEL org.opencontainers.image.source="https://github.com/{owner}/{repo}"

プッシュ後に、レポジトリのメインページの右側にイメージ名が表示されます。

packages-repo.png

Google Cloud Artifact Registry

gcloud auth configure-docker コマンドで認証します。また、gcloud auth print-access-token コマンドで、docker login コマンドに渡すためのアクセストークンを取得することも可能です。

イメージをプッシュする前に Artifact Registry のレポジトリ を作成する必要があります。イメージ名は LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE のフォーマットで書きます。

export GCP_REGION="asia-northeast1"
export GCP_PROJECT="***"
export REGISTRY_URI="${GCP_REGION}-docker.pkg.dev"

# 認証(オプション1)
gcloud auth configure-docker "${REGISTRY_URI}"
# 認証(オプション2)
# gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin "${REGISTRY_URI}"

# レポジトリ作成
gcloud artifacts repositories create my-repo --location "${GCP_REGION}" --repository-format docker

# ビルド/プッシュ
export IMAGE_NAME="${REGISTRY_URI}/${GCP_PROJECT}/my-repo/test-image-1"
docker build "${IMAGE_NAME}" .
docker push "${IMAGE_NAME}"

Google Cloud Container Registry (GCR)

コンテナイメージを管理するための推奨サービスが Artifact Registry です。Container Registry のサポートは今後、重要なセキュリティ修正のみ継続されます。

GCR は非推奨化されていますが、まだ使っている方が多いかと思います。Artifact Registry と違って、事前にレポジトリを作成する必要がないところが魅力的です。認証方法は Google Cloud Artifact Registry と同じで、イメージ名は HOSTNAME/PROJECT-ID/IMAGE のフォーマットで書きます。

export REGISTRY_URI="asia.gcr.io"
export GCP_PROJECT="***"
export IMAGE_NAME="${REGISTRY_URI}/${GCP_PROJECT}/test-image-1"

# 認証(オプション1)
gcloud auth configure-docker
# 認証(オプション2)
# gcloud auth print-access-token | docker login -u oauth2accesstoken --password-stdin "${REGISTRY_URI}"

# ビルド/プッシュ
docker build "${IMAGE_NAME}" .
docker push "${IMAGE_NAME}"

認証済みレジストリを確認する方法

Docker CLI は、$HOME ディレクトリ内の .docker に設定ファイルを保存します。この中の config.json に、過去認証したことがあるレジストリ情報が入っています。

$ jq < "${HOME}"/.docker/config.json

{
  "***.dkr.ecr.us-east-1.amazonaws.com": {},
  "asia-northeast1-docker.pkg.dev": {},
  "ghcr.io": {},
  "https://index.docker.io/v1/": {}
}
5
2
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
5
2