概要
2020年9月1日、GitHub が GitHub Container Registry をパブリック・ベータとして発表 し、同日から利用開始になりました。これは Docker Hub のような公開レジストリ(Dockerイメージを置く場所)の1つであり、GitHub アカウントさえあれば、誰でも利用できるサービスです。
これは ghcr.io 上に Docker イメージを push し、誰でもイメージをダウンロードできるようにするまでの手順をまとめました。
GitHub Container Registry とは?
- GitHub が提供する、(現時点で)無料で利用可能な、容量無制限の Docker イメージのレジストリ(
ghcr.io
は、これまでのdocker.pkg.github.com
とは別) - Docker イメージは誰でもダウンロードでき(anonymous pulls) 、公開(public)または非公開(private)も自分で選べる
- GitHub Package のイメージは削除できないが、ghcr.io に公開した Docker イメージは削除できる
- 利用するには
docker login
コマンドで、ghcr.io
に対してログインする。ログイン時の認証は GitHub の Personal Token を使う
以上のことから、 GitHub Container Registry は、 Docker Hub の新しいイメージ保管ポリシー による制限や影響を受けることなく、Docker イメージを第三者に対して公開できる場所であるとも言えるでしょう(現時点では)。
手順
イメージを ghcr.ioに push して公開するには
イメージを GitHub Container Registry (以下 GHCR )に送信するには、予め docker login
コマンドで、GHCR に対してログインが必要です。ログインをするためには、GitHub 上の自分の設定ページ上で Personal Access Tokenを作成する必要があります(手順のドキュメント)。
ここでは、仮に ~/ghcr.txt
に Personal Access Token の文字列を記録しているとします。
次に、 docker login
コマンドで GHCR
にアクセスします。以下 <githubユーザ名>
は皆さん自身のユーザ名を入力します。
cat ~/ghcr.txt | docker login ghcr.io -u <githubユーザ名> --password-stdin
認証に成功すると、次のようなメッセージが表示されます。
WARNING! Your password will be stored unencrypted in /home/name/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
イメージを送信するには、送信する前にイメージにタグを付ける必要があります。Docker Hub の場合は <ユーザ名>/イメージ名:タグ
の形式でしたが、GHCR の場合は ghcr.io/<ユーザ名>/イメージ名:タグ
にする必要があります。
たとえば、
- イメージ ID
bf9f52b2d3fa
のイメージ
があるとして、これを
- リポジトリ名を
docker-sample-nginx
- イメージ名を
sample-nginx
- タグを
latest
のようにしたい場合は、送信するイメージにタグ ghcr.io/zembutsu/docker-sample-nginx/sample-nginx:latest
を付ける必要があります。そのためには docker tag
コマンドで、 次のように実行します。
docker tag bf9f52b2d3fa ghcr.io/zembutsu/docker-sample-nginx/sample-nginx:latest
docker images
でタグ追加を確認したら、 docker push
コマンドで送信するだけです。
$ docker push ghcr.io/zembutsu/docker-sample-nginx/sample-nginx:latest
The push refers to repository [ghcr.io/zembutsu/docker-sample-nginx/sample-nginx]
a49a33440fe7: Pushed
c63ea97607b8: Pushed
6ad8d562c843: Layer already exists
425ee8569962: Layer already exists
5d9ee84be1ec: Layer already exists
6bcd003260b2: Layer already exists
50644c29ef5a: Layer already exists
latest: digest: sha256:d6f2938d0fab3daeb6433c361da460970eb9b8d2796f1679afe6e41bb87b1937 size: 1774
この時点で docker-sample-nginx
という名前で private なリポジトリが自動作成され、イメージのパス(イメージ名・タグ)を知っていれば、誰でもダウンロード可能になります。
アップロードしたイメージを確認するには、自分の GitHub プロフィールから Packages
のタブをクリックすると、パッケージ情報の中に Private
のマークがついた Docker イメージの情報が見えます。
ここで表示されるパッケージ名をクリックし、イメージをダウンロード(pull)する URL の確認や、イメージの公開やイメージ削除ができます。これら状態を変更するには Edit package
をクリックします。
View All versions
で全てのタグを表示し、タグごとに削除を選べます。
また、 Package settings
からは一般公開(Make public)かパッケージ削除(Delete this package)の選択肢が出ます。
ここで Make public
を選択すると、自分のプロフィール上でも対象イメージに関するパッケージ情報が表示されます。
Enjoy!
参考情報
- Introducing GitHub Container Registry - The GitHub Blog
- Migrating to GitHub Container Registry for Docker images - GitHub Docs
- Docker Support for the New GitHub Container Registry - Docker Blog