3行まとめ
-
gh auth login -s write:packages
でwrite:packages
スコープ付きでログイン -
docker login ghcr.io -u <ユーザー名> -p $(gh auth token)
でGHCRにログイン -
docker push ghcr.io/<ユーザー名>/<リポジトリ名>:latest
でイメージをプッシュ
本稿ではGitHub CLI (ghコマンド)を使って、GitHub Container Registry (GHCR) にDockerイメージをプッシュする際の設定方法をご紹介します。
gh
コマンドを使っている人は、もうGitHubのWebページからpersonal access tokenをいちいち取りに行かなくて済むので便利ですよ。
背景
GitHub Packagesの一部であるGitHub Container Registry (GHCR) を使うと、GitHub上でコンテナイメージを簡単にホスト・管理できます。
ただし、Dockerでプッシュする際にはトークンにwrite:packagesスコープが必要です。
GitHub CLI (gh) では、リポジトリ操作だけでなく、発行されるトークンのスコープを柔軟に指定できるため、Dockerイメージのプッシュもスムーズに行えます。
手順
1. すでにログインしている場合はログアウトする
GHCRへのプッシュに必要なトークンスコープを新たに付与したい場合、まず既存の認証状態からログアウトします。
gh auth logout
2. write:packages スコープ付きのトークンを取得する
GitHub CLIを使ってログインします。このとき、-s write:packages のオプションを指定することで、パーソナルアクセストークンにwrite:packagesスコープが追加されます。
gh auth login -s write:packages
ログインが完了すると、gh auth tokenコマンドでトークンを取得できます。
gh auth token
このコマンドで表示されたトークンは、GHCRにログインする際やDockerでプッシュする際に使用します。
ちなみに、このトークンは「OAuth Access Token」です。基本的に有効期限がないものになります。
3. GHCRにログインする
取得したトークンを使ってDockerでGHCRにログインします。
ghcr.io はGitHubのコンテナレジストリのドメインです。
docker login ghcr.io -u <GitHubユーザー名> -p $(gh auth token)
-u にGitHubのユーザー名を指定し、パスワードとして gh auth token の出力を渡します。
4. Dockerイメージをビルドしてプッシュする
ログインが完了したら、あとは通常のDockerプッシュと同じ手順です。
以下のようにイメージをビルドし、GHCRにプッシュしてください。
# イメージをビルド (例: REPO という名前のイメージを作成)
docker build -t ghcr.io/<GitHubユーザー名>/<リポジトリ名>:latest .
# プッシュ
docker push ghcr.io/<GitHubユーザー名>/<リポジトリ名>:latest
<GitHubユーザー名>
と <リポジトリ名>
の部分は適宜変更してください。
まとめ
- gh auth logout で一度ログアウトしたうえで gh auth login -s write:packages する。
- gh auth token で取得したトークンを使って docker login ghcr.io。
- あとは通常のDockerイメージのプッシュと同じ手順で docker push ghcr.io/USERNAME/REPO:tag すればOK。
GitHub CLIを活用することで、コマンドラインから一貫してGitHubの各種サービスにアクセスできるのが便利ですね。
これで、GitHub CLIでwrite:packagesスコープを取得し、GHCRにDockerイメージをプッシュする方法の説明は以上です。ご参考になれば幸いです😌