Docker를 Azure App Service에 배포하기
Docker를 Azure App Service에 배포하기
지속적 배포(CD) 워크플로의 일부로 Docker 컨테이너를 Azure App Service에 배포하는 방법을 알아봐요. 컨테이너 이미지를 빌드해 레지스트리에 푸시하고, Azure 웹 앱에 배포하는 전체 과정을 살펴봐요.
출처: 문서
본문
사전 요구 사항
GitHub Actions 워크플로를 만들기 전에 먼저 다음 설정 단계를 완료해야 해요.
-
Azure App Service 플랜을 만들어요.
예를 들어 Azure CLI를 사용해 새 App Service 플랜을 만들 수 있어요:
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 문서를 확인하세요:
- 인증에 대해서는 Azure CLI로 로그인하기를 참고하세요.
- 새 리소스 그룹을 만들어야 한다면 az group을 참고하세요.
-
웹 앱을 만들어요.
예를 들어 Azure CLI를 사용해 Azure App Service 웹 앱을 만들 수 있어요:
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은 웹 앱의 새 이름이에요. -
Azure 게시 프로필을 구성하고
AZURE_WEBAPP_PUBLISH_PROFILE시크릿을 만들어요.게시 프로필을 사용해 Azure 배포 자격 증명을 생성해요. 자세한 내용은 Azure 문서의 배포 자격 증명 생성하기를 참고하세요.
GitHub 저장소에 게시 프로필의 내용을 담은
AZURE_WEBAPP_PUBLISH_PROFILE이라는 시크릿을 만들어요. 시크릿을 만드는 방법에 대한 자세한 내용은 GitHub Actions에서 시크릿 사용하기를 참고하세요. -
웹 앱의 레지스트리 자격 증명을 설정해요.
repo와read:packages스코프를 가진 개인 액세스 토큰(classic)을 만들어요. 자세한 내용은 개인 액세스 토큰 관리하기를 참고하세요.DOCKER_REGISTRY_SERVER_URL을https://ghcr.io로,DOCKER_REGISTRY_SERVER_USERNAME을 저장소를 소유한 GitHub 사용자 이름이나 조직으로,DOCKER_REGISTRY_SERVER_PASSWORD를 위에서 만든 개인 액세스 토큰으로 설정해요. 이렇게 하면 워크플로가 새로 빌드한 이미지를 레지스트리에 푸시한 후 웹 앱이 컨테이너 이미지를 가져올 수 있는 자격 증명이 생겨요. 다음 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 -
선택적으로, 배포 환경을 구성해요. 환경은
production,staging,development같은 일반적인 배포 대상을 설명하는 데 사용돼요. GitHub Actions 워크플로가 환경으로 배포하면 환경이 저장소 메인 페이지에 표시돼요. 환경을 사용해 작업 진행에 승인을 요구하거나, 어떤 브랜치가 워크플로를 트리거할 수 있는지 제한하거나, 커스텀 배포 보호 규칙으로 배포를 게이팅하거나, 시크릿 접근을 제한할 수 있어요. 환경을 만드는 방법에 대한 자세한 내용은 배포용 환경 관리하기를 참고하세요.
워크플로 만들기
사전 요구 사항을 완료했다면 워크플로를 만들 수 있어요.
다음 예제 워크플로는 main 브랜치로 푸시가 있을 때 Docker 컨테이너를 빌드해 Azure App Service에 배포하는 방법을 보여줘요.
워크플로 env 키에서 AZURE_WEBAPP_NAME을 만든 웹 앱 이름으로 설정해야 해요.
배포 환경을 구성했다면 environment 값을 환경 이름으로 변경해요. 환경을 구성하지 않았거나 워크플로가 비공개 저장소에 있고 GitHub Enterprise Cloud를 사용하지 않는다면 environment 키를 삭제해요.
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.
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 }}'
더 알아보기 (Learn more)
- 원본 워크플로 템플릿은 GitHub Actions
starter-workflows저장소의azure-container-webapp.yml을 참고하세요. - 웹 앱을 배포하는 데 사용된 액션은 공식 Azure
Azure/webapps-deploy액션이에요. - Azure로 배포하는 GitHub Action 워크플로의 더 많은 예시는 actions-workflow-samples 저장소를 참고하세요.