GitHub Container Registryに公開リポジトリを作ってみた|sitateru tech blog

シタテルの技術やエンジニアの取り組みを紹介するテックブログです。

2021年12月22日水曜日

GitHub Container Registryに公開リポジトリを作ってみた

みなさんはコンテナイメージはどこに置いているでしょうか。
シタテルでは「基本はECR、GCPで利用するイメージはGCR」というまあ普通な構成になっています。
ですがこの度、「せっかく作ったし公開しておいてもいいかな」というコンテナイメージの置き場としてGHCRを使い始めました。

GHCRとは

コンテナレジストリの利用 - GitHub Docs
GHCRはGitHub Container Registryの頭文字で、GitHub上でいろいろなパッケージを公開できるGitHub Packagesの一機能といったところでしょうか。
DockerfileをGitHubで管理するならGitHub上でイメージ配布まで完結するわけですね。

料金ですが、パブリックなパッケージについては無料となってます。今回のニーズにはちょうどいいですね。
About billing for GitHub Packages - GitHub Docs

イメージのpull/push等は ghcr.io/<OWNER>/<IMAGE_NAME>:<tag> という表記になります。(OWNERはGitHubのユーザー名やorganization名になります)

push前などに認証する場合は以下のようになります。

  1. write:packages スコープを持つアクセストークンを作っておく
  2. $ echo <token> | docker login ghcr.io -u USERNAME --password-stdin

リポジトリ作成・push

というわけで、organizationのPackagesにコンテナイメージをアップロードして公開してみましょう。
上記のコマンドで認証したら、好きなイメージ名とタグ名をつけてpushするだけです。

$ echo $GH_TOKEN | docker login ghcr.io -u sitateru --password-stdin
$ docker pull hello-world:latest
$ docker tag hello-world:latest ghcr.io/sitateru/hello-world:latest
$ docker push ghcr.io/sitateru/hello-world:latest

アップロードしたパッケージは、https://github.com/orgs/&lt;OWNER>/packagesのURLで一覧できます。


organizationにアップロードすると、最初はInternalというアクセス設定になるようです。

公開するためには、設定画面から Change package visiblity をクリックしてPublicを選択。
確認のためパッケージ名を入力してボタンをクリックすれば完了です。



リポジトリと紐づけ

作成したパッケージにはリポジトリを紐づけできるようになっています。
パッケージのページで Connect Repository をクリックしてリポジトリを選択すればOKです。


紐づけするとリポジトリのREADMEがパッケージのREADMEとして表示されるほか、パッケージのアクセス権限を「紐づけたリポジトリと等しくする」ことができます。管理の手間が楽になってありがたいですね。


どんなイメージを公開するか

現在のところ、ローカル開発環境やCIで使うために公式イメージに一手間加えたようなものばかりです。詳しくはリポジトリをご参照ください。

GitHub - sitateru/docker-images

ご利用はご自由にどうぞなのですが、保証やサポート等はできませんのでご了承ください🙇‍♂️
タグ追加などの要望があれば、issueなりPRなりいただければできる限り対応しますのでよろしくお願いします。

, ,