다음을 통해 공유


빠른 시작: Azure Portal을 사용하여 Azure Container Registry 만들기

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

레지스트리에 로그인하여 컨테이너 이미지를 사용할 수 있도록 이 빠른 시작에서는 Azure CLI(버전 2.0.55 이상 권장)를 실행해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

또한 디먼이 실행되는 상태에서 Docker가 로컬로 설치되어 있어야 합니다. Docker는 모든 Mac, Windows 또는 Linux 시스템에서 쉽게 Docker를 구성하는 패키지를 제공합니다.

Azure에 로그인

Azure Portal에 로그인합니다.

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

리소스 만들기>컨테이너>컨테이너 레지스트리를 선택합니다.

포털의 컨테이너 레지스트리로 이동

컨테이너 레지스트리 이름 및 SKU 구성

기본 탭에서 리소스 그룹레지스트리 이름에 대한 값을 입력합니다. 레지스트리 이름은 Azure 내에서 고유해야 하며 레지스트리 이름에 대시 문자(-)가 허용되지 않는 5-50자의 영숫자를 포함해야 합니다. 이 빠른 시작에서는 이름이 지정된 myResourceGroup위치에 새 리소스 그룹을 West US 2 만들고 SKU에 대해 선택합니다Standard.

포털에서 컨테이너 레지스트리 만들기

다양한 SKU 옵션에 대한 자세한 내용은 Azure Container Registry SKU를 참조하세요.

DNL(도메인 이름 레이블) 옵션 구성

DNL(도메인 이름 레이블) 기능은 레지스트리 DNS 이름의 하위 도메인 인수 공격을 방지하여 보안을 강화합니다. 이러한 공격은 레지스트리가 삭제되고 다른 엔터티가 동일한 레지스트리 이름을 다시 사용할 때 발생하며, 이로 인해 다른 엔터티에서 다시 만든 레지스트리에서 다운스트림 참조를 끌어올 수 있습니다.

DNL은 레지스트리의 DNS 이름에 고유한 해시를 추가하여 이 주소를 해결합니다. 이렇게 하면 동일한 레지스트리 이름이 다른 엔터티에서 다시 사용되더라도 고유한 해시로 인해 DNS 이름이 달라집니다. 이렇게 하면 다른 엔터티에서 다시 만든 레지스트리를 실수로 가리키지 않도록 다운스트림 참조를 보호합니다.

포털에서 레지스트리를 만들 때 사용 가능한 옵션에서 도메인 이름 레이블 범위를 선택합니다.

  • 안전하지 않음: 레지스트리 이름(예: contosoacrregistry.azurecr.io)을 기반으로 as-isDNS 이름을 만듭니다. 이 옵션에는 DNL 보호가 포함되지 않습니다.
  • 테넌트 재사용: 테넌트 및 레지스트리 이름을 기반으로 고유한 해시를 추가하여 DNS 이름이 테넌트 내에서 고유하도록 합니다.
  • 구독 재사용: 구독, 테넌트 및 레지스트리 이름을 기반으로 고유한 해시를 추가하여 DNS 이름이 구독 내에서 고유하도록 합니다.
  • 리소스 그룹 재사용: 리소스 그룹, 구독, 테넌트 및 레지스트리 이름을 기반으로 고유한 해시를 추가하여 리소스 그룹 내에서 DNS 이름이 고유하도록 합니다.
  • 재사용 안 함: 다른 요인에 관계없이 레지스트리를 만들 때마다 고유한 해시를 사용하여 고유한 DNS 이름을 생성하여 DNS 이름이 항상 고유하도록 합니다.

비고

변경할 수 없는 구성: 레지스트리를 만드는 동안 선택한 DNL 범위는 영구적이며 나중에 수정할 수 없습니다. 이렇게 하면 일관된 DNS 동작이 보장되고 다운스트림 참조가 중단되지 않습니다.

도메인 이름 레이블 구성 옵션

DNL 옵션의 DNS 이름 영향

DNS 이름 형식: 보안 해제를 제외한 모든 DNL 사용 옵션의 경우 DNS 이름은 대시(-)가 해시 설명자로 사용되는 형식registryname-hash.azurecr.io을 따릅니다. 충돌을 방지하기 위해 레지스트리 이름에 대시(-)가 허용되지 않습니다. 예를 들어 DNL 범위로 Tenant Reuse 명명된 contosoacrregistry 레지스트리에는 다음과 같은 contosoacrregistry-e7ggejfuhzhgedc8.azurecr.ioDNS 이름이 있습니다.

다운스트림 참조: DNS 이름이 레지스트리 이름과 다를 수 있으므로 Dockerfiles, Kubernetes YAML 및 Helm 차트와 같은 다운스트림 파일의 업데이트가 DNL 해시와 함께 전체 DNS 이름을 반영해야 합니다. 예를 들어, 다운스트림 Dockerfile에서 DNL 범위인 Tenant Reuse 레지스트리를 contosoacrregistry로 참조하려면, 해당 Dockerfile에서 contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io에 대한 참조를 업데이트해야 합니다.

도메인 이름 레이블 옵션 및 DNS 이름을 검토하는 스크린샷

역할 할당 권한 모드 구성

새 레지스트리의 "역할 할당 권한 모드"를 구성합니다. 이 옵션은 Microsoft Entra 리포지토리 권한에 대한 MICROSOFT Entra ABAC(특성 기반 액세스 제어) 사용을 포함하여 레지스트리에 대해 Microsoft Entra RBAC(역할 기반 액세스 제어) 및 역할 할당을 관리하는 방법을 결정합니다.

표준 Microsoft Entra RBAC 역할 할당을 유지하려면 "RBAC 레지스트리 + ABAC 리포지토리 권한"을 선택하고 필요에 따라 세분화된 리포지토리 수준 액세스 제어를 위해 Microsoft Entra ABAC 조건을 적용합니다.

역할 할당 권한 모드 구성 스크린샷

이 옵션에 대한 자세한 내용은 리포지토리 권한에 대한 Microsoft Entra ABAC(특성 기반 액세스 제어)를 참조하세요.

컨테이너 레지스트리 배포

나머지 설정에 기본값을 적용합니다. 그런 다음, 검토 + 생성를 선택합니다. 설정을 검토한 후 만들기를 선택합니다.

이 빠른 시작에서는 대부분의 Azure Container Registry 워크플로에 충분한 표준 레지스트리를 만듭니다. 스토리지 및 이미지 처리량을 늘리려면 다른 계층을 선택하고 프라이빗 엔드포인트를 사용한 연결과 같은 기능을 선택합니다. 사용 가능한 서비스 계층(SKU)에 대한 자세한 내용은 컨테이너 레지스트리 서비스 계층을 참조하세요.

배포 성공 메시지가 표시되면 포털에서 컨테이너 레지스트리를 선택합니다.

포털의 컨테이너 레지스트리 개요

레지스트리 이름 및 로그인 서버 값(Azure 클라우드에서 azurecr.io로 끝나는 정규화된 이름)을 기록해 둡니다. DNL 옵션을 선택한 경우 로그인 서버 이름에 고유한 해시가 포함됩니다.

다음 단계에서 Docker로 이미지를 푸시하고 풀 때, 그리고 Dockerfiles, Kubernetes YAML 및 Helm 차트와 같은 다운스트림 참조에서 로그인 서버를 사용하세요.

레지스트리에 로그인

컨테이너 이미지를 푸시하고 끌어오려면 레지스트리 인스턴스에 로그인해야 합니다. 로컬 머신에서 Azure CLI에 로그인한 다음, az acr login 명령을 실행합니다.

Azure CLI를 사용하여 로그인할 때 레지스트리 리소스 이름만 지정합니다(예: az acr login -n registryname.). 정규화된 로그인 서버 이름을 사용하지 마세요(registryname.azurecr.io 또는 registryname-hash.azurecr.io처럼 DNL 사용 레지스트리의 경우).

az acr login --name <registry-name>

예시:

az acr login --name contosoacrregistry

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

레지스트리에 이미지 푸시

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

docker pull mcr.microsoft.com/hello-world

레지스트리에 이미지를 푸시하려면 먼저 레지스트리 로그인 서버의 정규화된 이름과 함께 docker 태그 를 사용하여 태그를 지정해야 합니다.

  • 고유한 DNS 이름 해시가 포함된 DNL(도메인 이름 레이블) 보호 레지스트리의 로그인 서버 이름 형식은 다음과 같습니다 mycontainerregistry-abc123.azurecr.io.
  • DNL 옵션을 사용하여 만든 레지스트리의 Unsecure 로그인 서버 이름 형식은 다음과 같습니다 mycontainerregistry.azurecr.io.

예를 들어 레지스트리가 DNL 범위로 Tenant Reuse 만들어진 경우 로그인 서버는 DNS 이름에 해시가 있는 것처럼 mycontainerregistry-abc123.azurecr.io 보일 수 있습니다. DNL 옵션을 사용하여 레지스트리를 Unsecure 만든 경우 로그인 서버는 해시 없이 mycontainerregistry.azurecr.io와 같이 보일 것입니다.

레지스트리를 만드는 동안 DNL 옵션 및 DNS 이름에 미치는 영향에 대한 자세한 내용은 빠른 시작 - 포털에서 레지스트리 만들기를 참조하세요.

예: 푸시 전에 이미지 태그 지정

레지스트리의 로그인 서버를 사용하여 docker 태그 명령을 사용하여 이미지에 태그를 지정합니다.

비 DNL 레지스트리에 대한 이미지 태그 지정:

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

DNL 사용 레지스트리에 대한 이미지 태그 지정:

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

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

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

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

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

컨테이너 이미지 나열

레지스트리의 이미지를 나열하려면 포털에서 레지스트리로 이동하여 리포지토리를 선택한 다음, 를 사용하여 만든 docker push 리포지토리를 선택합니다.

포털에 컨테이너 이미지 나열

hello-world 리포지토리를 선택하면 v1 아래에 태그가 지정된 이미지가 표시됩니다.

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

이제 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.

[...]

리소스 정리

리소스를 정리하려면 포털에서 myResourceGroup 리소스 그룹으로 이동합니다. 리소스 그룹이 로드되면 리소스 그룹 삭제를 클릭하여 리소스 그룹, 컨테이너 레지스트리 및 저장된 컨테이너 이미지를 제거합니다.

포털에서 리소스 그룹 삭제

다음 단계

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