컨테이너 이미지를 컨테이너 레지스트리로 가져오기

Docker 명령을 사용하지 않고 컨테이너 이미지를 Azure Container Registry로 쉽게 가져올(복사) 수 있습니다. 예를 들어 개발 레지스트리에서 프로덕션 레지스트리로 이미지를 가져오거나 공개 레지스트리에서 기본 이미지를 복사합니다.

Azure Container Registry는 기존 레지스트리에서 이미지 및 기타 아티팩트를 복사하는 많은 일반적인 시나리오를 처리합니다.

  • 퍼블릭 레지스트리에서 이미지 가져오기

  • 같거나 다른 Azure 구독 또는 테넌트의 다른 Azure Container Registry에서 Helm 3 차트를 비롯한 이미지나 OCI 아티팩트 가져오기

  • 비 Azure 프라이빗 컨테이너 레지스트리에서 가져오기

Docker CLI 명령을 사용하는 대신 Azure Container Registry로 이미지를 가져오는 경우 다음과 같은 이점이 있습니다.

  • 클라이언트 환경에는 로컬 Docker 설치가 필요하지 않으므로 지원되는 OS 유형과 관계없이 컨테이너 이미지를 가져옵니다.

  • 다중 아키텍처 이미지(예: 공식 Docker 이미지)를 가져오는 경우 매니페스트 목록에 지정된 모든 아키텍처 및 플랫폼의 이미지가 복사됩니다.

  • 대상 레지스트리에 액세스하기 위해 레지스트리의 퍼블릭 엔드포인트를 사용할 필요가 없습니다.

Important

  • 이미지를 가져오려면 외부 레지스트리 지원 RFC 7233이 필요합니다. 오류를 방지하려면 레지스트리 URI와 함께 az acr import 명령을 사용하는 동안 RFC 7233 범위를 지원하는 레지스트리를 사용하는 것이 좋습니다.

제한 사항

  • 가져온 이미지의 최대 매니페스트 수는 50개입니다.
  • 퍼블릭 레지스트리에서 가져온 이미지의 최대 계층 크기는 2GiB입니다.

컨테이너 이미지를 가져오기 위해 이 문서에서는 Azure Cloud Shell이나 로컬로 Azure CLI를 실행하도록 요구합니다(버전 2.0.55 이상 권장). az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

참고 항목

여러 Azure 지역에 동일한 컨테이너 이미지를 분산해야 하는 경우 Azure Container Registry에서 지역 복제도 지원합니다. 레지스트리를 지역 복제하면(프리미엄 서비스 계층 필요), 단일 레지스트리의 동일한 이미지와 태그 이름으로 여러 지역에 서비스를 제공할 수 있습니다.

Important

두 Azure Container Registry 간의 이미지 가져오기에 대한 변경 내용은 2021년 1월에 도입되었습니다.

  • 네트워크 제한 Azure Container Registry에서 또는 해당 레지스트리로 가져오려면 신뢰할 수 있는 서비스에 의한 액세스를 허용하여 네트워크를 우회하기 위해 제한된 레지스트리가 필요합니다. 기본적으로 이 설정은 사용하도록 설정되어 있으므로 가져오기를 허용합니다. 프라이빗 엔드포인트를 사용하거나 레지스트리 방화벽 규칙을 사용하여 새로 만든 레지스트리에서 해당 설정을 사용하도록 설정하지 않은 경우 가져오기가 실패합니다.
  • 가져오기 원본 또는 대상으로 사용되는 기존 네트워크 제한 Azure Container Registry에서 이 네트워크 보안 기능을 사용하도록 설정하는 것은 선택 사항이지만 설정하는 것이 좋습니다.

필수 조건

Azure Container Registry가 아직 없는 경우 레지스트리를 만듭니다. 단계는 빠른 시작: Azure CLI를 사용하여 프라이빗 컨테이너 레지스트리 만들기를 참조하세요.

이미지를 Azure Container Registry로 가져오려면 ID에 대상 레지스트리에 대한 쓰기 권한이 있어야 합니다(적어도 Contributor 역할이나 importImage 작업을 허용하는 사용자 지정 역할). Azure Container Registry 역할 및 권한을 참조하세요.

공개 레지스트리에서 가져오기

Important

퍼블릭 레지스트리에서 네트워크 제한 Azure컨테이너 레지스트리로 가져오려면 네트워크를 우회하기 위해 신뢰할 수 있는 서비스의 액세스를 허용하는 제한된 레지스트리가 필요합니다. 기본적으로 이 설정은 사용하도록 설정되므로 가져오기가 허용됩니다. 프라이빗 엔드포인트를 사용하거나 레지스트리 방화벽 규칙을 사용하여 새로 만든 레지스트리에서 해당 설정을 사용하도록 설정하지 않은 경우 가져오기가 실패합니다.

Docker 허브에서 가져오기

예를 들어 az acr import 명령을 사용하여 Docker Hub에서 myregistry 레지스트리로 다중 아키텍처 hello-world:latest 이미지를 가져옵니다. hello-world는 Docker 허브의 공식 이미지이므로 이 이미지는 기본 library 리포지토리에 있습니다. --source 이미지 매개 변수의 값에 리포지토리 이름 및 선택적으로 태그를 포함합니다. 태그 대신 해당 매니페스트 다이제스트를 통해 이미지를 선택적으로 식별할 수 있으며, 이 경우 이미지의 특정 버전이 보장됩니다.

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

az acr manifest list-metadata 명령을 실행하여 이 이미지에 여러 개의 매니페스트가 연결된 것을 확인할 수 있습니다.

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

태그를 추가하지 않고 다이제스트로 아티팩트를 가져오려면:

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

Docker Hub 계정이 있으면 Docker Hub에서 이미지를 가져올 때 자격 증명을 사용하는 것이 좋습니다. Docker Hub 사용자 이름과 암호 또는 개인용 액세스 토큰az acr import에 매개 변수로 전달합니다. 다음 예제에서는 Docker Hub 자격 증명을 사용하여 Docker Hub의 tensorflow 리포지토리에서 퍼블릭 이미지를 가져옵니다.

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu
  --username <Docker Hub user name>
  --password <Docker Hub token>

Microsoft Container Registry에서 가져오기

예를 들어 Microsoft Container Registry의 windows 리포지토리에서 ltsc2019 Windows Server Core 이미지를 가져옵니다.

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019

동일한 AD 테넌트의 Azure Container Registry에서 가져오기

통합된 Microsoft Entra 권한을 사용하여 동일한 AD 테넌트의 Azure Container Registry에서 이미지를 가져올 수 있습니다.

  • 사용자의 ID에는 원본 레지스트리에서 읽고(읽기 권한자 역할) 대상 레지스트리로 가져오려면(기여자 역할 또는 importImage 작업을 허용하는 사용자 지정 역할) Microsoft Entra 권한이 있어야 합니다.

  • 레지스트리는 동일한 Active Directory 테넌트의 다른 Azure 구독이나 동일한 Azure 구독에 있을 수 있습니다.

  • 원본 레지스트리에 대한 퍼블릭 액세스를 사용하지 않도록 설정할 수 있습니다. 퍼블릭 액세스를 사용하지 않도록 설정한 경우 레지스트리 로그인 서버 이름 대신 리소스 ID로 원본 레지스트리를 지정합니다.

  • 원본 레지스트리 및/또는 대상 레지스트리가 프라이빗 엔드포인트를 포함하거나 레지스트리 방화벽 규칙이 적용되는 경우 네트워크에 액세스할 수 있도록 제한된 레지스트리에서 신뢰할 수 있는 서비스 허용해야 합니다.

동일한 구독의 레지스트리에서 가져오기

예를 들어 원본 레지스트리 mysourceregistry에서 동일한 Azure 구독의 myregistryaci-helloworld:latest 이미지를 가져옵니다.

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld:latest \
  --image aci-helloworld:latest

다음 예제에서는 레지스트리의 퍼블릭 엔드포인트에 대한 액세스를 사용하지 않도록 설정한 원본 레지스트리 mysourceregistry에서 myregistryaci-helloworld:latest 이미지를 가져옵니다. --registry 매개 변수를 사용하여 원본 레지스트리의 리소스 ID를 제공합니다. --source 매개 변수는 원본 리포지토리 및 태그만 지정하고, 레지스트리 로그인 서버 이름은 지정하지 않습니다.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

다음 예제에서는 태그 대신 매니페스트 다이제스트(sha256:...으로 표시되는 SHA-256 해시)를 통해 이미지를 가져옵니다.

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg

다른 구독의 레지스트리에서 가져오기

참고 항목

한 레지스트리에서 다른 레지스트리로 이미지를 가져오려면 원본 및 대상 레지스트리는 두 지역이 구독의 리소스 공급자에 따라 ACR(Azure Container Registry)에 등록되어 있는지 확인해야 합니다.

다음 예제에서 mysourceregistry는 동일한 Active Directory 테넌트의 myregistry에서 다른 구독에 있습니다. --registry 매개 변수를 사용하여 원본 레지스트리의 리소스 ID를 제공합니다. --source 매개 변수는 원본 리포지토리 및 태그만 지정하고, 레지스트리 로그인 서버 이름은 지정하지 않습니다.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

서비스 주체 자격 증명을 사용하여 레지스트리에서 가져오기

Active Directory 권한을 사용하여 액세스할 수 없는 레지스트리에서 가져오려면 원본 레지스트리에 서비스 주체 자격 증명을 사용할 수 있습니다(사용 가능한 경우). 원본 레지스트리에 대한 ACRPull 액세스 권한이 있는 Active Directory 서비스 주체의 appID 및 암호를 제공합니다. 서비스 주체를 사용하면 이미지를 레지스트리로 가져와야 하는 빌드 시스템 및 기타 무인 시스템에 도움이 됩니다.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

다른 AD 테넌트의 Azure Container Registry에서 가져오기

다른 Microsoft Entra 테넌트의 Azure Container Registry에서 가져오려면 로그인 서버 이름으로 원본 레지스트리를 지정하고 레지스트리에 대한 끌어오기 액세스를 사용하도록 설정하는 자격 증명을 제공합니다.

사용자 이름 및 암호를 사용하여 교차 테넌트 가져오기

예를 들어 리포지토리 범위 토큰 및 암호나 원본 레지스트리에 대한 ACRPull 액세스 권한이 있는 Active Directory 서비스 주체의 appID 및 암호를 사용합니다.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

액세스 토큰을 사용하여 교차 테넌트 가져오기

레지스트리 권한이 있는 원본 테넌트의 ID를 사용하여 원본 레지스트리에 액세스하려면 액세스 토큰을 가져올 수 있습니다.

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

대상 테넌트에서 액세스 토큰을 az acr import 명령에 대한 암호로 전달합니다. 원본 레지스트리는 로그인 서버 이름으로 지정됩니다. 이 명령에는 사용자 이름이 필요하지 않습니다.

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --password <access-token>

참고 항목

교차 테넌트는 클라우드에서 작동하지 않습니다. 프라이빗 엔드포인트를 통해 테넌트 간 가져오기도 지원되지 않습니다.

비 Azure 프라이빗 컨테이너 레지스트리에서 가져오기

레지스트리에 대한 풀 액세스를 허용하는 자격 증명을 지정하여 비 Azure 프라이빗 레지스트리에서 이미지를 가져옵니다. 예를 들어 프라이빗 Docker 레지스트리에서 이미지를 끌어옵니다.

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

다음 단계

이 문서에서는 공용 레지스트리 또는 다른 프라이빗 레지스트리에서 Azure Container Registry로 컨테이너 이미지를 가져오는 방법을 알아보았습니다.

  • 추가 이미지 가져오기 옵션은 az acr import 명령 참조를 참조하세요.