ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情� �を見ることができます。
はじめに
このガイドでは、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
を参照してく� さい。
Note: GitHub Actions on your GitHub Enterprise Server instance may have limited access to actions on GitHub.com or GitHub Marketplace. For more information, see "Managing access to actions from GitHub.com" and contact your GitHub Enterprise site administrator.
Docker Hubへのイメージの公開
GitHub上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 以下の例のワークフローは、created
というアクティビティの種類を持つrelease
イベントが生じた時に実行されます。 release
イベントに関する詳しい情� �については「ワークフローを起動するイベント」を参照してく� さい。
以下のワークフロー例では、Docker の login-action
アクションと build-push-action
アクションを使用して Docker イメージをビルドし、ビルドが成功すればそのイメージを Docker Hub にプッシュします。
Docker Hubにプッシュするためには、Docker Hubのアカウントを持っており、Docker Hubのレジストリを作成していなければなりません。 詳しい情� �については、Docker のドキュメントにある「Docker Hub でイメージを共有する」を参照してく� さい。
Docker Hub に必要な login-action
オプションは次のとおりです。
username
及びpassword
: Docker Hubのユーザ名とパスワードです。 ワークフローファイルに公開されないように、Docker Hub のユーザ名とパスワードをシークレットとして保存することをお勧めします。 詳しい情� �については、「暗号化されたシークレットの作成と利用」を参照してく� さい。
The metadata-action
option required for Docker Hub is:
images
: The namespace and name for the Docker image you are building/pushing to Docker Hub.
Docker Hubに必要なbuild-push-action
のオプションは以下のとおりです。
tags
:DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION
の形式の新しいイメージのタグ。 以下のとおり、単一のタグを設定することも、リストに複数のタグを指定することもできます。push
:true
に設定すると、イメージは正常にビルドされた� �合にレジストリにプッシュされます。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
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: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: my-docker-hub-namespace/my-docker-hub-repository
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
The above workflow checks out the GitHub repository, uses the login-action
to log in to the registry, and then uses the build-push-action
action to: build a Docker image based on your repository's Dockerfile
; push the image to Docker Hub, and apply a tag to the image.
GitHub Packagesへのイメージの公開
GitHub上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 以下の例のワークフローは、created
というアクティビティの種類を持つrelease
イベントが生じた時に実行されます。 release
イベントに関する詳しい情� �については「ワークフローを起動するイベント」を参照してく� さい。
In the example workflow below, we use the Docker login-action
and build-push-action
actions to build the Docker image, and if the build succeeds, push the built image to GitHub Packages.
GitHub Packages に必要な login-action
オプションは次のとおりです。
registry
: Must be set todocker.pkg.github.com
.username
:${{ github.actor }}
コンテキストを使って、ワークフローの実行を始めたユーザのユーザ名を自動的に使うことができます。 詳細については、「コンテキスト」を参照してく� さい。password
: パスワードには、自動的に生成されたGITHUB_TOKEN
シークレットを利用できます。 詳しい情� �については「GITHUB_TOKENでの認証」を参照してく� さい。
The build-push-action
options required for GitHub Packages are:
push
: If set totrue
, the image will be pushed to the registry if it is built successfully.tags
:docker.pkg.github.com/OWNER/REPOSITORY/IMAGE_NAME:VERSION
の形式で設定する必要があります。 たとえば、GitHub のhttp://github.com/octo-org/octo-repo
に保存されているocto-image
という名前のイメージの� �合、tags
オプションをdocker.pkg.github.com/octo-org/octo-repo/octo-image:latest
に設定する必要があります。 You can set a single tag as shown below, or specify multiple tags in a list.
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
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: Log in to GitHub Docker Registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.event.release.tag_name }}
The above workflow checks out the GitHub repository, uses the login-action
to log in to the registry, and then uses the build-push-action
action to: build a Docker image based on your repository's Dockerfile
; push the image to the Docker registry, and apply the commit SHA and release version as image tags.
Docker HubとGitHub Packagesへのイメージの公開
単一のワークフローで、各レジストリの login-action
アクションと build-push-action
アクションを使用して、Docker イメージを複数のレジストリに公開できます。
次のワークフロー例では、前のセクションのステップ(「Docker Hub へのイメージの公開」と「GitHub Packages へのイメージの公開」)を使用して、両方のレジストリにプッシュする単一のワークフローを作成します。
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。
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: Log in to Docker Hub
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Log in to the Docker registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: docker.pkg.github.com
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: |
my-docker-hub-namespace/my-docker-hub-repository
docker.pkg.github.com/${{ github.repository }}/my-image
- name: Build and push Docker images
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
The above workflow checks out the GitHub repository, uses the login-action
twice to log in to both registries and generates tags and labels with the metadata-action
action. Then the build-push-action
action builds and pushes the Docker image to Docker Hub and the Docker registry.