Azure Container Instance  ACI

·         컨테이너 실행
·         컨테이너 종료 시 수행되는 동작 제어
·         컨테이너 시작 시 환경변수 이용 컨테이너 구성 (--environment-variables)
·         컨테이너 시작 시 보안 환경변수 이용 (--secure-environment-variables)
·         컨테이너 종료 시 데이터볼륨 연결 데이터보존
 
애플리케이션, 작업 자동화
격리된 컨테이너 시나리오 가능
 
·         빠른시작
·         초당 청구
·         하이퍼바이저 수준 격리 보안 / 애플리케이션의 완전 격리
·         사용자 지정 크기 가능
·         영구 스토리지 (컨테이너에도 Auzre 파일 공유 가능)
·         리눅스, 윈도우
 
오케스트레이션 필요한 시나리오의 경우 AKS 이용
 
 

예제

웹앱을 호스트하는 컨테이너 배포
 
DNS이름을 이용하여, 인터넷에 노출도 가능
-demo-$RANDOM 
onestxQAzure 
onestxQAzure
 
 
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --image microsoft/aci-helloworld \
  --ports 80 \
  --dns-name-label $DNS_NAME_LABEL \
  --location eastus
 
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --query "{FQDN:ipAddress.fqdn,ProvisioningState:provisioningState}" \
  --out table
 
onestx@Azure.-$ az container show fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer fi 
--auery " {FQDN: ioAddress. fadn, Prov isi on ngState: Orov isi on ngState}' 
--out table 
aci -demo-1 44gl eastus. azurecontai ner io 
onestx@Azure 
ProvisioningState 
Succeeded
 
웹사이트 확인
Azure Container Instances 
Bookmarks • 
Azure?' EDI 
x Welcome to Azure Container Ir x 
aci-demo -14491 .eastus.azurecontainer.io 
TDG_SPS C} C} 
3LUEDIC 
Microsoft Learn 
Welcome to Azure Container Instances!
 
다시 시작 정책
설명
Always
컨테이너 그룹의 컨테이너가 항상 다시 시작됩니다. 이 정책은 웹 서버와 같은 장기 실행 작업에 적합합니다. 컨테이너를 만들 때 다시 시작 정책이 지정되지 않은 경우 적용되는 기본 설정입니다.
Never
컨테이너 그룹의 컨테이너가 절대로 다시 시작되지 않습니다. 컨테이너가 한 번만 실행됩니다.
OnFailure
컨테이너 그룹의 컨테이너가 컨테이너에서 실행된 프로세스가 실패할 때만(0이 아닌 종료 코드로 종료될 때) 다시 시작됩니다. 컨테이너가 한 번 이상 실행됩니다. 이 정책은 단기 작업을 실행하는 컨테이너에 적합합니다.
 
 
추가 예시
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer-restart-demo \
  --image microsoft/aci-wordcount:latest \
  --restart-policy OnFailure \
  --location eastus
 
microsoft/aci-wordcount:latest 템플릿
셰익스피어의 Hamlet 텍스트를 분석하고, 가장 많이 쓰이는 10개의 단어를 표준 출력에 쓰고 종료하는 Python 스크립트임.
 
작업이라서, 아래 코드로, 종료여부를 확인해야됨. 결과 출력은 로그로됨
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer-restart-demo \
  --query containers[0].instanceView.currentState.state
onestx@Azure 
az container show 
--resource-grouo 4-aBddf757BOla 
--name mycontainer-restart-demo fi 
--auery containers[D] instanceV i ew currentState. state 
'Terminated"
 
로그확인
onestx@Azure 
az container logs fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer-restart-demo 
ggcl) , 
'of' 
'to' 
544) , 
agg) , 
HAMLET
 
 
추가예제 : 환경변수 이용
 Azure Cosmos DB 인스턴스를 만들고 환경 변수를 사용하여 연결 정보를 Azure Container Instance에 전달해보자
 
COSMOS_DB_ENDPOINT, COSMOS_DB_MASTERKEY 환경변수
 
코스모스DB만들기  az comosdb create 명령
COSMOS_DB_ENDPOINT=$(az cosmosdb create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $COSMOS_DB_NAME \
  --query documentEndpoint \
  --output tsv)
 
키 가져오기
COSMOS_DB_MASTERKEY=$(az cosmosdb list-keys \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $COSMOS_DB_NAME \
  --query primaryMasterKey \
  --output tsv)
 
이렇게 값 확인가능
onestx@Azure 
bash: vRSmVWGoWJW3hNfcaGkLgI cvcoawseS5xnOFecj 
command not found 
onestx@Azure
 
위에 값을 가져온 환경변수 이용하여 컨테이너 create
--environmenet-variables 이용
 
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --image microsoft/azure-vote-front:cosmosdb \
  --ip-address Public \
  --location eastus \
  --environment-variables \
    COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
    COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
 
 
컨테이너 속성 쿼리방법
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --query ipAddress.ip \
  --output tsv
onestx@Azure.-$ az container show fi 
--resource-grouo 4-aBddf757BOla 
--name aci -demo fi 
--auery ioAddress. io fi 
--outout tsv 
243
 
 
기존 환경변수 보는 방법
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo \
  --query containers[0].environmentVariables
아래와 같이 다 조회됨.
onestxQAzure.-$ az container show 
--resource-grouo 4-aBddf757BDla 
--name aci -demo 
--auery containers[D] envi ronmentVar i abl es 
'name' 
secureVaI ue" 
"httos: //aci -cosmos-db-1 1 30.documents.azure.com 443/ " 
'name' 
secureVaI ue" 
onestxQAzure
 
해당 값을 가리고 싶으면
--secure-environment-variables
이용하면 됨.
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-secure \
  --image microsoft/azure-vote-front:cosmosdb \
  --ip-address Public \
  --location eastus \
  --secure-environment-variables \
    COSMOS_DB_ENDPOINT=$COSMOS_DB_ENDPOINT \
    COSMOS_DB_MASTERKEY=$COSMOS_DB_MASTERKEY
 
 
기본적으로 ACI 는 상태비저장임.
컨테이너 중지 시 모든 값 소실
외부저장소 볼륨 탑재해야됨
 
파일공유만들기
STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
az storage account create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $STORAGE_ACCOUNT_NAME \
  --sku Standard_LRS \
  --location eastus
 
 
변수에 만든 파일공유 연결문자열 저장하기
Export 라는 걸 쓰네, 위에서 코스모스DB이름 가져올때는 안썼는데.. 길어서 그런가
 
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name $STORAGE_ACCOUNT_NAME \
  --output tsv)
 
ON_STRI 
onestx@Azure 
bash: Defaul tEndoointsProtocoI tos; EndoointSuff x=core. windows. net ; AccountName=mystor 
t 3D 1 04 ; t PXnQO dPWCmZt eul V xW6dl T BEHD6SN4_Ir j I CQUyO 
command not found 
onestx@Azure
 
export 부분은 곧 실행하게 될 다른 CLI 명령에 이 변수가 액세스할 수 있게 해줍니다.
 
az storage share create --name aci-share-demo
 
 
STORAGE_KEY=$(az storage account keys list \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --account-name $STORAGE_ACCOUNT_NAME \
  --query "[0].value" \
  --output tsv)
 
 
값 확인 시 echo 붙여도 되고 안붙여도 확인가능
$STORAGE_KEY 
onestx@Azure 
bash: T CQUyOZrebBW2dl 
command not found 
echo $STORAGE_KEY 
onestx@Azure 
cbLza PXnQO dPWCmZt eul V xW6dl T BEHD6SN4_Ir j I CQUyOZr ebBW2dl j 
onestx@Azure
 
 
 
컨테이너 생성 시 영구볼륨 같이 탑재
az container create \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-files \
  --image microsoft/aci-hellofiles \
  --location eastus \
  --ports 80 \
  --ip-address Public \
  --azure-file-volume-account-name $STORAGE_ACCOUNT_NAME \
  --azure-file-volume-account-key $STORAGE_KEY \
  --azure-file-volume-share-name aci-share-demo \
  --azure-file-volume-mount-path /aci/logs/
 
az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name aci-demo-files \
  --query ipAddress.ip \
  --output tsv
 
파일공유 스토리지에 저장된 파일보기
az storage file list -s aci-share-demo -o table
 
onestx@Azure.-$ az 
Name 
1 551 txt 
onestx@Azure 
storage 
Content 
file list 
Length 
-s aci -share-demo -o table 
T yoe 
Last Modi fied
az storage file download -s aci-share-demo -p 1551654589974.txt
 
다운로드완료
onestx@Azure.-$ az 
share-demo - 
Fini shed[ 
'content 
'met adata" 
storage 
file 
download - 
s aci- 
1551 txt 
'name 
" " 1 551 txt 
'orooert es' 
'contentLength" 
"bytes 0-6/7" , 
'content Range' 
content Sett ings' 
cacheCont row 
'contentDi soosition' 
'contentEncoding" 
content Language' 
i cat ion/octet -st ream' 
'contentTyoe" 
copy' 
'complet ionTime" 
lid" 
'or ogress' 
source' 
'status" 
statusDescr iot on 
lastModi fi ed" 
" CIO" 
'serverEncryoted"
 
 
열어보기 Shell에서 바로
시스템 생성 대체 텍스트:
onestx@Azure =$ cat 15뒤듬545巳四741 txt 
11111110nestx@Azure
 
이런식으로, 데이터 영구보존 가능함.
 
 

컨테이너 로그확인

 
az container logs \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer
 
아래와 같이 긴 로그 확인 가능
onestx@Azure.-$ az container logs fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer 
Checking for script in /aoo/orestart . sh 
Running script /aoo/orestart . sh 
Running inside /aoo/orestart .sh, you could add migrat ions to this fi le, 
/usr/bin/env bash 
# Let the DB start 
# Run migrat ions 
alembic upgrade head 
/usr/l ib/oython2. 7/dist-oackages/suoervisor/oot ions. 2gB: UserWarning: Supervisord is 
running as root and it is searching for its configurat ion file in default locat ions (in 
luding its current working di rectory); you probably want to specify a 
" -c" argument spe 
i fying an absolute oath to a 
'Supervisord is running as 
23: 13: 42, CRI T 
201+03-03 23: 13: 42, 
f" during oarsing 
201+03-03 23: 13: 42, BOO 
23: 13: 42, BOO CRI T 
cat ion checking 
201+03-03 23: 13: 42, BOO 
201+03-03 23: 13: 43, 
201+03-03 23: 13: 43, 
getting INI 
getting INI 
NFO 
NFO 
NFO 
NFO 
NFO 
configurat ion file for improved security. 
root and it is searching 
Supervisor running as root (no user in config fi le) 
Incl uded extra fi le " /etc/suoervisor/conf d/suoervisord. con 
RPC interface 'supervisor 
Server 
running without any HTTP authenti 
supervisord started with oid 5 
spawned: 
nginx' with Did B 
spawned: 
uwsgl 
[uWSGI] 
[uWSGI] 
configurat ion from /aoo/uwsgi ini 
configurat ion from /etc/uwsgi/uwsgi ini
 
az container attach 명령은 컨테이너 시작 중에 진단 정보를 제공합니다. 컨테이너가 시작되면 표준 출력 및 표준 오류 스트림도 로컬 터미널에 씁니다.
az container attach \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer
 
 
컨테이너에서 명령 실행  : 예시, 쉘명령
az container exec \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --exec-command /bin/sh
 
쉘접속됨, 간단한 명령 호출 가능
onestx@Azure.-$ az container exec fi 
--resource-grouo 4-aBddf757BOla 
--name mycontainer fi 
--exec-command /bin/sh 
# Is 
--oycache__ 
main.oy orestart . sh 
/bin/sh: 2: 
not found 
# Is 
--oycache_ 
main.oy orestart . sh 
# cat uwsgi 
. Inl 
module = 
cal lable = apo 
static 
static 
t emol at es 
t emol at es 
uwsgl 
uwsgl 
. Inl 
. Inl
 
Exit로 나옴
 
컨테이너의 CPU 및 메모리 사용량 모니터링
컨테이너ID를 먼저 가져오기
CONTAINER_ID=$(az container show \
  --resource-group 196a7813-f063-4037-8414-a8ddf757801a \
  --name mycontainer \
  --query id \
  --output tsv)
Azure 모니터 조회 명령
az monitor metrics list \
  --resource $CONTAINER_ID \
  --metric CPUUsage \
  --output table
g-03-03 
22: 
g-03-03 
22 : 
g-03-03 
22 : 
47 : 
g-03-03 
22 : 
g-03-03 
22 : 
g-03-03 æ: 
g-03-03 æ: 51 
g-03-03 æ: 52: 
g-03-03 æ: 53: 
g-03-03 æ: 54 : 
g-03-03 æ: 55: 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
CPU 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage
 
혹은 메트릭에 MemoryUsage
 
g-03-03 
g-03-03 
g-03-03 
g-03-03 
g-03-03 æ: 51 
22 : 
22 : 
22 : 
22 : 
46 : 
47 : 
48 : 
g-03-03 22 : 50 : 
g-03-03 22 : 52 : 
g-03-03 22 : 53 : 
g-03-03 æ: 54 : 
g-03-03 22 : 55: 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Memory 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
Usage 
1 gB72.o 
1 71 
1741
물론 Azure Portal에서도 확인 가능함.
 
Microsoft OneNote 2016에서 작성




+ Recent posts