はじめに
このガイドでは、Dockerのビルドを実行し、DockerのイメージをDocker HubあるいはGitHub Packagesに公開するワークフローの作成方法を紹介します。 1つのワークフローで、1つのレジストリあるいは複数のレジストリにイメージを公開できます。
ノート: 他のサードパーティのDockerレジストリにプッシュしたい場合は、「GitHub Packagesへのイメージの公開」セクションにある例がよいテンプレートになるでしょう。
必要な環境
ワークフローの設定オプションと、ワークフローファイルの作成方法についての基本的な知識を持っておくことをおすすめします。 詳しい情報については、「GitHub Actions を学ぶ」を参照してください。
以下についての基本的な理解があると役に立つでしょう。
イメージの設定について
このガイドは、GitHubレジストリ内に保存されたDockerのイメージについての完全な定義を持っていることを前提としています。 たとえば、リポジトリにはイメージを作成するためのDockerビルドを行うのに必要なDockerfileやその他のファイルが含まれていなければなりません。
このガイドではDockerのbuild-push-action
アクションを使って、Dockerイメージをビルドし、それを1つ以上のDockerレジストリにプッシュします。 詳しい情報についてはbuild-push-action
を参照してください。
Docker Hubへのイメージの公開
GitHub上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 以下の例のワークフローは、created
というアクティビティの種類を持つrelease
イベントが生じた時に実行されます。 release
イベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。
以下のワークフローの例では、Dockerのbuild-push-action
アクションを使ってDockerイメージをビルドし、ビルドが成功すれば構築されたイメージをDocker Hubにプッシュします。
Docker Hubにプッシュするためには、Docker Hubのアカウントを持っており、Docker Hubのレジストリを作成していなければなりません。 For more information, see "Pushing a Docker container image to Docker Hub" in the Docker documentation.
Docker Hubに必要なbuild-push-action
のオプションは以下のとおりです。
username
及びpassword
: Docker Hubのユーザ名とパスワードです。 We recommend storing your Docker Hub username and password as secrets so they aren't exposed in your workflow file. 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。repository
:DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY
フォーマットでのDocker Hubのリポジトリ。
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to Docker Hub
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Push to Docker Hub
uses: docker/build-push-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: my-docker-hub-namespace/my-docker-hub-repository
tag_with_ref: true
上記のワークフローはGitHubのリポジトリをチェックアウトし、build-push-action
アクションを使ってDockerイメージをビルドしてプッシュします。 このワークフローはbuild-push-action
のオプションのtag_with_ref
を設定し、自動的にビルドされたDockerイメージにワークフローイベントのGitの参照がタグ付けされるようにします。 このワークフローは、GitHub リリースの公開で動作するので、参照されるのはそのリリースのGitタグになります。
GitHub Packagesへのイメージの公開
GitHub上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 以下の例のワークフローは、created
というアクティビティの種類を持つrelease
イベントが生じた時に実行されます。 release
イベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。
以下のワークフローの例では、Dockerのbuild-push-action
アクションを使ってDockerイメージをビルドし、ビルドが成功すれば構築されたイメージをGitHub Packagesにプッシュします。
GitHub Packagesに必要なbuild-push-action
のオプションは以下のとおりです。
username
:${{ github.actor }}
コンテキストを使って、ワークフローの実行を始めたユーザのユーザ名を自動的に使うことができます。 詳しい情報については、「GitHub Actionsのコンテキストと式構文」を参照してください。password
: パスワードには、自動的に生成されたGITHUB_TOKEN
シークレットを利用できます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。registry
:docker.pkg.github.com
に設定しなければなりません。repository
:OWNER/REPOSITORY/IMAGE_NAME
というフォーマットで設定しなければなりません。 たとえば、http://github.com/octo-org/octo-repo
にあるGitHub上に保存されるocto-image
という名前のイメージでは、repository
オプションはocto-org/octo-repo/octo-image
に設定しなければなりません。
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registry:
name: Push Docker image to GitHub Packages
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Push to GitHub Packages
uses: docker/build-push-action@v1
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: docker.pkg.github.com
repository: my-org/my-repo/my-image
tag_with_ref: true
上記のワークフローはGitHubのリポジトリをチェックアウトし、build-push-action
アクションを使ってDockerイメージをビルドしてプッシュします。 このワークフローはbuild-push-action
のオプションのtag_with_ref
を設定し、自動的にビルドされたDockerイメージにワークフローイベントのGitの参照がタグ付けされるようにします。 このワークフローは、GitHub リリースの公開で動作するので、参照されるのはそのリリースのGitタグになります。
Docker HubとGitHub Packagesへのイメージの公開
1つのワークフローで、それぞれのレジストリに対してbuild-push-action
アクションを使い、複数のレジストリにDockerイメージを公開できます。
以下のワークフローの例では、以前のセクション(「Docker Hubへのイメージの公開」及び「GitHub Packagesへのイメージの公開」)でのbuild-push-action
ステップを使い、両方のレジストリにプッシュを行う1つのワークフローを作成します。
name: Publish Docker image
on:
release:
types: [published]
jobs:
push_to_registries:
name: Push Docker image to multiple registries
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v2
- name: Push to Docker Hub
uses: docker/build-push-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
repository: my-docker-hub-namespace/my-docker-hub-repository
tag_with_ref: true
- name: Push to GitHub Packages
uses: docker/build-push-action@v1
with:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
registry: docker.pkg.github.com
repository: my-org/my-repo/my-image
tag_with_ref: true
上のワークフローの例は、GitHubリポジトリをチェックアウトし、build-push-action
アクションを2回使ってDockerイメージをビルドしてDocker HubとGitHub Packagesにプッシュします。 どちらのステップでも、このワークフローはbuild-push-action
のオプションのtag_with_ref
を、構築されたDockerイメージをワークフローイベントのGit参照で自動的にタグ付けするように設定します。 このワークフローはGitHubリリースの公開で起動されるので、どちらのレジストリの参照も、そのリリースのGitタグになります。