Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.
GitHub AE는 현재 제한된 릴리스에 있습니다.

Azure App Service에 Docker 배포

CD(지속적인 배포) 워크플로의 일부로 Docker 컨테이너를 Azure App Service에 배포할 수 있습니다.

소개

이 가이드에서는 GitHub Actions를 사용하여 Docker 컨테이너를 빌드하고 Azure App Service에 배포하는 방법을 설명합니다.

필수 조건

GitHub Actions 워크플로를 만들기 전에 먼저 다음 설정 단계를 완료해야 합니다.

  1. Azure App Service 요금제를 만듭니다.

    예를 들어 Azure CLI를 사용하여 새 App Service 요금제를 만들 수 있습니다.

    Shell
    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. 웹앱 만들기

    예를 들어 Azure CLI를 사용하여 Azure AppService 웹앱을 만들 수 있습니다.

    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은 웹앱의 새 이름입니다.

  3. Azure 게시 프로필을 구성하고 AZURE_WEBAPP_PUBLISH_PROFILE 비밀을 만듭니다.

    게시 프로필을 사용하여 Azure 배포 자격 증명을 생성합니다. 자세한 내용은 Azure 설명서의 “배포 자격 증명 생성”을 참조하세요.

    GitHub 리포지토리에서 게시 프로필의 콘텐츠가 포함된 AZURE_WEBAPP_PUBLISH_PROFILE이라는 비밀을 만듭니다. 비밀을 만드는 방법에 대한 자세한 내용은 “암호화된 암호”를 참조하세요.

  4. 웹앱에 대한 레지스트리 자격 증명을 설정합니다.

    read:packages 범위를 사용하여 personal access token을(를repo) 만듭니다. 자세한 내용은 "personal access token 만들기"를 참조하세요.

    https://ghcr.ioDOCKER_REGISTRY_SERVER_USERNAME 설정하고, 리포지토리를 소유한 GitHub 사용자 이름 또는 조직으로DOCKER_REGISTRY_SERVER_PASSWORD, 위에서 personal access token로 설정합니다DOCKER_REGISTRY_SERVER_URL. 이렇게 하면 워크플로가 새로 빌드된 이미지를 레지스트리에 푸시한 후 컨테이너 이미지를 끌어올 수 있도록 웹앱 자격 증명이 부여됩니다. 다음 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
  5. 필요에 따라 배포 환경을 구성합니다. 환경은 일반적인 배포 대상(예: production, staging 또는 development)을 설명하는 데 사용됩니다. GitHub Actions 워크플로가 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경을 사용하여 작업을 진행하기 위한 승인을 요구하거나, 워크플로를 트리거할 수 있는 분기를 제한하거나, 비밀에 대한 액세스를 제한할 수 있습니다. 환경 만들기에 대한 자세한 내용은 “배포에 환경 사용”을 참조하세요.

워크플로 만들기

필수 구성 요소를 완료한 후에는 워크플로 만들기를 진행할 수 있습니다.

다음 예제 워크플로는 main 분기에 푸시가 있을 때 Docker 컨테이너를 빌드하고 Azure App Service에 배포하는 방법을 보여 줍니다.

워크플로 env 키에서 AZURE_WEBAPP_NAME을 만든 웹앱의 이름으로 설정했는지 확인합니다.

배포 환경을 구성한 경우 환경의 이름으로 environment 값을 변경합니다. 환경을 구성하지 않은 경우 environment 키를 삭제합니다.

YAML
# 이 워크플로는 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@v2

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

      - name: Log in to GitHub container registry
        uses: docker/login-action@v1.10.0
        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@v2
        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@0b651ed7546ecfc75024011f76944cb9b381ef1e
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'

추가 리소스

다음 리소스도 유용할 수 있습니다.

  • 원래의 시작 워크플로는 GitHub Actions starter-workflows 리포지토리의 azure-container-webapp.yml을 참조하세요.
  • 웹앱을 배포하는 데 사용되는 작업은 공식 Azure Azure/webapps-deploy 작업입니다.
  • Azure에 배포하는 GitHub Actions 워크플로에 대한 자세한 예제는 actions-workflow-samples 리포지토리를 참조하세요.