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

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は、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。

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

GitHub Actions の支払いを管理する GitHubは、macOSランナーのホストにMacStadiumを使用しています。

はじめに

このガイドでは、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の通信」を参照してください。

Docker Hubへのイメージの公開

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

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

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

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

  • username及びpassword: Docker Hubのユーザ名とパスワードです。 We recommend storing your Docker Hub username and password as encrypted secrets in your GitHub repository 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タグになります。

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.