이 문서에서는 기본 프로그래밍 언어로 컴퓨터의 소스 코드에서 Azure Container Apps에 애플리케이션을 빌드하고 배포하는 방법을 보여 줍니다.
이 자습서에서 수행하는 작업은 다음과 같습니다.
- 간단한 웹 애플리케이션을 만듭니다.
- 앱에 연결된 Dockerfile을 만듭니다.
- 컴파일된 코드에서 이미지를 만들고 컨테이너 레지스트리에 푸시합니다.
- 관리 ID를 사용하여 컨테이너 레지스트리에 안전하게 액세스합니다.
- Azure Container Apps에 컨테이너를 배포합니다.
- 브라우저에서 앱을 보고 배포를 확인합니다.
필수 조건
이 프로젝트를 완료하려면 다음 항목이 필요합니다.
| 요건 | 지침 |
|---|---|
| Azure 계정 | 계정이 없으면 무료 계정을 만듭니다. 계속 진행하려면 Azure 구독에 대한 기여자 또는 소유자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요. |
| Azure CLI | Azure CLI를 설치하거나 최신 버전으로 업그레이드합니다. Azure 개발자 CLI(azd 명령)는 Azure CLI를 통해 사용할 수 있습니다. |
선택한 언어에 따라 적절한 런타임, SDK 및 기타 종속성을 설치해야 할 수도 있습니다.
.NET SDK를 설치합니다.
로컬 애플리케이션 만들기
다음 단계에서는 Azure Container Apps에 배포할 샘플 애플리케이션을 빌드하는 데 필요한 코드 및 종속성을 보여줍니다.
참고 항목
나열된 언어가 아닌 다른 언어를 사용하려면 원하는 AI 모델에 다음 프롬프트를 입력합니다.
프롬프트를 제출하기 전에 원하는 언어로 바꿉 <LANGUAGE> 니다.
Generate the simplest possible "hello world" web server in idiomatic <LANGUAGE>.
Make sure to include any dependencies required for the application to run locally and in production.
소스 코드를 만들고 실행합니다.
새 C# 프로젝트를 만듭니다.
dotnet new webapp --name MyAcaDemo --language C#MyAcaDemo 폴더로 변경합니다.
cd MyAcaDemo코드 편집기에서 열고
Program.cs내용을 다음 코드로 바꿉니다.public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); webBuilder.UseUrls("http://*:8080"); }); }이 코드를 사용하여 클래스를
Program구현하면 웹 애플리케이션의 기반이 됩니다. 다음으로, 웹 페이지를 응답으로 반환하는 클래스를 만듭니다.동일한 폴더에 이름이 지정된
Startup.cs새 파일을 만들고 다음 코드를 입력합니다.public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapGet("/", async context => { await context.Response.WriteAsync("Hello World!"); }); }); } }이제 웹 애플리케이션에 대한 요청이 이루어지면 "헬로 월드!" 텍스트가 반환됩니다. 로컬 컴퓨터에서 코드가 올바르게 실행되고 있는지 확인하려면 릴리스 구성에서 프로젝트를 빌드합니다.
dotnet build -c Release다음으로, 애플리케이션을 실행하여 코드가 올바르게 구현되었는지 확인합니다.
dotnet run --configuration Release애플리케이션이 예상대로 작동하는지 확인하면 로컬 서버를 중지하고 Dockerfile 만들기로 이동하여 컨테이너 앱에 앱을 배포할 수 있습니다.
MyAcaDemo 폴더에서 이름이 지정된
Dockerfile파일을 만들고 다음 내용을 추가합니다.FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY . . RUN dotnet publish -c Release -o /app/publish FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS final WORKDIR /app COPY --from=build /app/publish . EXPOSE 8080 ENTRYPOINT ["dotnet", "MyAcaDemo.dll"]이제 코드와 Dockerfile을 준비했으므로 Azure Container Apps에 앱을 배포할 수 있습니다.
Azure 리소스 만들기
다음 명령을 사용하여 CLI에서 Azure에 로그인합니다. 인증 프로세스를 완료하려면 모든 프롬프트를 따라야 합니다.
az loginAzure CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.
az extension add --name containerapp --upgrade참고 항목
명령을 실행할
az containerapp때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.이제 Azure CLI 설정이 완료되었으므로 환경 변수 집합을 정의할 수 있습니다.
다음 명령을 실행하기 전에 제공된 값을 검토합니다.
위치는 미국 중부로 구성되지만 원하는 경우 가장 가까운 위치로 변경할 수 있습니다.
LOCATION="CentralUS" RESOURCE_GROUP="my-demo-group" IDENTITY_NAME="my-demo-identity" ENVIRONMENT="my-demo-environment" REGISTRY_NAME="mydemoregistry$(openssl rand -hex 4)" CONTAINER_APP_NAME="my-demo-app"이
mydemoregistry$(openssl rand -hex 4)명령은 컨테이너 레지스트리 이름으로 사용할 임의의 문자열을 생성합니다. 레지스트리 이름은 전역적으로 고유해야 하므로 이 문자열을 사용하면 명령이 성공적으로 실행되도록 할 수 있습니다.컨테이너 앱 배포와 관련된 서비스를 구성하는 리소스 그룹을 만듭니다.
az group create \ --name $RESOURCE_GROUP \ --location $LOCATION \ --output none사용자 할당 관리 ID를 만들고 다음 명령을 사용하여 ID를 가져옵니다.
먼저 관리 ID를 만듭니다.
az identity create \ --name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --output none이제 나중에 사용할 수 있게 ID 식별자를 변수로 설정합니다.
IDENTITY_ID=$(az identity show \ --name $IDENTITY_NAME \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)다음 명령을 사용하여 앱을 호스트하는 Container Apps 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --mi-user-assigned $IDENTITY_ID \ --output none리소스 그룹에 ACR(Azure Container Registry) 인스턴스를 만듭니다. 레지스트리는 컨테이너 이미지를 저장합니다.
az acr create \ --resource-group $RESOURCE_GROUP \ --name $REGISTRY_NAME \ --sku Basic \ --output none다음 명령을 사용하여 컨테이너 레지스트리 인스턴스에 사용자 할당 관리 ID를 할당합니다.
az acr identity assign \ --identities $IDENTITY_ID \ --name $REGISTRY_NAME \ --resource-group $RESOURCE_GROUP \ --output none
레지스트리에 이미지 빌드 및 푸시
다음 명령을 사용하여 컨테이너 이미지를 빌드하고 컨테이너 레지스트리 인스턴스에 푸시합니다.
az acr build \
-t $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
-r $REGISTRY_NAME .
이 명령은 컨테이너 이미지에 태그 helloworld 를 적용합니다.
컨테이너 앱 만들기
다음 명령을 사용하여 컨테이너 앱을 만듭니다.
az containerapp create \
--name $CONTAINER_APP_NAME \
--resource-group $RESOURCE_GROUP \
--environment $ENVIRONMENT \
--image $REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" \
--target-port 8080 \
--ingress external \
--user-assigned $IDENTITY_ID \
--registry-identity $IDENTITY_ID \
--registry-server $REGISTRY_NAME.azurecr.io \
--query properties.configuration.ingress.fqdn
이 명령은 사용자가 할당한 관리 ID에 역할을 추가 acrPull 하므로 컨테이너 레지스트리에서 이미지를 끌어올 수 있습니다.
다음 표에서는 이 명령에서 사용하는 매개 변수에 대해 설명합니다.
| 매개 변수 | 값 | 설명 |
|---|---|---|
name |
$CONTAINER_APP_NAME |
컨테이너 앱의 이름입니다. |
resource-group |
$RESOURCE_GROUP |
컨테이너 앱이 배포되는 리소스 그룹입니다. |
environment |
$ENVIRONMENT |
컨테이너 앱이 실행되는 환경입니다. |
image |
$REGISTRY_NAME".azurecr.io/"$CONTAINER_APP_NAME":helloworld" |
레지스트리 이름 및 태그를 포함하여 배포할 컨테이너 이미지입니다. |
target-port |
8080 |
앱이 요청을 수신 대기하는 포트와 일치합니다. |
ingress |
external |
공용 인터넷에서 컨테이너 앱에 액세스할 수 있도록 합니다. |
user-assigned |
$IDENTITY_ID |
컨테이너 앱에 대한 사용자 할당 관리 ID입니다. |
registry-identity |
registry-identity |
컨테이너 레지스트리에 액세스하는 데 사용되는 ID입니다. |
registry-server |
$REGISTRY_NAME.azurecr.io |
컨테이너 레지스트리의 서버 주소입니다. |
query |
properties.configuration.ingress.fqdn |
출력을 앱의 FQDN(정규화된 도메인 이름)으로 필터링합니다. |
이 명령이 완료되면 새 웹앱에 대한 URL을 반환합니다.
배포 확인
앱의 URL을 웹 브라우저에 복사합니다. 컨테이너 앱이 시작되면 헬로 월드!을 반환합니다.
애플리케이션에 처음 액세스하는 경우이므로 앱이 응답을 반환하는 데 몇 분 정도 걸릴 수 있습니다.
리소스 정리
이 자습서에서 만든 Azure 리소스를 사용하지 않을 경우 단일 명령으로 제거할 수 있습니다. 명령을 실행하기 전에 코드를 변경하고 Azure에서 앱을 업데이트하는 방법을 보여 주는 이 자습서 시리즈의 다음 단계가 있습니다.
완료하고 이 자습서에서 만든 모든 Azure 리소스를 제거하려면 다음 명령을 사용하여 리소스 그룹을 삭제합니다.
az group delete --name aca-demo
팁
문제가 있나요? Azure Container Apps 리포지토리에서 문제를 열어 GitHub에 알려주세요.
다음 단계
다음으로, 만든 컨테이너 앱을 업데이트하는 방법을 계속 알아봅니다.