GitHub Container Registry試してみた

4 min read読了の目安(約2700字

GitHub Packagesのdockerに下記手順が表示されていたので試してみる

# Step 1: Authenticate
$ cat ~/GH_TOKEN.txt | docker login docker.pkg.github.com -u okdyy75 --password-stdin
# Step 2: Tag
$ docker tag IMAGE_ID docker.pkg.github.com/okdyy75/repository-name/IMAGE_NAME:VERSION
# Step 3: Publish
$ docker push docker.pkg.github.com/okdyy75/repository-name/IMAGE_NAME:VERSION

事前準備

まずはDockerイメージをpushするリポジトリを作成しておく
自分はdev-dockerにした

GitHubのDeveloper settingsから「Personal access tokens」を新規に作成

https://github.com/settings/tokens

repo、write:packages、read:packagesにチェック
作成したトークンを~/GH_TOKEN.txtとして保存

vi ~/GH_TOKEN.txt

# ログイン
cat ~/GH_TOKEN.txt | docker login docker.pkg.github.com -u okdyy75 --password-stdin

pushするDockerイメージを作成

ubuntuイメージをベースに作成

docker run -itd --name ubuntu ubuntu:latest
docker exec -it ubuntu bash

# コンテナ内で
root@d2648104be5d:/# echo "test" > test.txt

# Dockerイメージを保存
docker commit ubuntu ubuntu:okdyy75

GitHubに作成したDockerイメージをpush

docker tag ubuntu:okdyy75 docker.pkg.github.com/okdyy75/dev-docker/ubuntu:okdyy75
docker push docker.pkg.github.com/okdyy75/dev-docker/ubuntu:okdyy75

pushしたDockerイメージをpullして確認

ローカルのDockerイメージを全て削除する呪文 ※使用注意

docker rmi -f $(docker images -aq)

GitHubのPackegesから確認できます

docker run -itd --name ubuntu docker.pkg.github.com/okdyy75/dev-docker/ubuntu:okdyy75
docker exec -it ubuntu bash
cat test.txt

と色々やっていたがどうやらpushしたのはGitHub Packagesのdocker.pkg.github.comの方で、GitHub Container Registryを使う場合は正しくはghcr.ioの方らしい

GitHub Packagesの保存容量はFreeだと500MBで色々制限があるらしい。詳細は下記

https://docs.github.com/ja/github/setting-up-and-managing-billing-and-payments-on-github/about-billing-for-github-packages

ghcr.ioの方がベータ期間中の今なら、プライベートで無料かつ容量無制限らしい

本題 GitHub Container Registry試してみた

# ghcrにログイン
cat ~/GH_TOKEN.txt | docker login ghcr.io -u okdyy75 --password-stdin

# さっき作ったimageをpullしてきて再度新しいimageを作成
docker run -itd --name ubuntu docker.pkg.github.com/okdyy75/dev-docker/ubuntu:okdyy75
docker exec -it ubuntu bash

# コンテナ内で
root@e1c638671beb:/# echo "test2" > test2.txt

docker commit ubuntu ubuntu:okdyy75
docker tag ubuntu:okdyy75 ghcr.io/okdyy75/dev-docker/ubuntu:okdyy75
docker push ghcr.io/okdyy75/dev-docker/ubuntu:okdyy75
docker stop ubuntu
docker rm ubuntu

# pushしたDockerイメージをpullして確認
docker rmi -f $(docker images -aq)
docker run -itd --name ubuntu ghcr.io/okdyy75/dev-docker/ubuntu:okdyy75

docker exec -ti ubuntu bash
# コンテナ内で
root@bfa08eace3b8:/# cat test2.txt 

ghcr.io上だとイメージのURIを知っていれば誰でもpullできるとどこかで見ましたが、そんな事はなかったですね。。。dockerログインしていなければ認証通らないので
誰かpullできたら教えてください

docker logout ghcr.io
docker pull ghcr.io/okdyy75/dev-docker/ubuntu:okdyy75
> Error response from daemon: Get https://ghcr.io/v2/okdyy75/dev-docker/ubuntu/manifests/okdyy75: unauthorized