{"meta":{"title":"Azure App Service에 Docker 배포하기","intro":"Cd(지속적인 배포) 워크플로의 일부로 Azure App Service Docker 컨테이너를 배포하는 방법을 알아봅니다.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/actions","title":"GitHub Actions"},{"href":"/ko/actions/how-tos","title":"사용법"},{"href":"/ko/actions/how-tos/deploy","title":"배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"타사 플랫폼에 배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms/docker-to-azure-app-service","title":"Docker를 Azure App Service에 배포하기"}],"documentType":"article"},"body":"# Azure App Service에 Docker 배포하기\n\nCd(지속적인 배포) 워크플로의 일부로 Azure App Service Docker 컨테이너를 배포하는 방법을 알아봅니다.\n\n## 필수 조건\n\n워크플로를 GitHub Actions 만들기 전에 먼저 다음 설정 단계를 완료해야 합니다.\n\n1. Azure App Service 요금제를 만듭니다.\n\n   예를 들어 Azure CLI를 사용하여 새 App Service 요금제를 만들 수 있습니다.\n\n   ```bash copy\n   az appservice plan create \\\n      --resource-group MY_RESOURCE_GROUP \\\n      --name MY_APP_SERVICE_PLAN \\\n      --is-linux\n   ```\n\n   위의 명령에서 `MY_RESOURCE_GROUP`을 기존 Azure 리소스 그룹으로 바꾸고 `MY_APP_SERVICE_PLAN`을 App Service 요금제의 새 이름으로 바꿉니다.\n\n   [Azure CLI](https://docs.microsoft.com/cli/azure/) 사용에 대한 자세한 내용은 Azure 설명서를 참조하세요.\n\n   * 인증은 [Azure CLI로 로그인](https://docs.microsoft.com/cli/azure/authenticate-azure-cli)을 참조하세요.\n   * 새 리소스 그룹을 만들어야 하는 경우 [az group](https://docs.microsoft.com/cli/azure/group?view=azure-cli-latest#az_group_create)을 참조하세요.\n\n2. 웹앱 만들기\n\n   예를 들어 Azure CLI 사용하여 Azure App Service 웹앱을 만들 수 있습니다.\n\n   ```shell copy\n   az webapp create \\\n       --name MY_WEBAPP_NAME \\\n       --plan MY_APP_SERVICE_PLAN \\\n       --resource-group MY_RESOURCE_GROUP \\\n       --deployment-container-image-name nginx:latest\n   ```\n\n   위의 명령에서 매개 변수를 고유한 값으로 바꿉니다. 여기서 `MY_WEBAPP_NAME`은 웹앱의 새 이름입니다.\n\n3. Azure 게시 프로필을 구성하고 `AZURE_WEBAPP_PUBLISH_PROFILE` 비밀을 만듭니다.\n\n   게시 프로필을 사용하여 Azure 배포 자격 증명을 생성합니다. 자세한 내용은 Azure 설명서의 [배포 자격 증명 생성](https://docs.microsoft.com/azure/app-service/deploy-github-actions?tabs=applevel#generate-deployment-credentials)을 참조하세요.\n\nGitHub 리포지토리에서 게시 프로필의 내용이 포함된 비밀 이름을 `AZURE_WEBAPP_PUBLISH_PROFILE` 만듭니다. 비밀을 만드는 방법의 자세한 내용은 [GitHub Actions에서 비밀 사용](/ko/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository)을(를) 참조하세요.\n\n1. 웹앱에 대한 레지스트리 자격 증명을 설정합니다.\n\npersonal access token (classic) 및 `repo` 범위를 사용하여 `read:packages`을(를) 만듭니다. 자세한 내용은 [개인용 액세스 토큰 관리](/ko/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens)을(를) 참조하세요.\n\n`DOCKER_REGISTRY_SERVER_URL`은(는) `https://ghcr.io`(으)로, `DOCKER_REGISTRY_SERVER_USERNAME`은(는) 리포지토리를 소유한 GitHub 사용자 이름 또는 조직으로, `DOCKER_REGISTRY_SERVER_PASSWORD`은(는) 위의 personal access token(으)로 설정합니다. 이렇게 하면 워크플로가 새로 빌드된 이미지를 레지스트리에 푸시한 후 컨테이너 이미지를 끌어올 수 있도록 웹앱 자격 증명이 부여됩니다. 다음 Azure CLI 명령을 사용하여 이 작업을 수행할 수 있습니다.\n\n```shell\n az webapp config appsettings set \\\n     --name MY_WEBAPP_NAME \\\n     --resource-group MY_RESOURCE_GROUP \\\n     --settings DOCKER_REGISTRY_SERVER_URL=https://ghcr.io DOCKER_REGISTRY_SERVER_USERNAME=MY_REPOSITORY_OWNER DOCKER_REGISTRY_SERVER_PASSWORD=MY_PERSONAL_ACCESS_TOKEN\n```\n\n1. 필요에 따라 배포 환경을 구성합니다. 환경은 일반적인 배포 대상(예: `production`, `staging` 또는 `development`)을 설명하는 데 사용됩니다. 워크플로가 GitHub Actions 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경을 사용하여 작업이 진행되기 전에 승인을 요구하거나, 워크플로를 트리거할 수 있는 분기를 제한하거나, 사용자 지정 배포 보호 규칙으로 배포를 제어하거나, 비밀 정보에 대한 액세스를 제한할 수 있습니다. 환경을 만드는 방법에 대한 자세한 내용은 [배포 환경 관리](/ko/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)을(를) 참조하세요.\n\n## 워크플로 만들기\n\n필수 구성 요소를 완료한 후에는 워크플로 만들기를 진행할 수 있습니다.\n\n다음 예제 워크플로에서는 `main` 분기에 푸시가 있을 때 Azure App Service Docker 컨테이너를 빌드하고 배포하는 방법을 보여 줍니다.\n\n워크플로 `AZURE_WEBAPP_NAME` 키에서 `env`을 만든 웹앱의 이름으로 설정했는지 확인합니다.\n\n배포 환경을 구성한 경우 환경의 이름으로 `environment` 값을 변경합니다. 환경을 구성하지 않은 경우 또는 워크플로가 프라이빗 리포지토리에 있고 GitHub Enterprise Cloud를 사용하지 않는 경우 `environment` 키를 삭제합니다.\n\n```yaml copy\n# 이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.\n# 작업은 타사에서 제공하며\n# 별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.\n# 참조하세요.\n\n# 커밋 SHA에 작업을 고정하는 것이 좋습니다.\n# 최신 버전을 얻으려면 SHA를 업데이트해야 합니다.\n# 태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다.\n\nname: Build and deploy a container to an Azure Web App\n\nenv:\n  AZURE_WEBAPP_NAME: MY_WEBAPP_NAME   # set this to your application's name\n\non:\n  push:\n    branches:\n      - main\n\npermissions:\n  contents: 'read'\n  packages: 'write'\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v6\n\n      - name: Set up Docker Buildx\n        uses: docker/setup-buildx-action@7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b\n\n      - name: Log in to GitHub container registry\n        uses: docker/login-action@8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d\n        with:\n          registry: ghcr.io\n          username: ${{ github.actor }}\n          password: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Lowercase the repo name\n        run: echo \"REPO=${GITHUB_REPOSITORY,,}\" >>${GITHUB_ENV}\n\n      - name: Build and push container image to registry\n        uses: docker/build-push-action@9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f\n        with:\n          push: true\n          tags: ghcr.io/${{ env.REPO }}:${{ github.sha }}\n          file: ./Dockerfile\n\n  deploy:\n    runs-on: ubuntu-latest\n\n    needs: build\n\n    environment:\n      name: 'production'\n      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}\n\n    steps:\n      - name: Lowercase the repo name\n        run: echo \"REPO=${GITHUB_REPOSITORY,,}\" >>${GITHUB_ENV}\n\n      - name: Deploy to Azure Web App\n        id: deploy-to-webapp\n        uses: azure/webapps-deploy@85270a1854658d167ab239bce43949edb336fa7c\n        with:\n          app-name: ${{ env.AZURE_WEBAPP_NAME }}\n          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}\n          images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}'\n```\n\n## 추가 참고 자료\n\n* 원본 워크플로 템플릿은 `azure-container-webapp.yml`[](https://github.com/actions/starter-workflows/blob/main/deployments/azure-container-webapp.yml) 리포지토리의 `starter-workflows`을(를) 참조하세요.\n* 웹앱을 배포하는 데 사용되는 작업은 공식 Azure [`Azure/webapps-deploy`](https://github.com/Azure/webapps-deploy) 작업입니다.\n* Azure 배포하는 GitHub 작업 워크플로에 대한 자세한 예제는 [actions-workflow-samples](https://github.com/Azure/actions-workflow-samples) 리포지토리를 참조하세요."}