このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2021-09-23. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてください。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してください。

Dockerイメージの公開

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

ノート: GitHub Actionsは、GitHub Enterprise Server 2.22で限定ベータとして利用可能でした。 ベータは終了しました。 GitHub Actionsは、GitHub Enterprise Server 3.0以降で一般に利用可能になりました。 詳しい情報については、GitHub Enterprise Server 3.0 のリリースノートを参照してください。


ノート: 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を参照してください。

ノート: GitHub Enterprise Serverのインスタンス上のGitHub ActionsのGitHub.comあるいはGitHub Marketplace上のアクションへのアクセスには制限があるかもしれません。 詳しい情報については「GitHub.comからのアクションへのアクセスの管理」を参照し、GitHub Enterpriseのサイト管理者に連絡してください。

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 に設定すると、イメージは正常にビルドされた場合にレジストリにプッシュされます。
YAML
# このワークフローは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 to docker.pkg.github.com.
  • username: ${{ github.actor }}コンテキストを使って、ワークフローの実行を始めたユーザのユーザ名を自動的に使うことができます。 詳細については、「コンテキスト」を参照してください。
  • password: パスワードには、自動的に生成されたGITHUB_TOKENシークレットを利用できます。 詳しい情報については「GITHUB_TOKENでの認証」を参照してください。

The build-push-action options required for GitHub Packages are:

  • push: If set to true, 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.
YAML
# このワークフローは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 へのイメージの公開」)を使用して、両方のレジストリにプッシュする単一のワークフローを作成します。

YAML
# このワークフローは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.

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