Azure Container Instances는 컨테이너 그룹을 사용하여 단일 호스트에 여러 컨테이너를 배포할 수 있습니다. 컨테이너 그룹은 로깅, 모니터링 또는 서비스에 두 번째 연결된 프로세스가 필요한 다른 구성을 위해 애플리케이션 사이드카를 빌드할 때 유용합니다.
이 자습서에서는 Azure CLI를 사용하여 Azure Resource Manager 템플릿을 배포하여 2개 컨테이너 사이드카 구성을 실행하는 단계를 수행합니다. 당신은 다음을 배우게 됩니다:
- 다중 컨테이너 그룹 템플릿 구성
- 컨테이너 그룹 배포
- 컨테이너의 로그 보기
컨테이너 그룹을 사용하여 더 많은 Azure 서비스 리소스(예: Azure Files 공유 또는 가상 네트워크)를 배포해야 하는 경우 시나리오에 맞게 Resource Manager 템플릿을 쉽게 조정할 수 있습니다.
비고
다중 컨테이너 그룹은 현재 Linux 컨테이너로 제한됩니다.
Azure 계정이 없는 경우 시작하기 전에 체험 계정을 만듭니다.
필수 조건
Bash 환경을 Azure Cloud Shell에서 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치하십시오. Windows 또는 macOS에서 실행하는 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 관련 종속 라이브러리를 확인합니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
템플릿 구성
먼저 다음 JSON을 이름이 지정된 azuredeploy.json
새 파일에 복사합니다. Azure Cloud Shell에서 Visual Studio Code를 사용하여 작업 디렉터리에 파일을 만들 수 있습니다.
code azuredeploy.json
이 Resource Manager 템플릿은 두 개의 컨테이너, 공용 IP 주소 및 두 개의 노출된 포트가 있는 컨테이너 그룹을 정의합니다. 그룹의 첫 번째 컨테이너는 인터넷 연결 웹 애플리케이션을 실행합니다. 두 번째 컨테이너인 사이드카는 그룹의 로컬 네트워크를 통해 주 웹 애플리케이션에 대한 HTTP 요청을 만듭니다.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"containerGroupName": {
"type": "string",
"defaultValue": "myContainerGroup",
"metadata": {
"description": "Container Group name."
}
}
},
"variables": {
"container1name": "aci-tutorial-app",
"container1image": "mcr.microsoft.com/azuredocs/aci-helloworld:latest",
"container2name": "aci-tutorial-sidecar",
"container2image": "mcr.microsoft.com/azuredocs/aci-tutorial-sidecar"
},
"resources": [
{
"name": "[parameters('containerGroupName')]",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"___location": "[resourceGroup().___location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
},
{
"port": 8080
}
]
}
},
{
"name": "[variables('container2name')]",
"properties": {
"image": "[variables('container2image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
}
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": 80
},
{
"protocol": "tcp",
"port": 8080
}
]
}
}
}
],
"outputs": {
"containerIPv4Address": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerInstance/containerGroups/', parameters('containerGroupName'))).ipAddress.ip]"
}
}
}
프라이빗 컨테이너 이미지 레지스트리를 사용하려면 다음 형식으로 JSON 문서에 개체를 추가합니다. 이 구성의 예제 구현은 ACI Resource Manager 템플릿 참조 설명서를 참조하세요.
"imageRegistryCredentials": [
{
"server": "[parameters('imageRegistryLoginServer')]",
"username": "[parameters('imageRegistryUsername')]",
"password": "[parameters('imageRegistryPassword')]"
}
]
템플릿 배포
az group create 명령을 사용하여 리소스 그룹을 만듭니다.
az group create --name myResourceGroup --___location eastus
az deployment group create 명령을 사용하여 템플릿을 배포합니다.
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
몇 초 정도 지나면 Azure에서 초기 응답이 수신됩니다.
배포 상태 확인
배포 상태를 확인하려면 다음 az container show 명령을 사용합니다.
az container show --resource-group myResourceGroup --name myContainerGroup --output table
실행 중인 애플리케이션을 보려면 브라우저에서 해당 IP 주소로 이동합니다. 예를 들어 IP는 52.168.26.124
다음 예제 출력에 있습니다.
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- -------------------------------------------------------------------------------------------------- -------------------- --------- --------------- -------- ----------
myContainerGroup danlep0318r Running mcr.microsoft.com/azuredocs/aci-tutorial-sidecar,mcr.microsoft.com/azuredocs/aci-helloworld:latest 20.42.26.114:80,8080 Public 1.0 core/1.5 gb Linux eastus
컨테이너 로그 보기
az container logs 명령을 사용하여 컨테이너의 로그 출력을 봅니다. 인수는 --container-name
로그를 끌어올 컨테이너를 지정합니다. 이 예제에서는 컨테이너가 aci-tutorial-app
지정됩니다.
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-app
출력:
listening on port 80
::1 - - [02/Jul/2020:23:17:48 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:51 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
::1 - - [02/Jul/2020:23:17:54 +0000] "HEAD / HTTP/1.1" 200 1663 "-" "curl/7.54.0"
사이드카 컨테이너에 대한 로그를 보려면 컨테이너를 지정하는 aci-tutorial-sidecar
유사한 명령을 실행합니다.
az container logs --resource-group myResourceGroup --name myContainerGroup --container-name aci-tutorial-sidecar
출력:
Every 3s: curl -I http://localhost 2020-07-02 20:36:41
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 1663 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Wed, 29 Nov 2017 06:40:40 GMT
ETag: W/"67f-16006818640"
Content-Type: text/html; charset=UTF-8
Content-Length: 1663
Date: Thu, 02 Jul 2020 20:36:41 GMT
Connection: keep-alive
여기에서 볼 수 있듯이 사이드카는 그룹의 로컬 네트워크를 통해 주 웹 애플리케이션에 대한 HTTP 요청을 주기적으로 수행하여 실행되도록 합니다. 이 사이드카 예제는 200 OK
외의 HTTP 응답 코드를 받은 경우 경고를 트리거하도록 확장할 수 있습니다.
다음 단계
이 자습서에서는 Azure Resource Manager 템플릿을 사용하여 Azure Container Instances에 다중 컨테이너 그룹을 배포했습니다. 당신은 다음을 배우셨습니다:
- 다중 컨테이너 그룹 템플릿 구성
- 컨테이너 그룹 배포
- 컨테이너의 로그 보기
더 많은 템플릿 샘플은 Azure Container Instances에 대한 Azure Resource Manager 템플릿을 참조하세요.
YAML 파일을 사용하여 다중 컨테이너 그룹을 지정할 수도 있습니다. YAML 형식의 더 간결한 특성으로 인해 배포에 컨테이너 인스턴스만 포함되는 경우 YAML 파일을 사용하여 배포하는 것이 좋습니다.