Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2023-01-18. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせく� さい

Docker イメージの発行

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

注: GitHub ホステッド ランナーは、現在 GitHub Enterprise Server でサポートされていません。 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」を参照してく� さい。

注: の GitHub Actions では、GitHub.com または GitHub Marketplace に対するアクションへのアクセスが制限される� �合があります。 詳細については、「GitHub.com からのアクションへのアクセスを管理する」を参照し、GitHub Enterprise サイト管理者にお問い合わせく� さい。

Docker Hubへのイメージの公開

GitHub Enterprise Server 上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 次の例のワークフローは、release イベントが created アクティビティの種類でトリガーされたときに実行されます。 release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してく� さい。

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

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

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

  • usernamepassword: これは Docker Hub のユーザー名とパスワードです。 ワークフローファイルに公開されないように、Docker Hub のユーザ名とパスワードをシークレットとして保存することをお勧めします。 詳細については、「暗号化されたシークレットの作成と使用」を参照してく� さい。

Docker Hub に必要な metadata-action オプションは次のとおりです。

  • images: ビルドして Docker Hub にプッシュする Docker イメージの名前空間と名前。

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

  • tags: DOCKER-HUB-NAMESPACE/DOCKER-HUB-REPOSITORY:VERSION 形式の新しいイメージのタグ。 以下のとおり、単一のタグを設定することも、リストに複数のタグを指定することもできます。
  • push: true に設定した� �合は、イメージが正常にビルドされると、レジストリにプッシュされます。
YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。

# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registry:
    name: Push Docker image to Docker Hub
    runs-on: [self-hosted]
    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 }}

上記のワークフローでは、GitHub リポジトリをチェックアウトし、login-action を使用してレジストリにログインしてから、build-push-action アクションを使用して、リポジトリの Dockerfile に基づいて Docker イメージをビルドし、イメージを Docker Hub にプッシュし、タグをイメージに適用します。

GitHub Packagesへのイメージの公開

GitHub Enterprise Server 上で新しいリリースを作成するたびに、イメージを公開するワークフローを起動できます。 次の例のワークフローは、release イベントが created アクティビティの種類でトリガーされたときに実行されます。 release イベントの詳細については、「ワークフローをトリガーするイベント」を参照してく� さい。

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

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

  • registry: docker.pkg.github.com に設定する必要があります。
  • username: ${{ github.actor }} コンテキストを使用すると、ワークフロー実行をトリガーしたユーザーのユーザー名を自動的に使用できます。 詳細については、「コンテキスト」を参照してく� さい。
  • password: 自動的に生成された GITHUB_TOKEN シークレットをパスワードに使用できます。 詳細については、「GITHUB_TOKEN を使用した認証」を参照してく� さい。

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

  • push: true に設定した� �合は、イメージが正常にビルドされると、レジストリにプッシュされます。

  • 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 に設定する必要があります。 以下のとおり、単一のタグを設定することも、リストに複数のタグを指定することもできます。

YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。

# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。

name: Publish Docker image

on:
  release:
    types: [published]
jobs:
  push_to_registry:
    name: Push Docker image to GitHub Packages
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    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 }}

上記のワークフローでは、GitHub Enterprise Server リポジトリをチェックアウトし、login-action を使用してレジストリにログインしてから、build-push-action アクションを使用して、リポジトリの Dockerfile に基づいて Docker イメージをビルドし、Docker レジストリにイメージをプッシュし、コミット SHA とリリース バージョンをイメージ タグとして適用します。

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

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

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

YAML
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してく� さい。

# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。
# 新しいバージョンを取得するには、SHA を更新する必要があります。
# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。

name: Publish Docker image

on:
  release:
    types: [published]

jobs:
  push_to_registries:
    name: Push Docker image to multiple registries
    runs-on: [self-hosted]
    permissions:
      packages: write
      contents: read
    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 }}

上記のワークフローでは、GitHub Enterprise Server リポジトリをチェックアウトし、login-action を 2 回使用して両方のレジストリにログインし、metadata-action アクションでタグとラベルを生成します。 その後、build-push-action アクションによって Docker イメージがビルドされ、Docker Hub および Docker レジストリにプッシュされます。