Azure 개발자 CLI(azd)는 여러 Azure 호스팅 서비스에서 컨테이너 이미지를 빌드, 게시 및 배포할 수 있습니다. 컨테이너 워크플로는 호스팅 대상을 빌드 위치 및 게시 접근 방식과 결합합니다. 최상의 조합은 애플리케이션, 팀에서 사용할 수 있는 도구 및 환경 간에 이미지를 승격하는 방법에 따라 달라집니다.
이 문서를 사용하여 이러한 선택 사항을 요구 사항에 맞게 일치시킬 수 있습니다. 다음 결정을 비교합니다.
- 컨테이너를 호스팅하는 Azure 서비스는 무엇인가요?
- 이미지를 로컬로 빌드하든
azd, ACR(Azure Container Registry)에서 원격으로 빌드하든, 기존 이미지를 사용하는지 여부입니다. -
azd가 이미지를 함께 게시 및 배포할지, 아니면 별도 단계로 게시 및 배포할지 여부.
이 문서에서는 이러한 범용 호스팅 서비스를 비교합니다.
호스팅 대상 및 이미지 빌드 옵션을 비교하여 시작합니다. 이러한 선택 사항을 이해한 후에는 컨테이너 배포 워크플로 비교 섹션에서 후보 워크플로를 식별하는 데 사용합니다.
컨테이너 호스팅 대상 비교
이 azure.yaml 속성은 host 컨테이너를 배포하는 azd Azure 서비스를 식별합니다. 이미지 빌드 위치에서 독립적으로 호스트를 선택합니다.
| 호스트 값 | Azure 호스팅 대상 | 컨테이너 워크플로 | Considerations |
|---|---|---|---|
containerapp |
Azure Container Apps 및 Container Apps 작업 | 프로젝트 및 Dockerfile에서 빌드하거나 미리 빌드된 이미지를 배포합니다. | 서비스 수준 환경 변수 및 Container Apps 관련 배포 전략을 지원합니다. Container Apps 작업에 동일한 호스트 값을 사용합니다. |
appservice |
Azure App Service 컨테이너용 Linux Web App | 프로젝트 및 Dockerfile에서 빌드하거나 미리 빌드된 이미지를 배포합니다. | 인프라는 Linux 컨테이너 지원 사이트를 프로비전하고 ACR에 대한 관리 ID 액세스를 구성해야 합니다.
azd deploy 는 이미지 참조만 업데이트합니다. |
aks |
Azure Kubernetes Service | 이미지를 빌드하고 Kubernetes 매니페스트, Helm 차트 또는 Kustomize 구성을 배포합니다. | 가장 많은 제어를 제공하지만 클러스터 및 Kubernetes 구성을 관리해야 합니다.
azd와 함께 Helm 또는 Kustomize를 사용하려면 알파 기능 플래그를 활성화해야 합니다. |
또한 호스트는 ai.endpointazure.ai.agent 특수 Microsoft Foundry 시나리오에 대한 Docker 구성을 지원합니다. 이러한 워크로드의 경우 Microsoft Foundry 온라인 엔드포인트 및 Microsoft Foundry 에이전트 확장에 배포를 참조하세요.
이미지 빌드 옵션 비교
서비스 정의는 이미지를 빌드할지 아니면 azd 기존 이미지로 시작하는지를 결정합니다.
| 빌드 옵션 | 필요한 구성 | 빌드가 실행되는 위치 | 로컬 컨테이너 엔진 | 가장 적합한 용도 |
|---|---|---|---|---|
| 로컬 빌드 |
project 및 필요에 따라 docker |
개발 환경 또는 CI 러너 | 필수 | Docker 또는 Podman을 이미 제공하는 빠른 개발 반복 및 빌드 환경 |
| ACR 원격 빌드 |
project 및 docker.remoteBuild: true |
Azure Container Registry (애저 컨테이너 레지스트리) | 원격 빌드 실패 후 다시 실패하지 않는 한 azd 필요하지 않습니다. |
로컬 컨테이너 엔진이 없는 일관된 클라우드 빌드 및 환경. 문서화된 원격 빌드 워크플로는 Azure Container Apps 대상으로 합니다. |
azd에서 관리하는 기존 이미지 |
image |
원본 빌드 없음 | 이미지 수명 주기 작업에 필요할 수 있습니다. | 로컬 또는 레지스트리에 이미 존재하며 azd가 가져오고, 태그를 지정하고, 푸시할 수 있는 이미지입니다. |
| 원격 이미지 통과 |
image 및 docker.imagePassthrough: true |
빌드 없음 | 필요하지 않음 | 호스팅 리소스에서 as-is사용해야 하는 정규화된 원격 이미지입니다. |
옵션별 구성 문서를 읽을 때는 다음과 같은 개념적 차이점을 염두에 두어야 합니다.
-
미리 빌드된 이미지는
image대신project속성을 사용하며,azd는 여전히 이를 가져오고, 태그를 지정하고, 푸시할 수 있습니다. - ACR 원격 빌드는 원격 빌드가 실패하고 지원되는 컨테이너 엔진을 사용할 수 있는 경우 로컬 Docker 또는 Podman 빌드로 대체됩니다.
-
이미지 패스스루에는 레지스트리를 포함한 정규화된 원격 이미지 참조가 필요하며,
remoteBuild와 함께 사용할 수 없고,azd publish --from-package가 이미지를 관리하지 않으므로azd publish --to또는azd옵션을 지원하지 않습니다.
각 옵션의 전체 구성은 Azure Container Registry 사용한 원격 빌드 지원, 타사 컨테이너 레지스트리 사용, Azure Developer CLI를 사용한 App Service 컨테이너 배포 및 스키마를docker 참조하세요.
컨테이너 배포 워크플로 비교
컨테이너 호스팅 대상 비교의 호스팅 대상과 이미지 빌드 비교 옵션의 빌드 옵션을 비교한 후 다음 표를 사용하여 요구 사항에 가장 적합한 워크플로를 식별합니다.
| 필요한 경우 | 시작하기 | 이유 |
|---|---|---|
| 서버리스 플랫폼에 컨테이너화된 애플리케이션 배포 | 로컬 빌드를 사용하는 Azure Container Apps | 이 워크플로는 Dockerfile 기반 프로젝트를 하나의 개발 워크플로에 빌드하고 배포합니다. |
| Docker 또는 Podman을 로컬로 설치하지 않고 빌드 | ACR 원격 빌드를 사용하는 Azure Container Apps | ACR은 Azure 프로젝트 및 Dockerfile에서 이미지를 빌드합니다. |
| 다른 빌드 시스템에서 생성하는 이미지 배포 | 사전 빌드된 이미지가 있는 Azure Container Apps 또는 App Service | 이 속성은 image 빌드할 소스 코드 대신 기존 이미지를 식별합니다. |
| 원격 이미지를 끌어서, 태그 지정 또는 푸시하지 않고 다시 사용 | 이미지 패스스루를 사용하는 Azure Container Apps |
azd 는 정규화된 이미지 참조를 호스팅 리소스에 직접 전달합니다. |
| 기존 웹 애플리케이션을 Linux 컨테이너로 호스트 | Azure App Service의 컨테이너용 웹 앱 | App Service는 통합 웹 호스팅 플랫폼을 제공하고 인프라는 컨테이너 준비 사이트 구성을 제어합니다. |
| Kubernetes 매니페스트 및 클러스터 구성 제어 | AKS(Azure Kubernetes Service) |
azd 에서는 이미지를 빌드하고 게시한 다음 Kubernetes 매니페스트, Helm 차트 또는 Kustomize 구성을 배포할 수 있습니다. |
| 한 번 빌드하고 동일한 이미지를 여러 환경에 걸쳐 승격하세요 |
azd publish, 그 다음 azd deploy --from-package |
게시 및 배포는 별개이므로 각 환경은 동일한 이미지를 받습니다. |
각 행은 컨테이너 호스팅 대상 비교 의 호스팅 선택 항목과 이미지 빌드 비교 옵션 의 빌드 선택 항목을 시작점으로 결합합니다. 선택 azure.yaml항목을 구성하고 Bicep 또는 Terraform 파일이 해당 호스팅 및 레지스트리 리소스를 프로비전하도록 합니다.
최소 서비스 정의는 host빌드 원본 및 Dockerfile을 설정합니다.
services:
api:
project: ./src/api
language: docker
host: containerapp
docker:
path: ./Dockerfile
이 정의를 다른 호스트에 맞게 조정하려면 값을 변경 host 하고 호스트별 구성 계약을 따릅니다.
- Azure 개발자 CLI를 사용하여 Azure Container Apps에 배포
- Azure Developer CLI를 사용하여 App Service 컨테이너 배포
- Helm 및 Kustomize 지원
게시 및 배포 명령 비교
호스트 및 빌드 옵션을 선택한 후 이미지 게시 및 배포를 결합할지 또는 구분할지를 선택합니다.
| Command | 이미지 작업 | Azure 리소스 작업 | 사용 시기 |
|---|---|---|---|
azd up |
빌드 및 푸시하기 | 프로비저닝 및 배포 | 전체 환경을 만들거나 업데이트하고 애플리케이션을 하나의 워크플로에 배포하려고 합니다. |
azd deploy |
빌드 및 푸시 | 배포 | 인프라가 이미 있으며 애플리케이션 변경 내용을 배포하려고 합니다. |
azd publish |
빌드 및 푸시 | 없음 | 레지스트리 아티팩트를 배포하지 않고 만들려고 합니다.
azd publish 는 Container Apps 및 AKS 서비스를 지원합니다. |
azd publish --from-package <image> |
기존 로컬 이미지 푸시 | 없음 | 다른 프로세스가 이미지를 빌드했으며, 이를 azd가 배포하기를 원합니다. |
azd deploy --from-package <image> |
없음 | 배포 | 특정 이미지를 다시 빌드하지 않고 배포하려고 합니다. |
예를 들어 버전이 지정된 이미지를 게시하고 동일한 이미지를 다른 환경에 배포합니다.
azd publish api --to myregistry.azurecr.io/my-api:v1.0.0
azd env select production
azd deploy api --from-package myregistry.azurecr.io/my-api:v1.0.0
이 워크플로는 각 환경에 대한 이미지를 다시 빌드할 때 발생할 수 있는 차이를 방지합니다. 전체 승격 워크플로는 Azure Developer CLI 게시 워크플로를 참조하세요.