GoogleCloudのPrive Docker Registryをを使う

GoogleContainerRegistry 開発関連
スポンサーリンク

Docker Hubではなく完全にプライベートなレジストリが作りたいことがあると思います。
そんなときはregistry serverを自前で立てれば実現可能ですが、GoogleCloudではServerを立てずにほぼ無料で使えるので紹介したいと思います。

スポンサーリンク

セットアップ

consoleにログインして「Container Registry」を開き「Container Registry API」を有効化します。

APIの有効化に成功したら、どれぐらい効果あるかわかりませんが設定から脆弱性スキャンの設定を確認します。無料で使えるので特に無効にしなくてもいいかと思います。

gcloudのインストールがまだの場合はここを参照してください。

スポンサーリンク

Dockerイメージをpushする

Dockerのバージョンにより認証方法が異なるため、バージョンの確認をします。

$docker -v

18.03以上の場合

gcloudコマンドで認証します。ドキュメントはここ

$gcloud auth configure-docker

これをやらずにpullすると認証エラーになります。以下は認証せずにdocker-compose upを実行した際のエラーです。

$docker-compose up
Pulling shimer-hp (asia.gcr.io/XXXXXXX/shimer-hp:latest)...
ERROR: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication

ビルド〜pushまでの例

#!/bin/sh

APP_NAME=asia.gcr.io/XXXXXXX/shimer-hp

docker build -t $APP_NAME:latest ./
# 新しいイメージをlatestでアップ
docker push $APP_NAME:latest
# 不要なローカルにあるイメージを削除
docker image prune -f

18.02以下の場合

トークンを発行します。

$ gcloud auth print-access-token

そのトークンを使ってdocker loginします。

$docker login -u oauth2accesstoken -p トークン https://asia.gcr.io

oauth2accesstokenは固定で、asia.gcr.ioの部分はレジストリの場所によって変える必要があります。
以下は古いDockerで認証せずにdocker-compose upを実行した際のエラーです。

$docker-compose up -d
Pulling shimer-hp (asia.gcr.io/XXXXXXXXXXX/shimer-hp:latest)...
Pulling repository asia.gcr.io/XXXXXXXXXXX/shimer-hp
ERROR: unauthorized: authentication required

ビルド〜pushまでの例

#!/bin/sh

APP_NAME=asia.gcr.io/XXXXXXXX/shimer-hp

docker build -t $APP_NAME:latest ./

# 新しいイメージをlatestでアップ
gcloud docker -- push $APP_NAME:latest
# 不要なローカルにあるイメージを削除
docker image prune -f
スポンサーリンク

おまけ

その他コマンド

古いイメージを消したり

# 古いイメージを削除
gcloud container images delete $APP_NAME:v1 --force-delete-tags --quiet
# latestにv1タグ追加
gcloud container images add-tag $APP_NAME:latest $APP_NAME:v1 --quiet
# latestタグを削除
gcloud container images untag $APP_NAME:latest --quiet

気になる料金

ストレージと下りネットワークのみが課金対象です。無料枠を考えるとほぼ無料で使えます。
詳細はここ

さいごに

Dockerのバージョンによりコマンドが異なるため分かりづらいですが、
これからはじめる方は18.03以上のDockerを使ったほうがdockerコマンドそのままなので無駄なことを覚えなくてすむんじゃないかと思います。


タイトルとURLをコピーしました