Skip to main content

Azure App Serviceへの Docker のデプロイ

継続的デプロイ (CD) ワークフローの一部としてAzure App Serviceに Docker コンテナーをデプロイする方法について説明します。

この記事で

前提条件

GitHub Actions ワークフローを作成する前に、まず次のセットアップ手順を完了する必要があります。

  1. Azure App Service プランを作成する。

    たとえば、Azure CLIを使って新しいApp Serviceのプランを作成できます。

    Bash
    az appservice plan create \
       --resource-group MY_RESOURCE_GROUP \
       --name MY_APP_SERVICE_PLAN \
       --is-linux
    

    上記のコマンドでは、MY_RESOURCE_GROUP を既存の Azure リソース グループに、MY_APP_SERVICE_PLAN を App Service プランの新しい名前に置き換えます。

    Azure CLI の使用に関する詳細については、Azure のドキュメントを参照してください。

  2. Web アプリを作成する。

    たとえば、Azure CLIを使用して、Azure App Service Web アプリを作成できます。

    Shell
    az webapp create \
        --name MY_WEBAPP_NAME \
        --plan MY_APP_SERVICE_PLAN \
        --resource-group MY_RESOURCE_GROUP \
        --deployment-container-image-name nginx:latest
    

    上のコマンドで、パラメーターを独自の値に置き換えます。MY_WEBAPP_NAME は、その Web アプリの新しい名前です。

  3. Azure 発行プロファイルを構成し、AZURE_WEBAPP_PUBLISH_PROFILE シークレットを作成します。

    公開されたプロフィールを使って、Azureのデプロイ資格情報を生成してください。 詳細については、Azure ドキュメントのデプロイ資格情報の生成に関する記事を参照してください。

GitHub リポジトリで、発行プロファイルの内容を含む AZURE_WEBAPP_PUBLISH_PROFILE という名前のシークレットを作成します。 シークレットの作成の詳細については、「GitHub Actions でのシークレットの使用」を参照してください。

  1. Web アプリのレジストリ資格情報を設定します。

personal access token (classic)スコープとrepoスコープを持つread:packagesを作成します。 詳しくは、「個人用アクセス トークンを管理する」をご覧ください。

DOCKER_REGISTRY_SERVER_URLhttps://ghcr.io に、DOCKER_REGISTRY_SERVER_USERNAME をリポジトリを所有する GitHub のユーザー名または組織名に、DOCKER_REGISTRY_SERVER_PASSWORD を上記の personal access token に設定します。 これにより、Web アプリに資格情報が与えられるため、新しくビルドされたイメージがレジストリにワークフローによってプッシュされた後、コンテナー イメージをプルできるようになります。 これを行うには、次の Azure CLI コマンドを使用します。

 az webapp config appsettings set \
     --name MY_WEBAPP_NAME \
     --resource-group MY_RESOURCE_GROUP \
     --settings DOCKER_REGISTRY_SERVER_URL=https://ghcr.io DOCKER_REGISTRY_SERVER_USERNAME=MY_REPOSITORY_OWNER DOCKER_REGISTRY_SERVER_PASSWORD=MY_PERSONAL_ACCESS_TOKEN
  1. 任意で、デプロイ環境を構成します。 環境は、一般的なデプロイ ターゲットを記述するために使用されます (例: productionstaging、または development)。 GitHub Actions ワークフローが環境にデプロイされると、その環境がリポジトリのメイン ページに表示されます。 環境を使って、ジョブを進めるために承認を必要とすること、ワークフローをトリガーできるブランチを制限すること、カスタム デプロイ保護規則でデプロイを制限すること、またはシークレットへのアクセスを制限することができます。 環境の作成の詳細については、「デプロイメント用の環境管理」を参照してください。

ワークフローの作成

必要な環境を整えたら、ワークフローの作成に進むことができます。

次のワークフロー例は、main ブランチへのプッシュがある場合にAzure App Serviceする Docker コンテナーをビルドしてデプロイする方法を示しています。

ワークフロー AZURE_WEBAPP_NAME キーの env は、必ず作成した Web アプリの名前に設定してください。

デプロイ環境を構成した場合は、environment の値を環境の名前に変更します。 環境を構成しなかった場合 を使わない場合は、environment キーを削除します。

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

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

name: Build and deploy a container to an Azure Web App

env:
  AZURE_WEBAPP_NAME: MY_WEBAPP_NAME   # set this to your application's name

on:
  push:
    branches:
      - main

permissions:
  contents: 'read'
  packages: 'write'

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v6

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b

      - name: Log in to GitHub container registry
        uses: docker/login-action@8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Lowercase the repo name
        run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}

      - name: Build and push container image to registry
        uses: docker/build-push-action@9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f
        with:
          push: true
          tags: ghcr.io/${{ env.REPO }}:${{ github.sha }}
          file: ./Dockerfile

  deploy:
    runs-on: ubuntu-latest

    needs: build

    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Lowercase the repo name
        run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV}

      - name: Deploy to Azure Web App
        id: deploy-to-webapp
        uses: azure/webapps-deploy@85270a1854658d167ab239bce43949edb336fa7c
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'

参考資料

  • 元のワークフロー テンプレートについては、azure-container-webapp.yml リポジトリのstarter-workflowsを参照してください。
  • Web アプリのデプロイに使用されるアクションは、公式の Azure Azure/webapps-deploy アクションです。
  • AzureにデプロイGitHubアクション ワークフローのその他の例については、actions-workflow-samples リポジトリを参照してください。