Publish Docker Image to GitHub Package Registry
5 月に発表されたGitHub Package Registryの limited public beta が通ったのでひとまず Docker イメージを push してみた。
How to Use
Docker イメージを push するための設定方法はこちら。
Configuring Docker for use with GitHub Package Registry
今回はこの GitHub リポジトリに Docker イメージを push した。
https://github.com/mazgi/docker.hugo-static-website
docker login
docker login
の前に、
Note: If you have two-factor authentication enabled, you must use a personal access token instead of a password.
とのことなので 2FA を有効にしている場合は https://github.com/settings/tokens から新しい token を払い出す。
scope は ⏬ の 2 つで問題なかった。
write:packages
read:packages
Password
の代わりに発行した token を入力すると docker login
が成功する。
$ docker login docker.pkg.github.com
Username: mazgi
Password:
Login Succeeded
なお 2FA が有効なままパスワードログインを試みると 401 Unauthorized
となる。
$ docker login docker.pkg.github.com
Username: mazgi
Password:
Error response from daemon: login attempt to https://docker.pkg.github.com/v2/ failed with status: 401 Unauthorized
docker push
すでにビルド済みイメージが手元にあったのでこれを push する。
$ docker images mazgi/hugo-static-website
REPOSITORY TAG IMAGE ID CREATED SIZE
mazgi/hugo-static-website hugo-0.55-2019.06.0 6cf1f0bee40d 6 days ago 491MB
mazgi/hugo-static-website hugo-0.54-2019.03.0 c8aee4d02e97 3 months ago 582MB
mazgi/hugo-static-website latest 7d61810b735c 7 months ago 565MB
mazgi/hugo-static-website hugo-0.52-2018.11.1 e8c33769e237 7 months ago 565MB
まずイメージ ID に対して
docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
の命名で tag
をつける。
$ docker tag 7d61810b735c docker.pkg.github.com/mazgi/docker.hugo-static-website/hugo-static-website:latest
そして docker push
$ docker push docker.pkg.github.com/mazgi/docker.hugo-static-website/hugo-static-website:latest
The push refers to repository [docker.pkg.github.com/mazgi/docker.hugo-static-website/hugo-static-website]
dfd97f0db723: Pushed
8d7ea83e3c62: Pushed
6a061ee02432: Pushed
f73b2816c52a: Pushed
6267b420796f: Pushed
a30b835850bf: Pushed
latest: digest: sha256:535f38767049a4991cc0d659771c4114a1795c86a3f29c3784df16620e381dfa size: 1570
push すると https://github.com/mazgi/docker.hugo-static-website/packages にイメージが表示される。
description も書ける模様。
リリースページでは git の tag などと混ざって表示される。
なるほど、今まで “Releases” と “Tags” の違いがいまいち薄いと思っていたがこういうことが計画されていたのだろうか。
docker pull
pull も特別な操作はなく行える。
$ docker pull docker.pkg.github.com/mazgi/docker.hugo-static-website/hugo-static-website:latest
latest: Pulling from mazgi/docker.hugo-static-website/hugo-static-website
Digest: sha256:535f38767049a4991cc0d659771c4114a1795c86a3f29c3784df16620e381dfa
Status: Image is up to date for docker.pkg.github.com/mazgi/docker.hugo-static-website/hugo-static-website:latest
That’s all
以下の点が特に便利だと感じた。
token で docker login
するだけで docker push
できる
例えば IaaS の CLI などをインストールしなくても push/pull できる。
認証/認可が GitHub Repository と共通
例えばチームメンバーが変更されたとき、あるいは CI/CD のステップとして pull/push するとき、GitHub の認証/認可だけ考慮すれば済む。
複数のイメージ名を 1 つの Registry に登録できる
例えば Web フロントエンド, BFF, etc.などをそれぞれ違うイメージとして 1 つの GitHub repository に紐付けて管理できる。
GitHub Actionsと組み合わせることで Write Code -> Build Container -> Deploy Container
を GitHub.com 上で行えるようになった。
次は Docker ホスティングサービスが出てきたら面白い