Azure Fundamentals · 강의

Azure Container Instances

서버를 관리하지 않고 ACI를 사용해 컨테이너화된 애플리케이션을 몇 초 만에 실행하고, 환경 변수와 볼륨 탑재를 구성하며, ACI 요금 청구 방식을 이해합니다.

레슨 2/413개 단계

Azure Container Instances은(는) CoddyKit의 무료 Azure Fundamentals 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Azure Fundamentals 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

Azure Container Instances란?

Azure Container Instances (ACI)는 서버나 오케스트레이터를 관리하지 않고 Azure에서 컨테이너화된 workload를 실행하는 가장 빠른 방법입니다. 컨테이너 이미지를 제공하면 Azure가 공유 멀티 테넌트 인프라에서 몇 초 만에 실행합니다. ACI는 짧게 실행되는 작업, batch 작업, 빌드 에이전트, 이벤트 기반 workload에 적합합니다. 이러한 경우 전체 Kubernetes 클러스터를 시작하고 관리하는 것은 불필요한 오버헤드가 될 수 있습니다.

Container Instance 생성

단일 az container create 명령으로 ACI 컨테이너를 시작할 수 있습니다. 이미지, Resource 그룹, CPU, 메모리를 지정하면 됩니다. ACI는 이미지를 가져오고, Resource를 할당하고, 일반적으로 5~10초 이내에 컨테이너를 시작합니다. DNS 이름 레이블을 할당하면 각 컨테이너 인스턴스에 고유한 정규화된 도메인 이름(FQDN)이 부여되므로 인터넷에서 즉시 액세스할 수 있습니다.

# Run an Nginx container accessible from the internet
az container create \
  --name my-nginx \
  --resource-group MyRG \
  --image nginx:latest \
  --cpu 1 \
  --memory 1 \
  --dns-name-label my-nginx-demo \
  --ports 80

# Access at: http://my-nginx-demo.<region>.azurecontainer.io

환경 변수 및 보안 값

생성 시 지정하는 환경 변수를 사용하여 ACI 컨테이너에 구성을 전달할 수 있습니다. API 키나 암호와 같은 민감한 값에는 보안 환경 변수를 사용하세요. 이러한 값은 배포 후 Azure 포털이나 CLI 출력에 표시되지 않으므로 logging 또는 감사 추적에 실수로 노출되는 것을 방지할 수 있습니다. 보안 값은 런타임에 일반 환경 변수로 컨테이너 내부에서 계속 액세스할 수 있습니다.

# Pass regular and secure environment variables
az container create \
  --name my-app \
  --resource-group MyRG \
  --image mycontainerregistry.azurecr.io/myapp:v1.0 \
  --environment-variables APP_ENV=production \
  --secure-environment-variables \
    DATABASE_PASSWORD='super-secret-password' \
    API_KEY='my-api-key'

# View logs from the running container
az container logs --name my-app --resource-group MyRG

ACI 청구 및 Resource 할당

ACI는 할당한 CPU 코어와 메모리 GB를 기준으로 초 단위로 요금이 청구되며, 최소 청구 기간은 없습니다. 컨테이너가 실행되는 동안에만 비용을 지불하고, 컨테이너가 중지되는 즉시 청구도 중지됩니다. 따라서 ACI는 짧게 실행되는 workload에 매우 비용 효율적입니다. 지원되는 조합에 따라 각 컨테이너 그룹에 0.1~4개의 CPU 코어와 0.1~16GB의 메모리를 할당할 수 있습니다.

# Small: 0.5 CPU, 0.5 GB memory
az container create --name small-task --resource-group MyRG \
  --image my-batch-image:latest --cpu 0.5 --memory 0.5 \
  --restart-policy Never  # Don't restart after completion

# Large: 4 CPU, 16 GB memory for intensive tasks
az container create --name ml-inference --resource-group MyRG \
  --image ml-model:latest --cpu 4 --memory 16

재시작 정책

ACI는 컨테이너가 종료된 후의 동작을 제어하는 세 가지 재시작 정책을 지원합니다. Always(기본값)는 컨테이너가 종료될 때마다 다시 시작하므로 장시간 실행되는 서비스에 적합합니다. Never는 컨테이너를 한 번만 실행하고 종료된 상태로 두므로 batch 작업에 적합합니다. OnFailure는 컨테이너가 0이 아닌 종료 코드로 종료된 경우에만 다시 시작하므로 오류 발생 시 재시도 패턴에 유용합니다.

# Batch job: run once, never restart
az container create \
  --name data-processor \
  --resource-group MyRG \
  --image my-batch-image:latest \
  --restart-policy Never \
  --environment-variables BATCH_DATE=2025-01-01

# Check the container's final state
az container show \
  --name data-processor \
  --resource-group MyRG \
  --query '{state:instanceView.state, exitCode:instanceView.currentState.exitCode}'

Container 그룹: 다중 컨테이너 배포

컨테이너 그룹은 Kubernetes Pod와 유사하게 lifetime, Network, 스토리지를 공유하는 컨테이너 모음입니다. 같은 그룹의 컨테이너는 로컬 IP 주소와 포트 네임스페이스를 공유하므로 localhost를 통해 통신할 수 있습니다. 일반적인 구성은 YAML 또는 ARM template으로 정의한 동일한 그룹 안에 주 애플리케이션 컨테이너와 sidecar 컨테이너(예: logging 에이전트 또는 프록시)를 함께 배치하는 것입니다.

# multi-container.yaml
apiVersion: '2021-09-01'
location: eastus
name: my-container-group
properties:
  containers:
  - name: app
    properties:
      image: myapp:v1.0
      ports: [{port: 80}]
      resources: {requests: {cpu: 1, memoryInGb: 1}}
  - name: log-forwarder
    properties:
      image: fluent-bit:latest
      resources: {requests: {cpu: 0.5, memoryInGb: 0.5}}
  osType: Linux
  restartPolicy: Always
type: Microsoft.ContainerInstance/containerGroups

# Deploy from YAML
# az container create --resource-group MyRG --file multi-container.yaml

볼륨 Mount: Azure Files 통합

ACI 컨테이너는 기본적으로 상태 비저장 방식입니다. 컨테이너의 파일 시스템에 기록된 Data는 컨테이너가 다시 시작될 때 손실됩니다. Azure Files 공유를 볼륨으로 Mount하면 컨테이너가 다시 시작된 후에도 Data를 유지하거나 같은 그룹의 컨테이너 간에 Data를 공유할 수 있습니다. 컨테이너 인스턴스를 생성할 때 스토리지 계정 이름, 키, 파일 공유 이름을 지정하세요.

# Mount an Azure Files share for persistent storage
az container create \
  --name stateful-app \
  --resource-group MyRG \
  --image myapp:v1.0 \
  --azure-file-volume-account-name mystorageaccount \
  --azure-file-volume-account-key '<storage-account-key>' \
  --azure-file-volume-share-name myfileshare \
  --azure-file-volume-mount-path /data

# Data written to /data persists in the Azure Files share

GPU Container Instances

ACI는 ML 추론, 동영상 처리, 과학적 계산 workload를 위해 GPU 컨테이너 인스턴스(K80, V100)를 지원합니다. GPU 인스턴스는 일부 지역에서만 사용할 수 있으며 Linux 컨테이너가 필요합니다. GPU/초 단위로 요금이 청구되므로 GPU 컨테이너를 시작하고, 모델을 실행하고, 즉시 삭제하는 burst 추론 시나리오에 경제적입니다. 24시간 실행되는 전용 GPU VM보다 훨씬 저렴합니다.

# Create a GPU-enabled container instance
az container create \
  --name gpu-inference \
  --resource-group MyRG \
  --image my-ml-model:latest \
  --gpu-count 1 \
  --gpu-sku V100 \
  --cpu 4 \
  --memory 16 \
  --os-type Linux

Virtual Network를 사용하는 ACI

ACI 컨테이너 그룹을 VNet 내 전용 subnet에 배포하면 프라이빗 IP 주소를 할당하고, 인터넷에 노출하지 않고도 다른 VNet 연결 Resource(데이터베이스, VM)에 연결할 수 있습니다. VNet 통합 ACI에는 전용 위임 subnet(Microsoft.ContainerInstance/containerGroups에 위임됨)이 필요하며 public IP 할당은 지원되지 않습니다.

# Create an ACI container in a VNet
az container create \
  --name private-task \
  --resource-group MyRG \
  --image myapp:v1.0 \
  --vnet MyVNet \
  --subnet ContainerSubnet \
  --restart-policy Never

# The container gets a private IP from the subnet CIDR
# It can reach VNet resources (SQL, Redis, VMs) on private IPs

Virtual Kubelet Node로서의 ACI

ACI는 오픈 소스 프로젝트인 Virtual Kubelet을 통해 virtual node로 AKS와 통합됩니다. AKS 클러스터에서 burst 수요가 발생하여 VM Node 용량을 초과하면 Kubernetes는 Pod를 virtual ACI Node에 예약하고 실제 ACI 컨테이너 인스턴스를 시작할 수 있습니다. 이를 통해 추가 VM Node를 미리 프로비저닝하지 않고도 무제한 burst 확장이 가능하며, burst 기간 동안 ACI 컴퓨팅 비용만 지불하면 됩니다.

# Enable virtual nodes on an AKS cluster
az aks enable-addons \
  --name myAKSCluster \
  --resource-group MyRG \
  --addons virtual-node \
  --subnet-name VirtualNodeSubnet

# Schedule a burst pod on ACI via node selector
# spec:
#   nodeSelector:
#     kubernetes.io/role: agent
#     beta.kubernetes.io/os: linux
#     type: virtual-kubelet
#   tolerations:
#   - key: virtual-kubelet.io/provider
#     operator: Exists

ACI, AKS, App Service 중 무엇을 사용할까요?

Kubernetes 오버헤드가 필요하지 않은 짧게 실행되는 작업, batch 작업, CI 빌드 에이전트, 일회성 컨테이너에는 ACI를 선택하세요. 서비스 검색, 상태 확인, rolling 업데이트, 클러스터 Network가 필요한 장시간 실행 다중 컨테이너 마이크로서비스에는 AKS를 선택하세요. 컨테이너 Network를 직접 관리하지 않고 PaaS 편의 기능(배포 슬롯, 관리형 인증서, 기본 제공 인증)을 사용하려면 App Service를 선택하세요.

빠른 확인

이 lesson에서 다룬 Microsoft Azure Fundamentals (AZ-900) 개념에 대한 이해도를 테스트해 보세요.

lesson 요약

이 lesson에서는 다음을 배웠습니다. Azure Container Instances는 서버 관리 없이 몇 초 만에 컨테이너를 실행하며 CPU와 메모리 사용량에 따라 초 단위로 요금이 청구됩니다. 컨테이너 그룹을 사용하면 여러 컨테이너가 Kubernetes Pod처럼 Network와 스토리지를 공유할 수 있으며, 재시작 정책(Always, Never, OnFailure)은 종료 후 컨테이너 lifetime을 제어합니다. 다음으로 Azure용 Kubernetes 개념을 살펴보겠습니다.

무료로 시작

AI 튜터와 함께 Azure Fundamentals을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
30
레슨
120

자주 묻는 질문

“Azure Container Instances” 강의는 무료인가요?

네 — “Azure Container Instances” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Azure Fundamentals 강의 전체를 잠금 해제할 수 있습니다. Azure Fundamentals 강의에는 총 4개의 강의가 포함되어 있습니다.

“Azure Container Instances”에서 뭘 배우나요?

서버를 관리하지 않고 ACI를 사용해 컨테이너화된 애플리케이션을 몇 초 만에 실행하고, 환경 변수와 볼륨 탑재를 구성하며, ACI 요금 청구 방식을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Azure Fundamentals을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Azure Fundamentals을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Azure Fundamentals은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Azure Container Instances” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Azure Fundamentals 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Azure Fundamentals 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Azure Container Registry
  2. Azure Container Instances
  3. Azure를 위한 Kubernetes 개념
  4. AKS에서 워크로드 배포
← Azure Fundamentals(으)로 돌아가기