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前などに認証する場合は以下のようになります。
-
write:packages
スコープを持つアクセストークンを作っておく $ 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/<OWNER>/packages
のURLで一覧できます。
organizationにアップロードすると、最初はInternalというアクセス設定になるようです。
公開するためには、設定画面から Change package visiblity
をクリックしてPublicを選択。
確認のためパッケージ名を入力してボタンをクリックすれば完了です。
リポジトリと紐づけ
作成したパッケージにはリポジトリを紐づけできるようになっています。
パッケージのページで Connect Repository
をクリックしてリポジトリを選択すればOKです。
紐づけするとリポジトリのREADMEがパッケージのREADMEとして表示されるほか、パッケージのアクセス権限を「紐づけたリポジトリと等しくする」ことができます。管理の手間が楽になってありがたいですね。
どんなイメージを公開するか
現在のところ、ローカル開発環境やCIで使うために公式イメージに一手間加えたようなものばかりです。詳しくはリポジトリをご参照ください。
GitHub - sitateru/docker-images
ご利用はご自由にどうぞなのですが、保証やサポート等はできませんのでご了承ください🙇♂️
タグ追加などの要望があれば、issueなりPRなりいただければできる限り対応しますのでよろしくお願いします。