「GitHub Packages」を利用すると、Docker イメージを GitHub で管理することができます。GitHub Packages では Docker イメージのほかに、npm パッケージを公開することもできます。
GitHub が提供しているレジストリには、https://ghcr.io
とhttps://docker.pkg.github.com
の 2 つがありますので、この 2 つに Docker イメージを登録してみます。
準備
コンテナレジストリ認証・登録のために、write:packages
の権限があるパーソナルアクセストークンを発行しておきます。
また、レジストリに登録するイメージも作成しておきます。
FROM alpine:3.10
ENTRYPOINT ["echo", "hello world"]
1. Dockerfile からイメージを作成
$ docker build -t helloworld:latest .
2. イメージのテスト
$ docker run --name hello-world helloworld:latest
// hello world
パッケージ名前空間https://ghcr.io
に登録
1. コンテナレジストリでの認証
$ export CR_PAT=YOUR_TOKEN
$ echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
2. tag を付ける
$ docker tag helloworld:latest ghcr.io/kiyo27/helloworld:latest
3. コンテナレジストリにプッシュ
$ docker push ghcr.io/kiyo27/helloworld:latest
プッシュが成功すると**[Packages]**タブから登録された Docker イメージを確認することができます。
参考: コンテナレジストリの使用
https://docker.pkg.github.com
に登録する
GitHub の Docker レジストリ(docker.pkg.github.com
)は、コンテナレジストリ(https://ghcr.io
)に置き換えられたみたいです。コンテナレジストリの方がきめ細かい権限管理ができるそうです。
https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-docker-registry
今後もしかしたら、GitHub の Docker レジストリは非推奨になるかもしれません。
1. Docker レジストリでの認証
$ echo $CR_PAT | docker login https://docker.pkg.github.com -u kiyo27 --password-stdin
2. tag を付ける
_OWNER_をリポジトリを所有しているユーザ名に、_REPOSITORY_にはイメージを公開するリポジトリ名に変換します。
$ docker tag IMAGE_ID docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
$ docker tag helloworld:latest docker.pkg.github.com/kiyo27/hello-world-workflow/helloworld:latest
3. イメージをプッシュ
$ docker push docker.pkg.github.com/kiyo27/hello-world-workflow/helloworld:latest
参考: Docker レジストリの使用