かべぎわブログ

ブログです

ghcr.ioにイメージをPush,Pullする

概要

GitHubのコンテナレジストリ(ghcr.io)にイメージをプッシュしたりプルしたりする手順です。

プッシュする手順

プッシュしたいイメージのタグ付け

とりあえず今回はビルドからやってしまいます。 以下のようなDockerfileをつかってみます。

FROM alpine:latest

RUN echo 'test dayo'

# LABEL org.opencontainers.image.source=https://github.com/ユーザ名/リポジトリ名
LABEL org.opencontainers.image.source=https://github.com/takakabe/blog_RaspberryPi

以下コマンドを実行してビルドします。
ビルド済みイメージをプッシュしたい場合はタグだけつけます。
ghcr.io/ユーザ名(組織名)/イメージ名:タグ名とする必要があります。

docker build -t ghcr.io/ユーザ名(組織名)/イメージ名:タグ名 .

備考

ちなみに以下のようにすることで とすることでリポジトリとイメージを紐づけることができます。

LABEL org.opencontainers.image.source=https://github.com/ユーザ名/リポジトリ名

docker login する

PATを作成する

以下からGitHubのPersonal Access Tokenを生成します。 イメージをPush,Pullするためにはwrite:packagesを有効にしてあげる必要があります。write:packageを有効にするとrepoもいっしょに有効化されます。

https://github.com/settings/tokens/new

作成したPATはコピーしておきます。

docker login

以下コマンドを実行してdocker loginします。

export CR_PAT=さっきコピーしたトークン
echo ${CR_PAT} | docker login ghcr.io -u GitHubのユーザ名 --password-stdin

イメージをプッシュする

プッシュします。

docker push ghcr.io/ユーザ名(組織名)/イメージ名:タグ名

されました。

プルする手順

docker login する

PATを作成する

以下からGitHubのPersonal Access Tokenを生成します。 イメージをPush,Pullするためにはwrite:packagesを有効にしてあげる必要があります。write:packageを有効にするとrepoもいっしょに有効化されます。

https://github.com/settings/tokens/new

作成したPATはコピーしておきます。

docker login

以下コマンドを実行してdocker loginします。

export CR_PAT=さっきコピーしたトークン
echo ${CR_PAT} | docker login ghcr.io -u GitHubのユーザ名 --password-stdin

docker pull する

docker pull ghcr.io/ユーザ名(組織名)/イメージ名:タグ名

プルされました。

$ docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
ghcr.io/takakabe/test-image   latest    40b5edb89999   13 minutes ago   5.53MB

追補

プッシュしたイメージの権限、以下のチェックをつけてリポジトリの権限を引き継ぐように設定したほうが良い。 チームでつかうときにプッシュした人以外見れなかったりしたりしなかったりなってしまいます。

https://docs.github.com/en/enterprise-cloud@latest/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility#inheriting-access-for-a-container-image-from-a-repository