랩: 이미지 및 컨테이너를 사용하여 컴퓨팅 워크로드를 배치합니다.

학생 랩 매뉴얼

랩 시나리오

조직에서 작업을 실행하고 즉시 종료할 수 있는 가상 기계(VM)를 자동으로 생성하는 방법을 찾고 있습니다. Microsoft Azure 에서 여러 계산 서비스를 평가하여 자동으로 가상 기계를 만들고 해당 기계에 커스텀 소프트웨어를 설치하는 데 도움이 되는 서비스를 결정해야 합니다. 개념 증명으로 두 솔루션을 비교할 수 있도록 VHD 이미지 및 컨테이너 이미지에서 VM 을 만들기로 결정했습니다. 개념 증명을 간단하게 유지하기 위해 .NET Core 로 작성된 “IP 체크” 응용 프로그램을 만드며 기계를 자동으로 배치하겠습니다. 개념 증명은 Azure Container Instances 및 Azure 가상 기계 서비스를 평가하겠습니다.

목표

이 랩을 완료한 후에 다음과 같은 조작이 가능합니다.

  • 수동으로 또는 Azure portal 에서 도구를 사용하여 VM 을 만듭니다.

  • 도커 컨테이너 이미지를 Azure 컨테이너 레지스트리에 배치합니다.

  • Azure Container Instances 를 사용하여 Azure 컨테이너 레지스트리의 컨테이너 이미지에서 컨테이너를 배치합니다.

  • Azure 리소스 관리자 템플릿 및 Azure 컨테이너 레지스트리의 컨테이너 이미지를 사용하여 VM 을 배치합니다.

랩 설정

  • 예상 시간: 75 분

지침

시작하기 전에

랩 가상 기계에 로그인하세요

아래 자격 증명으로 Windows 10 가상기계에 등록 되어 있는지 확인합니다.

  • 사용자 이름: 관리자

  • 비밀번호: Pa55w.rd

설치된 응용 프로그램 검토

Windows 10 바탕 하단에 있는 작업 표시줄을 관찰합니다. 작업 표시줄에 이 랩에서 사용할 응용 프로그램의 아이콘을 포함되어 있습니다.

  • 마이크로소프트 에지

  • 파일 탐색기

연습 1: Azure portal 을 사용하여 가상 기계를 만들겁니다.

작업 1: Azure portal 열기

  1. Azure portal 에 로그인합니다.(https://portal.azure.com).

  2. Azure portal 에 처음 로그인하는 경우에 다이얼로그 박스가 나타나고 포털 투어가 시작하겠습니다. 시작 하기 버튼을 선택하여 투어를 건너뜁니다.

작업 2: 리소스 그룹 만들기

  1. 다음 세부 정보를 통해서 새로운 리소스 그룹 을 만듭니다.

    1. 이름: 컨테이너계산

    2. 위치: 미국 동부

  2. 이 랩을 진행하기 전에 만들기 태스크 완료될 때까지 기다립니다.

작업 3: Linux 가상 기계 리소스 만들기

  1. 다음 세부 정보를 통해서 새로운 가상 기계 를 만듭니다.

    • 운영 체제: 우분투 서버 18.04 LTS

    • 이름: simplevm

    • 디스크 유형: SSD

    • 사용자 이름: 학생

    • 비밀번호: StudentPa55w.rd

    • 리소스 그룹: 컨테이너계산

    • 위치: 미국 동부

    • 사이즈: 표준 B1s

    • 공용 인바운드 포트: SSH(22)

  2. 이 랩을 진행하기 전에 태스크 만들기가 완료될 때까지 기다립니다.

작업 4: 가상 기계 검증

  1. 이전에 랩에서 만든 simplevm VM 에 접속합니다.

  2. 가상 기계 연결 팝업을 엽니다.

  3. 포트 22공용 IP 주소 를 사용하여 SSH 명령 을 복사해서 VM 에게 연결합니다. 나중에 이 랩에서 이 명령을 사용할 겁니다.

  4. Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.

  5. 클라우드셸 이 아직 구성되지 않은 경우 기본 설정을 사용하여 배쉬에 쉘을 구성합니다.

  6. 클라우드셸 명령 프롬프트 안에서 이 랩에서 복사된 SSH 명령 을 사용하여 SSH 로 VM 에 연결합니다.

  7. 연결 프로세스중에 호스트의 진위를 확인할 수 없다는 경고를 받겠습니다. 호스트에 연결하는 것을 계속합니다. 마지막으로 자격 증명을 입력하라는 메세지가 표시되면 비밀번호 StudentPa55w.rd 를 입력해주세요.

  8. VM 에 연결되면 다음 명령을 사용해서 기계 정보를 봅니다:

    uname -mnipo
    uname -srv
  1. Cloud Shell 페인을 닫습니다.

검토

이 연습에서 Azure portal 인터페이스를 사용하여 새 VM 을 수동으로 만들었고 Cloud Shell 및 시큐어 셸(SSH)을 연결했습니다.

연습 2: Azure CLI 를 사용하여 가상 시스템 만들기

작업 1: Cloud Shell 을 열기

  1. Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.

작업 2: Azure CLI 명령 사용

  1. CLI 의 루트 레벨에서 하위 그룹 목록 및 명령을 보려면 지정된 –help 플래그와 함께 az 명령을 사용하십시오.

  2. 하위 그룹 목록 및 가상 기계 명령을 보려면 az vm 명령을 지정된 –help 플래그와 함께 사용하십시오.

  3. 인수 목록 및 가상 기계 만들기 명령 예시를 보려면 az vm create 명령을 지정된 –help 플래그와 함께 사용하십시오.

  4. az vm create 명령을 사용하여 다음 설정을 따라서 새 가상 기계 를 만듭니다.

    • 리소스 그룹: 컨테이너계산

    • 이름: quickvm

    • 이미지: 데비안

    • 사용자 이름: 학생

    • 비밀번호: StudentPa55w.rd

  5. VM 만들기 프로세스가 완료될 때까지 기다립니다. 프로세스가 완료된면 명령이 기계의 세부 정보가 포함된 JSON 파일을 반환합니다.

  6. 새로운 마든 VM 의 다양한 메타데이터가 포함된 더 상세한 JSON 파일을 보려면 vm show 명령을 사용하십시오.

  7. az vm list-ip-addresses 명령을 사용하여 VM과 관련된 모든 IP 주소를 나열합니다.

    az vm list-ip-addresses --resource-group ContainerCompute --name quickvm
  1. az vm list-ip-addresses 명령 및 –query 인수를 사용하고 출력을 필터링하여 첫 번째 IP 주소 값만 반환합니다.
    az vm list-ip-addresses --resource-group ContainerCompute --name quickvm --query '[].{ip:virtualMachine.network.publicIpAddresses[0].ipAddress}' --output tsv
  1. 다음 스크립트를 사용해서 이전의 명령 결과를 ipAddress 라는 새 배쉬 셸 변수에 저장합니다.
    ipAddress=$(az vm list-ip-addresses --resource-group ContainerCompute --name quickvm --query '[].{ip:virtualMachine.network.publicIpAddresses[0].ipAddress}' --output tsv)
  1. 다음 스크립트를 사용해서 배쉬 셸 변수 ipAddress 의 값을 인쇄합니다:
    echo $ipAddress
  1. 다음 스크립트를 사용해서 이전에 랩에서 도구 및 배쉬 셸 변수안에 저장된 IP 주소 ipAdwdress 로 만든 VM 에 연결합니다.
    ssh student@$ipAddress
  1. 연결 프로세스중에 호스트의 진위를 확인할 수 없다는 경고를 받겠습니다. 호스트에 연결하는 것을 계속합니다. 마지막으로 자격 증명을 입력하라는 메세지가 표시되면 비밀번호 StudentPa55w.rd 를 입력해주세요.

  2. VM 에 연결되면 다음 명령을 사용해서 기계 정보를 관찰하고 올바른 VM 에 연결되어 있는지 확인합니다:

    uname -mnipo
    uname -srv
  1. Cloud Shell 페인을 닫습니다.

감토

이 연습에서 Azure Cloud Shell 을 사용하여 자동된 스크립트의 일부로 가상 기계를 만들었습니다.

연습 3: 도커 컨테이너 이미지를 만들고 Azure 컨테이너 레지스트리에 배치합니다.

작업 1: Cloud Shell 및 편집기 열기

  1. Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.

  2. 클라우드셸 명령 프롬프트안에서 액티브 디렉터리를 ~/clouddrive 로 변경합니다.

    참고: 배쉬에서 디렉터리를 변경하는 명령은 cd <path> 입니다.

  3. Cloud Shell 명령 프롬프트에서 ~/clouddrive 디렉터리 내에 ipcheck 라는 새 디렉터리를 만듭니다.

    참고: 리눅스에서 새 디렉토리를 만드는 명령은 mkdir \&디렉토리 이름> 입니다

  4. 액티브 디랙터리를 ~/clouddrive/ipcheck 로 변경합니다.

  5. dotnet new console –output 를 사용합니다. 기존 디랙터리에서 –name ipcheck 명령으로 .NET 코어 콘솔 응용 프로그램을 만듭니다.

  6. ~/clouddrive/ipcheck 디랙터리에서 Dockerfile 라는 새 파일을 만듭니다.

    참고: 배쉬에서 새 파일을 만드는 명령은 touch <file name> 입니다. Dockerfile 파일 이름이 대소문자를 구분합니다.

  7. 기존 디렉터리 컨텍스트에서 포함된 그래픽 편집기를 엽니다.

    참고: code . 명령을 사용하거나 편집기 버튼을 선택해서 편집기를 열릴 수 있습니다.

작업 2: .NET 코어 응용 프로그램 만들기 및 테스트

  1. 그래픽 편집기에서 Program.cs 파일을 열고 다음 코드로 내용을 바꿔서 파일을 저장합니다.
    public class Program
    {
        public static void Main(string[] args)
        {        
            if (System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable())
            {
                System.Console.WriteLine("Current IP Addresses:");
                string hostname = System.Net.Dns.GetHostName();
                System.Net.IPHostEntry host = System.Net.Dns.GetHostEntry(hostname);
                foreach(System.Net.IPAddress address in host.AddressList)
                {
                    System.Console.WriteLine($"\t{address}");
                }
            }
            else
            {
                System.Console.WriteLine("No Network Connection");
            }
        }
    }
  1. 명령 프롬프트에서 dotnet run 명령을 사용하여 응용 프로그램을 실행하고 하나 이상의 IP 주소를 찾는지 확인합니다.

  2. 그래픽 편집기에서 Dockerfile 파일을 열고 다음 코드로 내용을 바꿔서 파일을 저장 합니다.

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine AS build
    WORKDIR /app

    COPY *.csproj ./
    RUN dotnet restore

    COPY . ./
    RUN dotnet publish --configuration Release --output out

    FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine
    WORKDIR /app

    COPY --from=build /app/out .

    ENTRYPOINT ["dotnet", "ipcheck.dll"]
  1. Cloud Shell 페인을 닫습니다.

작업 3: Azure 컨테이너 레지스트리 리소스 만들기

  1. 다음 세부 정보를 통해서 새 컨테이너 레지스트리 를 만듭니다.

    • 이름: <Any globally unique name>

    • 리소스 그룹: 컨테이너계산

    • 위치: 미국 동부

    • 관리 사용자: 사용 금지

    • SKU: 기본

  2. 이 랩으로 이동하기 전에 만들기 태스크 완료될 때까지 기다립니다.

작업 4: Cloud Shell 을 열고 Azure 컨테이너 레지스트리 메타데이터를 저장합니다

  1. Cloud Shell 인스턴스를 엽니다.

  2. Cloud Shell 명령 프롬프트 내에서 az acr list 명령을 사용하여 구독의 모든 컨테이너 레지스트리 목록을 볼 수 있습니다.

  3. 다음 명령을 사용하여 가장 최근에 만든 컨테이너 레지스트리 의 이름을 출력합니다.

    az acr list --query "max_by([], &creationDate).name" --output tsv
  1. 배쉬 셸 변수 acrName 에서 가장 최근에 만든 컨테이너 레지스트리 의 이름을 저장하려면 다음 명령을 사용하십시오.
    acrName=$(az acr list --query "max_by([], &creationDate).name" --output tsv)
  1. 배쉬 셸 변수 acrName 의 값을 인쇄하려면 다음 스크립트를 사용하십시오.
    echo $acrName

작업 5: Azure 컨테이너 레지스트리에게 도커 컨테이너 이미지를 배치합니다.

  1. 액티브 디랙터리를 ~/clouddrive/ipcheck 로 변경합니다.

  2. dir 명령을 사용하여 기존 디렉터리 내용을 봅니다.

    참고: 이전에 랩에서 편집된 Program.csDockerfile 파일이 다 있는 경우 정확한 디렉터리에 있음을 알 수 있습니다.

  3. 다음 명령을 사용하여 컨테이너 레지스트리 에 소스 코드를 업로드하고 Azure 컨테이너 레지스트리 태스크 로 컨테이너 이미지를 빌드합니다.

    az acr build --registry $acrName --image ipcheck:latest .
  1. 이 랩을 진행하기 전에 빌드 태스크가 완료될 때까지 기다립니다.

  2. Cloud Shell 페인을 닫습니다.

작업 6: Azure 컨테이너 레지스트리에서 컨테이너 이미지를 검증합니다.

  1. 이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.

  2. 리포지토리 링크를 선택해서 저장된 이미지를 볼 수 있습니다.

  3. 이미지태그 블레이드를 진행하여 최신 태그로 ipcheck 이미지와 관련된 메타데이터를 확인합니다.

    참고: 실행 ID 하이퍼링크를 선택하여 빌드 태스크 메타데이터를 볼 수 있습니다.

검토

이 연습에서는 컴퓨터의 현재 IP 주소를 표시하는 .NET 코어 콘솔 응용 프로그램을 만들었습니다. 그 다음 도커 컨테이너 이미지로 변환하기 위하여 응용 프로그램에 도커 파일을 추가했습니다. 마지막으로 Azure 컨테이너 레지스트리에 컨테이너 이미지를 배치했습니다.

연습 4: Azure Container Instances를 배치합니다.

작업 1: Azure 컨테이너 레지스트리에서 관리자 사용자 사용

  1. 이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.

  2. 업데이트 버튼을 선택하여 컨테이너 레지스트리의 설정을 볼 수 있습니다.

  3. 관리 사용자활성화합니다.

    참고: 변경 내용이 자동으로 저장됩니다.

작업 2: Azure Container Instances에 컨테이너 이미지를 자동으로 배치합니다.

  1. 리포지토리 링크를 선택해서 저장된 이미지를 볼 수 있습니다.

  2. ipcheck 이미지를 선택하고 해당 이미지의 최신 태그를 봅니다.

  3. ipcheck 컨테이너 이미지에 최신 태그를 선택/오른쪽 클릭하여 다음 설정을 통해서 새 Azure 컨테이너인스턴스 를 배치합니다.

    • 컨테이너 이름: 관리계산

    • OS 유형: 리눅스

    • 리소스 그룹: 컨테이너계산

    • 위치: 미국 동부

    • 코어 수: 2

    • 메모리 (GB): 4

    • 공용 IP 주소: No

  4. 이 랩을 진행하기 전에 태스크 만들기가 완료될 때까지 기다립니다.

작업 3: Azure Container Instances에 컨테이너 이미지를 수동으로 배치합니다

  1. 이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.

  2. 액세스 키 링크를 선택해서 다른 서비스에서 컨테이너 레지스트리 엑세스가 필요한 작격 증명을 볼 수 있습니다. 이 섹션의 다음 값을 기록하여 이 랩의 후반부에서 사용할 수 있습니다.

    • 로그인 서버

    • 사용자 이름

    • 암호

    참고: 나중에 이 랩에서 다른 컨테이너 인스턴스를 만들 때 이러한 값을 사용하겠습니다.

  3. 이 랩에서 엑세스 키 자격 증명과 다음 세부 정보를 사용하여 새 컨테이너 인스턴스 를 만듭니다.

    • 컨테이너 이름: 수동 계산

    • 컨테이너 이미지 유형: 개인

    • 컨테이너 이미지: <Login server recorded earlier in the lab >/ipcheck:latest

    • 이미지 레지스트리 로그인 서버: <Login server recorded earlier in the lab>

    • 이미지 레지스트리 사용자 이름: <Username recorded earlier in the lab >

    • 이미지 레지스트리 비밀번호: <Password recorded earlier in the lab >

    • 리소스 그룹: 컨테이너계산

    • 위치: 미국 동부

    • OS 유형: 리눅스

    • 코어 수: 1

    • 메모리 (GB): 1.5

    • 공용 IP 주소: Yes

    • 포트: 80

    • 추가 포크 열기: No

    • 포트 프로토콜: TCP

    • 정책 다시 시작: 실패 시

  4. 이 랩을 진행하기 전에 만들기 태스크가 완료될 때까지 기다립니다.

작업 4: 컨테이너 인스턴스가 성공적으로 실행된지 확인합니다.

  1. 이전에 랩에서 만든 수동 계산 컨테이너 인스턴스에 접속합니다.

  2. 컨테이너 링크를 선택하여 현재 실행 중인 컨테이너 목록을 봅니다.

  3. ipcheck 응용 프로그램을 컨테이너 인스턴스에 실행해서 이벤트 목록 내용을 봅니다.

  4. 로그 탭을 선택하고 컨테이너 인스턴스에서 텍스트 로그를 확인합니다.

참고: 필요에 따라 managedcompute 컨테이너 인스턴스에서 이벤트로그를 볼 수도 있습니다.

복습

이 연습에서 다양한 메서드를 사용하여 컨테이너 이미지를 Azure Container Instances에 배치했습니다. 수동 메서드를 통해서 배치를 추가로 지정도 가능하고 컨테이너 실행의 일부로 작업형 응용 프로그램을 실행도 가능합니다.

연습 5: 구독 정리

작업 1: Cloud Shell 열기 및 리소스 그룹 나열하기

  1. Azure portal 상단에서 Cloud Shell 아이콘을 선택하여 새 셸 인스턴스를 엽니다.

  2. 포털 하단에 Cloud Shell 명령 프롬프트에서 다음 명령을 입력하고 Enter 를 눌러 구독에 모든 리소스 그룹을 나열합니다.

    az group list
3.  다음 명령을 입력하고 Enter 를 눌러 리소스 그룹을 삭제할 수 있는 명령 목록을 봅니다.
    az group delete --help

작업 2: 리소스 그룹 삭제

  1. 다음 명령을 입력하고 Enter 를 눌러 컨테이너컴퓨팅 리소스 그룹을 삭제합니다.
    az group delete --name ContainerCompute --no-wait --yes
  1. 포털 하단의 Cloud Shell 페인을 닫습니다.

작업 3: 액티브 응용 프로그램 닫기

  1. 현재 실행 중인 Microsoft Edge 응용 프로그램을 닫습니다.

검토

이 연습에서 렙에서 사용된 리소스 그룹을 제거하여 구독을 정리했습니다.