ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
GitHub AEは、現在限定リリース中です。詳細については営業チームにお問い合わせください。

Dockerイメージの公開

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

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

ノート: GitHub Actionsは現在GitHub AEでベータです。

はじめに

このガイドでは、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 の 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 のユーザ名とパスワードをシークレットとして保存することをお勧めします。 詳しい情報については、「暗号化されたシークレットの作成と利用」を参照してください。

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

  • tags: DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION の形式の新しい画像のタグ。 以下のとおり、単一のタグを設定することも、リストに複数のタグを指定することもできます。
  • push: true に設定すると、イメージは正常にビルドされた場合にレジストリにプッシュされます。
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: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Push to Docker Hub
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: my-docker-hub-namespace/my-docker-hub-repository:latest

上記のワークフローは、GitHub リポジトリをチェックアウトし、login-action を使用してレジストリにログインし、続いてbuild-push-action アクションを使用して、Dockerイメージをビルドしてプッシュします。 これは、ビルドされた Docker イメージにワークフローイベントの Git リファレンスをタグ付けします。 このワークフローは、GitHub リリースの公開で動作するので、参照されるのはそのリリースのGitタグになります。

GitHub Packagesへのイメージの公開

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

以下のワークフロー例では、Docker の login-action アクションと build-push-action アクションを使用して Docker イメージをビルドし、ビルドが成功すればそのイメージを GitHub Packages にプッシュします。

GitHub Packages に必要な login-action オプションは次のとおりです。

  • registry: docker.pkg.github.comに設定しなければなりません。
  • username: ${{ github.actor }}コンテキストを使って、ワークフローの実行を始めたユーザのユーザ名を自動的に使うことができます。 詳しい情報については、「GitHub Actionsのコンテキストと式構文」を参照してください。
  • password: パスワードには、自動的に生成されたGITHUB_TOKENシークレットを利用できます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。

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

  • 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 に設定する必要があります。 以下のとおり、単一のタグを設定することも、リストに複数のタグを指定することもできます。
  • push: true に設定すると、イメージは正常にビルドされた場合にレジストリにプッシュされます。
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: Log in to GitHub Docker Registry
        uses: docker/login-action@v1
        with:
          registry: docker.YOUR-HOSTNAME.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build container image
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: |
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.sha }}
            docker.YOUR-HOSTNAME.com/${{ github.repository }}/octo-image:${{ github.ref }}

上記のワークフローは、GitHub リポジトリをチェックアウトし、login-action を使用してレジストリにログインし、続いてbuild-push-action アクションを使用して、Dockerイメージをビルドしてプッシュします。 これは、ビルドされた Docker イメージにワークフローイベントの Git リファレンスをタグ付けします。 このワークフローは、GitHub リリースの公開で動作するので、参照されるのはそのリリースのGitタグになります。

Docker HubとGitHub Packagesへのイメージの公開

単一のワークフローで、各レジストリの login-action アクションと build-push-action アクションを使用して、Docker イメージを複数のレジストリに公開できます。

次のワークフロー例では、前のセクションのステップ(「Docker Hub へのイメージの公開」と「GitHub Packages へのイメージの公開」)を使用して、両方のレジストリにプッシュする単一のワークフローを作成します。

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: Log in to Docker Hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@v1
        with:
          registry: docker.YOUR-HOSTNAME.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Push to Docker Hub
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: my-docker-hub-namespace/my-docker-hub-repository:${{ github.ref }}
      - name: Build container image
        uses: docker/build-push-action@v2
        with:
          push: true
          tags: docker.YOUR-HOSTNAME.com/${{ github.repository }}/my-image:${{ github.ref }}

上記のワークフローは、GitHub リポジトリをチェックアウトし、login-action を 2 回使用して両方のレジストリにログインし、build-push-action アクションを 2 回使用して、Docker イメージをビルドして Docker Hub と GitHub Packages にプッシュします。 どちらのステップでも、ビルドされた Docker イメージにワークフローイベントの Git リファレンスをタグ付けします。 このワークフローはGitHubリリースの公開で起動されるので、どちらのレジストリの参照も、そのリリースのGitタグになります。

このドキュメントは役立ちましたか? プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問する サポートへの連絡