GitHub Packages で Docker imageを公開する


概要

Docker Imageを GitHub Packages Container registry (GPCR) に公開

レポジトリ

https://github.com/junara/docker_echo_hello

Build

GitHubでtagがpublishをフックにして、GitHub Actionsにより、自動的にGPCRに公開されます。

on:
  push:
    tags:
      - '*'

Docker imageのタグ名は latestとtag名です。

VERSION=$(echo ${{ github.ref }} | sed -e "s#refs/tags/##g")

ref .github/workflows/deploy.yml

Pull

GCPRに公開されたimageは、docker コマンドでpullできます。

Docker公式のレポジトリに公開している場合との違いは、冒頭に ghcr.io をつける事です。

docker image pull ghcr.io/junara/docker_echo_hello:latest

ref. 名前によるプル

Test image

Pullしたimageは下記で動作確認できます。

echoの出力 We love rabbits ! が出れば成功です。

docker container create --name docker_echo_hello ghcr.io/junara/docker_echo_hello
docker container start -i docker_echo_hello
# We love rabbits !

containerとimageの削除

containerを削除する

docker container rm docker_echo_hello
# docker_echo_hello

imageを削除する

docker image rm ghcr.io/junara/docker_echo_hello

containerとimageが削除されたことを確認する。

docker container ls
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

docker image ls    
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE

おまけ

ローカルでbuildする

リポジトリをクローンしてきて、ビルドする。

git clone [email protected]:junara/docker_echo_hello.git
docker image build . -t docker_echo_hello

imageが作られたことを確認する。

docker image ls

# REPOSITORY                 TAG       IMAGE ID       CREATED       SIZE
# docker_echo_hello          latest    263ac394977b   5 days ago    1.24MB

containerを作る

docker container create --name docker_echo_hello docker_echo_hello
docker container start -i docker_echo_hello
# We love rabbits !

We love rabbits !がでれば成功。

containerとimageを削除して片付ける。

docker container rm docker_echo_hello
docker image rm docker_echo_hello

private公開する場合

privateで公開することができます。すなわち、制限されたユーザーのみがimageをダウンロードできるようにできます。

ダウンロードするためには、personal access tokenを発行して事前にログインをすればよいです。

Personal access token の発行

GitHubのsettingからできます。

画面に表示されたtokenをメモします。以下のログインをするでつかいます。

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 (現在は無効にしています。)

ログインをする

こちらを参考にしました。 https://docs.github.com/ja/packages/working-with-a-github-packages-registry/working-with-the-container-registry

#{YOUR_GITHUB_PAT}は、Personal access token の発行で発行したtokenをつかいます。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

export CR_PAT=#{YOUR_GITHUB_PAT}
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin

tokenをあてはめるとexport CR_PAT=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 こんなかんじ。

imageをpullする

docker image pull ghcr.io/junara/docker_echo_hello:latest

あとは、上述と同様です。

ログアウトする

下記でログアウトできます。

docker logout ghcr.io