랩: 이미지 및 컨테이너를 사용하여 컴퓨팅 워크로드를 배치합니다.
학생 랩 매뉴얼
랩 시나리오
조직에서 작업을 실행하고 즉시 종료할 수 있는 가상 기계(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 열기
-
Azure portal 에 로그인합니다.(https://portal.azure.com).
-
Azure portal 에 처음 로그인하는 경우에 다이얼로그 박스가 나타나고 포털 투어가 시작하겠습니다. 시작 하기 버튼을 선택하여 투어를 건너뜁니다.
작업 2: 리소스 그룹 만들기
-
다음 세부 정보를 통해서 새로운 리소스 그룹 을 만듭니다.
-
이름: 컨테이너계산
-
위치: 미국 동부
-
-
이 랩을 진행하기 전에 만들기 태스크 완료될 때까지 기다립니다.
작업 3: Linux 가상 기계 리소스 만들기
-
다음 세부 정보를 통해서 새로운 가상 기계 를 만듭니다.
-
운영 체제: 우분투 서버 18.04 LTS
-
이름: simplevm
-
디스크 유형: SSD
-
사용자 이름: 학생
-
비밀번호: StudentPa55w.rd
-
리소스 그룹: 컨테이너계산
-
위치: 미국 동부
-
사이즈: 표준 B1s
-
공용 인바운드 포트: SSH(22)
-
-
이 랩을 진행하기 전에 태스크 만들기가 완료될 때까지 기다립니다.
작업 4: 가상 기계 검증
-
이전에 랩에서 만든 simplevm VM 에 접속합니다.
-
가상 기계 연결 팝업을 엽니다.
-
포트 22 및 공용 IP 주소 를 사용하여 SSH 명령 을 복사해서 VM 에게 연결합니다. 나중에 이 랩에서 이 명령을 사용할 겁니다.
-
Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.
-
클라우드셸 이 아직 구성되지 않은 경우 기본 설정을 사용하여 배쉬에 쉘을 구성합니다.
-
클라우드셸 명령 프롬프트 안에서 이 랩에서 복사된 SSH 명령 을 사용하여 SSH 로 VM 에 연결합니다.
-
연결 프로세스중에 호스트의 진위를 확인할 수 없다는 경고를 받겠습니다. 호스트에 연결하는 것을 계속합니다. 마지막으로 자격 증명을 입력하라는 메세지가 표시되면 비밀번호 StudentPa55w.rd 를 입력해주세요.
-
VM 에 연결되면 다음 명령을 사용해서 기계 정보를 봅니다:
uname -mnipo
uname -srv
- Cloud Shell 페인을 닫습니다.
검토
이 연습에서 Azure portal 인터페이스를 사용하여 새 VM 을 수동으로 만들었고 Cloud Shell 및 시큐어 셸(SSH)을 연결했습니다.
연습 2: Azure CLI 를 사용하여 가상 시스템 만들기
작업 1: Cloud Shell 을 열기
- Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.
작업 2: Azure CLI 명령 사용
-
CLI 의 루트 레벨에서 하위 그룹 목록 및 명령을 보려면 지정된 –help 플래그와 함께 az 명령을 사용하십시오.
-
하위 그룹 목록 및 가상 기계 명령을 보려면 az vm 명령을 지정된 –help 플래그와 함께 사용하십시오.
-
인수 목록 및 가상 기계 만들기 명령 예시를 보려면 az vm create 명령을 지정된 –help 플래그와 함께 사용하십시오.
-
az vm create 명령을 사용하여 다음 설정을 따라서 새 가상 기계 를 만듭니다.
-
리소스 그룹: 컨테이너계산
-
이름: quickvm
-
이미지: 데비안
-
사용자 이름: 학생
-
비밀번호: StudentPa55w.rd
-
-
VM 만들기 프로세스가 완료될 때까지 기다립니다. 프로세스가 완료된면 명령이 기계의 세부 정보가 포함된 JSON 파일을 반환합니다.
-
새로운 마든 VM 의 다양한 메타데이터가 포함된 더 상세한 JSON 파일을 보려면 vm show 명령을 사용하십시오.
-
az vm list-ip-addresses 명령을 사용하여 VM과 관련된 모든 IP 주소를 나열합니다.
az vm list-ip-addresses --resource-group ContainerCompute --name quickvm
- 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
- 다음 스크립트를 사용해서 이전의 명령 결과를 ipAddress 라는 새 배쉬 셸 변수에 저장합니다.
ipAddress=$(az vm list-ip-addresses --resource-group ContainerCompute --name quickvm --query '[].{ip:virtualMachine.network.publicIpAddresses[0].ipAddress}' --output tsv)
- 다음 스크립트를 사용해서 배쉬 셸 변수 ipAddress 의 값을 인쇄합니다:
echo $ipAddress
- 다음 스크립트를 사용해서 이전에 랩에서 도구 및 배쉬 셸 변수안에 저장된 IP 주소 ipAdwdress 로 만든 VM 에 연결합니다.
ssh student@$ipAddress
-
연결 프로세스중에 호스트의 진위를 확인할 수 없다는 경고를 받겠습니다. 호스트에 연결하는 것을 계속합니다. 마지막으로 자격 증명을 입력하라는 메세지가 표시되면 비밀번호 StudentPa55w.rd 를 입력해주세요.
-
VM 에 연결되면 다음 명령을 사용해서 기계 정보를 관찰하고 올바른 VM 에 연결되어 있는지 확인합니다:
uname -mnipo
uname -srv
- Cloud Shell 페인을 닫습니다.
감토
이 연습에서 Azure Cloud Shell 을 사용하여 자동된 스크립트의 일부로 가상 기계를 만들었습니다.
연습 3: 도커 컨테이너 이미지를 만들고 Azure 컨테이너 레지스트리에 배치합니다.
작업 1: Cloud Shell 및 편집기 열기
-
Azure portal 에서 새 Cloud Shell 인스턴스를 엽니다.
-
클라우드셸 명령 프롬프트안에서 액티브 디렉터리를 ~/clouddrive 로 변경합니다.
참고: 배쉬에서 디렉터리를 변경하는 명령은 cd <path> 입니다.
-
Cloud Shell 명령 프롬프트에서 ~/clouddrive 디렉터리 내에 ipcheck 라는 새 디렉터리를 만듭니다.
참고: 리눅스에서 새 디렉토리를 만드는 명령은 mkdir \&디렉토리 이름> 입니다
-
액티브 디랙터리를 ~/clouddrive/ipcheck 로 변경합니다.
-
dotnet new console –output 를 사용합니다. 기존 디랙터리에서 –name ipcheck 명령으로 .NET 코어 콘솔 응용 프로그램을 만듭니다.
-
~/clouddrive/ipcheck 디랙터리에서 Dockerfile 라는 새 파일을 만듭니다.
참고: 배쉬에서 새 파일을 만드는 명령은 touch <file name> 입니다. Dockerfile 파일 이름이 대소문자를 구분합니다.
-
기존 디렉터리 컨텍스트에서 포함된 그래픽 편집기를 엽니다.
참고: code . 명령을 사용하거나 편집기 버튼을 선택해서 편집기를 열릴 수 있습니다.
작업 2: .NET 코어 응용 프로그램 만들기 및 테스트
- 그래픽 편집기에서 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");
}
}
}
-
명령 프롬프트에서 dotnet run 명령을 사용하여 응용 프로그램을 실행하고 하나 이상의 IP 주소를 찾는지 확인합니다.
-
그래픽 편집기에서 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"]
- Cloud Shell 페인을 닫습니다.
작업 3: Azure 컨테이너 레지스트리 리소스 만들기
-
다음 세부 정보를 통해서 새 컨테이너 레지스트리 를 만듭니다.
-
이름: <Any globally unique name>
-
리소스 그룹: 컨테이너계산
-
위치: 미국 동부
-
관리 사용자: 사용 금지
-
SKU: 기본
-
-
이 랩으로 이동하기 전에 만들기 태스크 완료될 때까지 기다립니다.
작업 4: Cloud Shell 을 열고 Azure 컨테이너 레지스트리 메타데이터를 저장합니다
-
새 Cloud Shell 인스턴스를 엽니다.
-
Cloud Shell 명령 프롬프트 내에서 az acr list 명령을 사용하여 구독의 모든 컨테이너 레지스트리 목록을 볼 수 있습니다.
-
다음 명령을 사용하여 가장 최근에 만든 컨테이너 레지스트리 의 이름을 출력합니다.
az acr list --query "max_by([], &creationDate).name" --output tsv
- 배쉬 셸 변수 acrName 에서 가장 최근에 만든 컨테이너 레지스트리 의 이름을 저장하려면 다음 명령을 사용하십시오.
acrName=$(az acr list --query "max_by([], &creationDate).name" --output tsv)
- 배쉬 셸 변수 acrName 의 값을 인쇄하려면 다음 스크립트를 사용하십시오.
echo $acrName
작업 5: Azure 컨테이너 레지스트리에게 도커 컨테이너 이미지를 배치합니다.
-
액티브 디랙터리를 ~/clouddrive/ipcheck 로 변경합니다.
-
dir 명령을 사용하여 기존 디렉터리 내용을 봅니다.
참고: 이전에 랩에서 편집된 Program.cs 및 Dockerfile 파일이 다 있는 경우 정확한 디렉터리에 있음을 알 수 있습니다.
-
다음 명령을 사용하여 컨테이너 레지스트리 에 소스 코드를 업로드하고 Azure 컨테이너 레지스트리 태스크 로 컨테이너 이미지를 빌드합니다.
az acr build --registry $acrName --image ipcheck:latest .
-
이 랩을 진행하기 전에 빌드 태스크가 완료될 때까지 기다립니다.
-
Cloud Shell 페인을 닫습니다.
작업 6: Azure 컨테이너 레지스트리에서 컨테이너 이미지를 검증합니다.
-
이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.
-
리포지토리 링크를 선택해서 저장된 이미지를 볼 수 있습니다.
-
이미지 및 태그 블레이드를 진행하여 최신 태그로 ipcheck 이미지와 관련된 메타데이터를 확인합니다.
참고: 실행 ID 하이퍼링크를 선택하여 빌드 태스크 메타데이터를 볼 수 있습니다.
검토
이 연습에서는 컴퓨터의 현재 IP 주소를 표시하는 .NET 코어 콘솔 응용 프로그램을 만들었습니다. 그 다음 도커 컨테이너 이미지로 변환하기 위하여 응용 프로그램에 도커 파일을 추가했습니다. 마지막으로 Azure 컨테이너 레지스트리에 컨테이너 이미지를 배치했습니다.
연습 4: Azure Container Instances를 배치합니다.
작업 1: Azure 컨테이너 레지스트리에서 관리자 사용자 사용
-
이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.
-
업데이트 버튼을 선택하여 컨테이너 레지스트리의 설정을 볼 수 있습니다.
-
관리 사용자를 활성화합니다.
참고: 변경 내용이 자동으로 저장됩니다.
작업 2: Azure Container Instances에 컨테이너 이미지를 자동으로 배치합니다.
-
리포지토리 링크를 선택해서 저장된 이미지를 볼 수 있습니다.
-
ipcheck 이미지를 선택하고 해당 이미지의 최신 태그를 봅니다.
-
ipcheck 컨테이너 이미지에 최신 태그를 선택/오른쪽 클릭하여 다음 설정을 통해서 새 Azure 컨테이너인스턴스 를 배치합니다.
-
컨테이너 이름: 관리계산
-
OS 유형: 리눅스
-
리소스 그룹: 컨테이너계산
-
위치: 미국 동부
-
코어 수: 2
-
메모리 (GB): 4
-
공용 IP 주소: No
-
-
이 랩을 진행하기 전에 태스크 만들기가 완료될 때까지 기다립니다.
작업 3: Azure Container Instances에 컨테이너 이미지를 수동으로 배치합니다
-
이전에 랩에서 만든 컨테이너 레지스트리에 접속합니다.
-
액세스 키 링크를 선택해서 다른 서비스에서 컨테이너 레지스트리 엑세스가 필요한 작격 증명을 볼 수 있습니다. 이 섹션의 다음 값을 기록하여 이 랩의 후반부에서 사용할 수 있습니다.
-
로그인 서버
-
사용자 이름
-
암호
참고: 나중에 이 랩에서 다른 컨테이너 인스턴스를 만들 때 이러한 값을 사용하겠습니다.
-
-
이 랩에서 엑세스 키 자격 증명과 다음 세부 정보를 사용하여 새 컨테이너 인스턴스 를 만듭니다.
-
컨테이너 이름: 수동 계산
-
컨테이너 이미지 유형: 개인
-
컨테이너 이미지: <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: 컨테이너 인스턴스가 성공적으로 실행된지 확인합니다.
-
이전에 랩에서 만든 수동 계산 컨테이너 인스턴스에 접속합니다.
-
컨테이너 링크를 선택하여 현재 실행 중인 컨테이너 목록을 봅니다.
-
ipcheck 응용 프로그램을 컨테이너 인스턴스에 실행해서 이벤트 목록 내용을 봅니다.
-
로그 탭을 선택하고 컨테이너 인스턴스에서 텍스트 로그를 확인합니다.
참고: 필요에 따라 managedcompute 컨테이너 인스턴스에서 이벤트 및 로그를 볼 수도 있습니다.
복습
이 연습에서 다양한 메서드를 사용하여 컨테이너 이미지를 Azure Container Instances에 배치했습니다. 수동 메서드를 통해서 배치를 추가로 지정도 가능하고 컨테이너 실행의 일부로 작업형 응용 프로그램을 실행도 가능합니다.
연습 5: 구독 정리
작업 1: Cloud Shell 열기 및 리소스 그룹 나열하기
-
Azure portal 상단에서 Cloud Shell 아이콘을 선택하여 새 셸 인스턴스를 엽니다.
-
포털 하단에 Cloud Shell 명령 프롬프트에서 다음 명령을 입력하고 Enter 를 눌러 구독에 모든 리소스 그룹을 나열합니다.
az group list
3. 다음 명령을 입력하고 Enter 를 눌러 리소스 그룹을 삭제할 수 있는 명령 목록을 봅니다.
az group delete --help
작업 2: 리소스 그룹 삭제
- 다음 명령을 입력하고 Enter 를 눌러 컨테이너컴퓨팅 리소스 그룹을 삭제합니다.
az group delete --name ContainerCompute --no-wait --yes
- 포털 하단의 Cloud Shell 페인을 닫습니다.
작업 3: 액티브 응용 프로그램 닫기
- 현재 실행 중인 Microsoft Edge 응용 프로그램을 닫습니다.
검토
이 연습에서 렙에서 사용된 리소스 그룹을 제거하여 구독을 정리했습니다.