빠른 시작: Azure CLI를 사용하여 프라이빗 컨테이너 레지스트리 만들기

Azure Container Registry는 컨테이너 이미지 및 관련 아티팩트를 빌드, 저장 및 관리하기 위한 프라이빗 레지스트리 서비스입니다. 이 빠른 시작에서는 Azure CLI를 사용하여 Azure Container Registry 인스턴스를 만들었습니다. 그런 다음, Docker 명령을 사용하여 컨테이너 이미지를 레지스트리로 푸시하고, 마지막으로 레지스트리에서 이미지를 끌어와서 실행합니다.

이 빠른 시작을 수행하려면 Azure CLI를 실행해야 합니다(버전 2.0.55 이상 권장). az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

또한 Docker가 로컬에 설치되어 있어야 합니다. Docker는 모든 macOS, Windows 또는 Linux 시스템에서 Docker를 쉽게 구성할 수 있는 패키지를 제공합니다.

Azure Cloud Shell에는 필요한 Docker 구성 요소(dockerd 데몬) 중 일부가 없기 때문에 이 빠른 시작에 Cloud Shell을 사용할 수 없습니다.

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. Azure 리소스 그룹은 Azure 리소스가 배포 및 관리되는 논리적 컨테이너입니다.

다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

az group create --name myResourceGroup --location eastus

컨테이너 레지스트리 만들기

이 빠른 시작에서는 Azure Container Registry에 대해 배우기 시작하는 개발자를 위해 비용 최적화된 옵션인 기본 레지스트리를 만듭니다. 사용 가능한 서비스 계층에 대한 자세한 내용은 컨테이너 레지스트리 서비스 계층을 참조하세요.

az acr create 명령을 사용하여 ACR 인스턴스를 만듭니다. 레지스트리 이름은 Azure 내에서 고유해야 하며, 5~50자의 소문자 영숫자를 포함해야 합니다. 다음 예제에서는 myContainerRegistry가 사용됩니다. 이를 고유한 값으로 업데이트합니다.

az acr create --resource-group myResourceGroup \
  --name mycontainerregistry --sku Basic

레지스트리를 만들면 출력은 다음과 비슷합니다.

{
  "adminUserEnabled": false,
  "creationDate": "2019-01-08T22:32:13.175925+00:00",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
  "location": "eastus",
  "loginServer": "mycontainerregistry.azurecr.io",
  "name": "mycontainerregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Basic",
    "tier": "Basic"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries"
}

정규화된 레지스트리 이름(모두 소문자)인 출력의 loginServer를 기록해 둡니다. 이 빠른 시작의 나머지 부분에서 <registry-name>은 컨테이너 레지스트리 이름의 자리 표시자이고 <login-server>는 레지스트리의 로그인 서버 이름에 대한 자리 표시자입니다.

이 빠른 시작에서는 Azure Container Registry에 대해 배우기 시작하는 개발자를 위해 비용 최적화된 옵션인 기본 레지스트리를 만듭니다. 스토리지 및 이미지 처리량을 늘리려면 다른 계층을 선택하고 프라이빗 엔드포인트를 사용한 연결과 같은 기능을 선택합니다. 사용 가능한 서비스 계층(SKU)에 대한 자세한 내용은 컨테이너 레지스트리 서비스 계층을 참조하세요.

레지스트리에 로그인

컨테이너 이미지를 푸시하고 끌어오려면 레지스트리에 로그인해야 합니다. 이렇게 하려면 az acr login 명령을 사용합니다. Azure CLI를 사용하여 로그인할 때 레지스트리 리소스 이름만 지정합니다. 정규화된 로그인 서버 이름을 사용하지 마세요.

az acr login --name <registry-name>

예시:

az acr login --name mycontainerregistry

완료되면 이 명령은 Login Succeeded 메시지를 반환합니다.

레지스트리에 이미지 푸시

Azure Container Registry에 이미지를 푸시하려면 먼저 이미지가 있어야 합니다. 로컬 컨테이너 이미지가 아직 없는 경우 다음 docker pull 명령을 실행하여 기존 퍼블릭 이미지를 끌어옵니다. 이 예제에서는 Microsoft Container Registry에서 hello-world 이미지를 끌어옵니다.

docker pull mcr.microsoft.com/hello-world

레지스트리에 이미지를 푸시하기 전에 레지스트리 로그인 서버의 정규화된 이름을 사용하여 태그를 지정해야 합니다. 로그인 서버 이름은 <registry-name>.azurecr.io(모두 소문자여야 함) 형식입니다(예: mycontainerregistry.azurecr.io).

docker tag 명령을 사용하여 이미지에 태그를 지정합니다. <login-server>를 ACR 인스턴스의 로그인 서버 이름으로 바꿉니다.

docker tag mcr.microsoft.com/hello-world <login-server>/hello-world:v1

예시:

docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1

마지막으로 docker push를 사용하여 레지스트리 인스턴스로 이미지를 푸시합니다. <login-server>를 레지스트리 인스턴스의 로그인 서버 이름으로 바꿉니다. 이 예제에서는 hello-world:v1 이미지를 포함하는 hello-world 리포지토리를 만듭니다.

docker push <login-server>/hello-world:v1

이미지를 컨테이너 레지스트리에 푸시한 후에는 로컬 Docker 환경에서 hello-world:v1 이미지를 제거합니다. (이 docker rmi 명령은 Azure 컨테이너 레지스트리의 hello-world 리포지토리에서 이미지를 제거하지 않습니다.)

docker rmi <login-server>/hello-world:v1

컨테이너 이미지 나열

다음 예제에서는 레지스트리의 리포지토리를 나열합니다.

az acr repository list --name <registry-name> --output table

출력

Result
----------------
hello-world

다음 예제는 hello-world 리포지토리의 태그를 나열합니다.

az acr repository show-tags --name <registry-name> --repository hello-world --output table

출력

Result
--------
v1

레지스트리에서 이미지 실행

이제 docker run을 사용하여 컨테이너 레지스트리에서 hello-world:v1 컨테이너 이미지를 끌어와서 실행할 수 있습니다.

docker run <login-server>/hello-world:v1  

예제 출력:

Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1

Hello from Docker!
This message shows that your installation appears to be working correctly.

[...]

리소스 정리

더 이상 필요 없으면 az group delete 명령을 사용하여 리소스 그룹, 컨테이너 레지스트리 및 저장된 컨테이너 이미지를 제거할 수 있습니다.

az group delete --name myResourceGroup

다음 단계

이 빠른 시작에서는 Azure CLI를 사용하여 Azure Container Registry를 만들고, 컨테이너 이미지를 레지스트리로 푸시하고, 레지스트리에서 이미지를 끌어와서 실행했습니다. Azure Container Registry 자습서를 계속 진행하여 ACR에 대해 자세히 알아보세요.