Azure Developer CLI를 사용하여 App Service 컨테이너 배포

Azure 개발자 CLI(azd)는 Azure App Service 앱을 배포할 수 있습니다. 이 배포 모드는 앱을 컨테이너용 Linux 웹앱으로 실행합니다. 서비스가 Docker 기반 빌드 azd deploy 와 함께 사용하는 host: appservice 경우 이미지를 빌드하고, ACR(Azure Container Registry)으로 푸시하고, 새 이미지에서 기존 App Service 사이트를 가리킵니다.

azd deploy 이미지 참조만 업데이트하므로 배포하기 전에 인프라에서 사이트 컨테이너를 준비해야 합니다. 이 배포 모드에 예상되는 사항을 알면 사이트를 올바르게 설정하고 실패한 배포를 방지하는 데 도움이 됩니다.

이 문서에서는 배포 모드의 작동 방식, 인프라가 이미 구성해야 하는 항목 및 호스트와 어떻게 다른지 설명합니다 containerapp . 사용자가 azure.yaml 프로젝트, azd, 그리고 azd 프로비저닝 및 배포 명령에 익숙하다고 가정합니다.

azd가 App Service에 컨테이너를 배포하는 방법

서비스가 컨테이너 구성 azd deploy 을 사용하여 설정하는 host: appservice 경우 대상 사이트를 Web App for Containers로 처리하고 다음 작업을 수행합니다.

  • Dockerfile에서 컨테이너 이미지를 빌드합니다.
  • 인프라에서 정의하는 ACR 인스턴스에 이미지를 푸시합니다.
  • 사이트의 DOCKER|<image> 설정을 linuxFxVersion로 업데이트하여 사이트가 사용자의 이미지를 실행하도록 합니다.

azd deploy 는 기존 사이트에 대한 이미지 참조 업데이트합니다. 기본 인프라를 만들거나 구성하지 않으므로 배포하기 전에 사이트가 이미 컨테이너 준비 상태여야 합니다.

azure.yaml의 서비스 구성

App Service에 대한 컨테이너 배포는 Docker 기반 빌드와 함께 host: appservice를 사용합니다. docker을 설정하거나, Dockerfile을 가리키는 language: docker 구성을 추가합니다.

services:
  web:
    project: ./src/web
    host: appservice
    language: docker
    docker:
      path: ./Dockerfile

이 구성을 사용하면 azd./src/web/Dockerfile에서 이미지를 빌드하고, 레지스트리에 푸시한 다음, 이미지가 실행되도록 App Service 사이트를 업데이트합니다. 호스트는 appservice 서비스 수준 env: 설정을 적용하지 않으므로 인프라를 통해 앱 설정을 대신 구성합니다.

컨테이너 준비 App Service 사이트에 대한 인프라 요구 사항

azd deploy는 호스트에 대한 인프라를 appservice 프로비전하거나 수정하지 않으므로 기존 Bicep 또는 Terraform은 배포하기 전에 사이트를 Linux 컨테이너 앱으로 구성해야 합니다. 인프라는 다음 계약을 충족해야 합니다.

요구 사항 세부 정보
Linux App Service 계획 이 계획은 Linux(kind: linux 포함 reserved: true)를 실행합니다. App Service는 Windows 아니라 Linux에서만 컨테이너를 지원합니다.
컨테이너 준비 사이트 사이트의 linuxFxVersionDOCKER\| 값을 사용합니다. 자리 표시자 이미지는 괜찮습니다. azd deploy가 이를 자신이 빌드하여 푸시한 이미지로 대체하기 때문입니다.
단일 컨테이너 사이트는 하나의 컨테이너를 실행합니다. 호스트는 appservice 다중 컨테이너 또는 Docker Compose 구성을 지원하지 않습니다.
관리형 ID의 ACR 액세스 사이트는 acrUserManagedIdentityID이 있는 acrUseManagedIdentityCreds: true와 같은 사용자 할당 관리형 ID를 사용하여 ACR에 인증합니다. 호스트는 appservice 관리자 자격 증명을 지원하지 않습니다.

provision 및 up과 비교한 azd deploy

App Service에 컨테이너 배포는 인프라 및 애플리케이션 코드와 같은 두 가지 문제에 걸쳐 있으며, 이 코드는 다른 azd 명령에 매핑됩니다.

Command 용도 사용 시기
azd provision Bicep 또는 Terraform을 사용해 컨테이너 지원 App Service 사이트 및 ACR을 포함한 Azure 리소스를 생성하고 구성합니다. 인프라가 변경되거나 사이트가 아직 존재하지 않는 경우 사용합니다.
azd deploy 이미지를 빌드하고, ACR로 푸시하고, 사이트의 이미지 참조를 업데이트합니다. 인프라를 건드리지 않습니다. 애플리케이션 변경 내용을 이미 프로비전된 사이트로 배송하는 데 사용합니다.
azd up azd deploy을(를) 실행한 다음 azd provision을(를) 단일 명령으로 실행합니다. 처음 배포하거나 함께 프로비전하고 배포하려는 경우에 사용합니다.

azd deploy 이미지 참조만 업데이트하므로 컨테이너 배포는 appservice 항상 이전 azd provision 또는 azd up 만든 인프라에 따라 달라집니다.

배포 준비 유효성 검사

사이트를 azd deploy 업데이트하기 전에 대상 사이트가 컨테이너 준비인지 확인합니다. 사이트가 Linux 컨테이너 앱이 아닌 경우(예: Windows 계획을 사용하거나, 값을 누락 DOCKER|linuxFxVersion 하거나, ACR에 대한 관리 ID 액세스 권한이 없는 경우) azd deploy 누락된 구성을 식별하는 오류를 중지하고 반환합니다. 다시 배포하기 전에 인프라를 수정하고 다시 프로비저닝하세요.

Container Apps와 비교된 App Service 컨테이너

appservice 호스트와 containerapp 호스트 모두 컨테이너 이미지를 배포하지만 인프라와 구성을 다르게 관리합니다.

작동 방식 appservice 호스트 containerapp 호스트
인프라 구성 azd deploy 는 이미지 참조만 업데이트하고 사이트가 이미 컨테이너에 준비될 것으로 예상합니다. 더 많은 컨테이너 런타임을 프로비전하고 구성합니다.
환경 변수 서비스 수준 env: 설정을 적용하지 않습니다. 대신 인프라를 통해 앱 설정을 구성합니다. 컨테이너에 서비스 수준 env: 설정을 적용합니다.
다국어 지원 azd를 통해 어떤 언어로 작성된 앱이든 컨테이너화할 수 있으며, 이는 기본 제공 language: docker 지원이 없는 런타임에 유용합니다. azd를 통해 어떤 언어로 작성된 앱이든 컨테이너화할 수 있으며, 이는 기본 제공 language: docker 지원이 없는 런타임에 유용합니다.