티스토리 뷰

<참조> https://azuredevopslabs.com/labs/vstsextend/aspnetmodernize/

 

 

 

 

 

실습 3: ACR(Azure Container Registry)에도커 이미지 게시

이제 애플리케이션이 로컬 Docker에서 성공적으로 실행되고 있는지 확인 했으므로 Visual Studio의 게시 마법사를 사용하여 새 또는 기존 Azure Container Registry에 이미지를 게시 할 수 있다.

1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 Publish를 선택한다.

 

 

2. 게시 마법사에서 Target으로 Azure를 선택하고 Specific target으로  Azure Container Registry를 선택한 다음 Next를 클릭한다.

 

+ 버튼을 클릭한다.

 

 

 

3. 필요한 세부 정보를 입력하고 Create를 클릭하여 ACR로 푸시를 진행한다.

 

 

 

 

4. 게시 할 때 프로덕션 Docker 이미지가 생성되고 Azure Container Registry로 푸시된다.

 

 

5. 게시가 성공하면 Azure Portal에서 배포된 ACR로 이동한다. 이미지 태그가 게시 된 nerddinner 저장소가 표시된다.

 

 

 

6. ACR의 설정에서 Access Keys를 선택하고 password를 복사한다. 이 암호는 다음 실습에서 필요하다.

 

 

 

 

실습 4: ACR에서 ACI (Azure Container Instances)로 새 Docker 이미지 푸시

이 실습에서는 Azure Container Instance를 만들고 ACR에서 Azure Container Instance로 새 Docker 이미지를 푸시한다.

애플리케이션을 배포 할 수 있는 위치에 대한 옵션이 있다.

  • Azure Container Instances
  • Azure Container Service
  • Service Fabric

ACI (Azure Container Instances)에서 Windows 컨테이너를 사용하여 Nerd Dinner를 표시한다.

 

1. Azure CLI를 사용하여 이미지를 만들고 Azure Container Instance에 푸시한다. Azure Portal에서 Cloud Shell을 클릭다.

 

 

2. 다음 명령을 실행하여 ACI에 대한 새 리소스 그룹을 만든다.


az group create --name nerddinnerapp --location koreacentral
zerobig_devops@Azure:~$ az group create --name nerddinnerapp --location koreacentral
{
  "id": "/subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/nerddinnerapp",
  "location": "koreacentral",
  "managedBy": null,
  "name": "nerddinnerapp",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

 

 

3. 다음 명령을 실행하여 Windows ACI를 만들고 ACR에서 Nerd Dinner 이미지를 푸시한다.


az container create --name nerddinnerapp --resource-group nerddinnerapp --os-type Windows --image {your acr name}.azurecr.io/nerddinner:{Image Tag} --ip-address Public
zerobig_devops@Azure:~$ az container create --name nerddinnerapp --resource-group nerddinnerapp --os-type Windows --image nerddinner20201212115313.azurecr.io/nerddinner:latest --ip-address Public
Image registry username: NerdDinner20201212115313
Image registry password:
{- Finished ..
  "containers": [
    {
      "command": null,
      "environmentVariables": [],
      "image": "nerddinner20201212115313.azurecr.io/nerddinner:latest",
      "instanceView": {
        "currentState": {
          "detailStatus": "",
          "exitCode": null,
          "finishTime": null,
          "startTime": "2020-12-12T03:17:38+00:00",
          "state": "Running"
        },
        "events": [
          {
            "count": 1,
            "firstTimestamp": "2020-12-12T03:10:21+00:00",
            "lastTimestamp": "2020-12-12T03:10:21+00:00",
            "message": "pulling image \"nerddinner20201212115313.azurecr.io/nerddinner:latest\"",
            "name": "Pulling",
            "type": "Normal"
          },
          {
            "count": 1,
            "firstTimestamp": "2020-12-12T03:17:32+00:00",
            "lastTimestamp": "2020-12-12T03:17:32+00:00",
            "message": "Successfully pulled image \"nerddinner20201212115313.azurecr.io/nerddinner:latest\"",
            "name": "Pulled",
            "type": "Normal"
          },
          {
            "count": 1,
            "firstTimestamp": "2020-12-12T03:17:32+00:00",
            "lastTimestamp": "2020-12-12T03:17:32+00:00",
            "message": "Created container",
            "name": "Created",
            "type": "Normal"
          },
          {
            "count": 1,
            "firstTimestamp": "2020-12-12T03:17:38+00:00",
            "lastTimestamp": "2020-12-12T03:17:38+00:00",
            "message": "Started container",
            "name": "Started",
            "type": "Normal"
          }
        ],
        "previousState": null,
        "restartCount": 0
      },
      "livenessProbe": null,
      "name": "nerddinnerapp",
      "ports": [
        {
          "port": 80,
          "protocol": "TCP"
        }
      ],
      "readinessProbe": null,
      "resources": {
        "limits": null,
        "requests": {
          "cpu": 1.0,
          "gpu": null,
          "memoryInGb": 1.5
        }
      },
      "volumeMounts": null
    }
  ],
  "diagnostics": null,
  "dnsConfig": null,
  "id": "/subscriptions/2e5d848e-xxxx-xxxx-xxxx-fd25ae915bcd/resourceGroups/nerddinnerapp/providers/Microsoft.ContainerInstance/containerGroups/nerddinnerapp",
  "identity": null,
  "imageRegistryCredentials": [
    {
      "password": null,
      "server": "nerddinner20201212115313.azurecr.io",
      "username": "NerdDinner20201212115313"
    }
  ],
  "instanceView": {
    "events": [],
    "state": "Running"
  },
  "ipAddress": {
    "dnsNameLabel": null,
    "fqdn": null,
    "ip": "40.82.136.7",
    "ports": [
      {
        "port": 80,
        "protocol": "TCP"
      }
    ],
    "type": "Public"
  },
  "location": "koreacentral",
  "name": "nerddinnerapp",
  "networkProfile": null,
  "osType": "Windows",
  "provisioningState": "Succeeded",
  "resourceGroup": "nerddinnerapp",
  "restartPolicy": "Always",
  "tags": {},
  "type": "Microsoft.ContainerInstance/containerGroups",
  "volumes": null
}

 

image registry password를 입력하라는 메시지가 표시되면 이전 실습에서 복사한 비밀번호를 붙여 넣는다.

your acr name 및 Image tag를 리소스 세부 정보로 바꾼다.

ACI를 배포하는 데 약 5-10 분이 걸린다.

 

 

 

4. ACI가 배포된 리소스 그룹으로 이동하여 nerddinnerapp 컨테이너 인스턴스를 선택한다.

 

컨테이너의 State가 일단 Running 이 IP address를 사용하여 배포된 Nerd Dinner 애플리케이션에 액세스 할 수 있다. IP address를 복사하고 브라우저에 붙여 넣어 실행중인 애플리케이션을 확인한다.

 

 

 

요약

최소한의 코드/구성 변경으로 Azure 클라우드 및 Windows 컨테이너로 기존 .NET 애플리케이션을 현대화하는 방법을 배웠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함