ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Dockerイメージの公開

継続的インテグレーション(CI)の一部として、Docker HubやGitHub Packagesといったレジストリに対しDockerイメージを公開できます。

GitHub ActionsはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。

ここには以下の内容があります:

Note: GitHub Actions was available for GitHub Enterprise Server 2.22 as a limited beta. The beta has ended. GitHub Actions is now generally available in GitHub Enterprise Server 3.0 or later. For more information, see the GitHub Enterprise Server 3.0 release notes.


Note: GitHub-hosted runners are not currently supported on GitHub Enterprise Server. You can see more information about planned future support on the GitHub public roadmap.

はじめに

このガイドでは、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. 詳しい情報については「GitHub.comからのアクションへのアクセスの管理」を参照し、GitHub Enterpriseのサイト管理者に連絡してください。

Docker Hubへのイメージの公開

GitHub上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 以下の例のワークフローは、createdというアクティビティの種類を持つreleaseイベントが生じた時に実行されます。 releaseイベントに関する詳しい情報については「ワークフローを起動するイベント」を参照してください。

以下のワークフローの例では、Dockerのbuild-push-actionアクションを使ってDockerイメージをビルドし、ビルドが成功すれば構築されたイメージをDocker Hubにプッシュします。

Docker Hubにプッシュするためには、Docker Hubのアカウントを持っており、Docker Hubのレジストリを作成していなければなりません。 詳しい情報については、Docker のドキュメントにある「Docker Hub でイメージを共有する」を参照してください。

Docker Hubに必要なbuild-push-actionのオプションは以下のとおりです。

  • username及びpassword: Docker Hubのユーザ名とパスワードです。 ワークフローファイルに公開されないように、Docker Hub のユーザ名とパスワードをシークレットとして保存することをお勧めします。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。
  • repository: DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORYフォーマットでのDocker Hubのリポジトリ。
YAML
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に設定しなければなりません。
YAML
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つのワークフローを作成します。

YAML
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タグになります。

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.