- はじめに
- 環境
- (1) リポジトリの作成
- (2) Dockerfileの作成
- (3) GitHub Actionsのワークフローの作成
- (4) Personal Access Tokenの作成
- (5) Feature Previewを有効化
- (6) ワークフローの実行
- (7) コンテナイメージの公開の設定
- (8) 動作確認
- 参考
はじめに
GitHub Container Registryを使ってみたが、Preview版ならではのポイントがいくつかあったので、メモを残しておく。 ここでやりたいことは、GitHub Actionsを利用したCIで、コンテナイメージをビルドして、GitHub Container Registryにプッシュすること。
環境
# cat /etc/os-release | grep PRETTY_NAME PRETTY_NAME="Ubuntu 20.04.1 LTS"
(1) リポジトリの作成
ひとつリポジトリを作成する。
今回はghcr-workflow
という名前でリポジトリを作成した。
(2) Dockerfileの作成
リポジトリのトップディレクトリにDockerfileを作成する。
今回はGitHub Container Registryを使ってみることが目的なので、Dockerfileは以下のようなFROM
があるだけのシンプルなものにした。
FROM hello-world
(3) GitHub Actionsのワークフローの作成
以下の内容でワークフロー.github/workflows/build-and-push.yml
を作成する。
ここでは、実行のトリガを手動(workflow_dispatch
)にしている。
name: build and push container image on: workflow_dispatch: jobs: build_and_push: name: build and push container image runs-on: ubuntu-latest steps: - name: checkout repository uses: actions/checkout@v2 - name: login run: echo "${{ secrets.GHCR_TOKEN }}" | docker login --username "${{ github.repository_owner }}" --password-stdin ghcr.io - name: build run: docker build --tag "ghcr.io/${{ github.repository_owner }}/greeting:latest" . - name: push run: docker push "ghcr.io/${{ github.repository_owner }}/greeting:latest"
このワークフローでは、ソースコードをチェックアウトして、レジストリにログインして、コンテナイメージをビルドして、レジストリにプッシュする、という一連の流れを記述している。
レジストリへのログインの時にはGitHubのPersonal Access Tokenを利用する必要があり、ここではsecrets.GHCR_TOKEN
で指定している。
Personal Access Tokenについては次で説明する。
(4) Personal Access Tokenの作成
GitHub Container Registryの認証にはPersonal Access Tokenが必要なので、ここで作成しておく。
ドキュメントによると、Personal Access Tokenでは「read:packages
」と「write:packages
」と「delete:packages
」の3つのスコープをチェックしておくことになる。
そして、このPATをリポジトリのsecretsに登録する。ここではGHCR_TOKEN
という名前にしている。
ちなみに、GitHub Actionsのワークフローの中では、secrets.GITHUB_TOKEN
という暗黙のPersonal Access Tokenが利用できるのだが、現時点ではこれを利用しての認証はできないようだ。
Docker社のブログには以下のようにある。
Unfortunately what this means is the automatically generated GITHUB_TOKEN will not work for authentication for the initial release. You will have to go to GitHub, generate a personal access token, and create a GitHub Action secret.
言葉を補って訳すと以下になる。
残念なことだが、このことは、GitHub Container Registryの初期リリースにおいて、自動で生成されるGITHUB_TOKENでは認証がうまく機能しないことを意味している。 そのため、GitHubのWebサイトにアクセスし、personal access tokenを生成し、そしてGitHub Actionのsecretを作成しなければならない。
(5) Feature Previewを有効化
GitHub Container Registryは、本ブログの執筆時点ではまだFeature Previewであり、デフォルトでは無効化されている。 そのため、ワークフローの実行前に有効化しておく必要がある。 まずはGitHubのサイトの画面右上のメニューから「Feature Preview」を選択する。
そして、「Improved Container Support」のボタン「Enable」をクリックして有効化する。
(6) ワークフローの実行
以下の画面のように、作成したワークフローのジョブ「build and push container image
」を実行する。
ジョブの実行が完了すると、以下の画面のように実行時の標準出力を確認することができる。
ここではdocker push
が成功していることが分かる。
(7) コンテナイメージの公開の設定
デフォルトではコンテナイメージは非公開(private)になっているので、公開(public)にしておく。 この手順は、当該コンテナイメージを最初にGitHub Container Registryに登録したときだけ行えばよい。 タブ「Packages」で「Packages settings」を開き、「Make this packages public」でボタン「Make public」をクリックする。
コンテナイメージの公開は必須ではないが、以下の2点を気に留めておく必要がある。
- コンテナイメージの取得(
docker pull
等)には、コンテナレジストリへのログイン(docker login
)が必要になる - Feature Previewが終了してGeneral Availableになった際に、非公開のコンテナイメージは課金対象になる可能性がある
(8) 動作確認
docker run
を実行して動作確認。
$ docker run ghcr.io/jaybanuan/greeting Unable to find image 'ghcr.io/jaybanuan/greeting:latest' locally latest: Pulling from jaybanuan/greeting Digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 Status: Downloaded newer image for ghcr.io/jaybanuan/greeting:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
上記の通り、Hello from Docker!
というメッセージと、その下に解説文が表示されれば、動作確認は成功である。