안녕하세요. HYEN입니다.
이번 글은 Azure Container Registry 이름에 대문자를 포함할 경우 발생할 수 있는 에러에 대해 다뤄 보았습니다.
간단하게 해결이 되긴 했지만 처음 해당 이슈를 접했을 때에는 왜 안 되는지 모르겠었기 때문에 나중에 이런 일이 발생했을 때에는 놀라지 않도록 기록해 보겠습니다. 😓
Contents
1. 환경 구성
- 두 개의 Azure Container Registry를 생성합니다.
- ACR에 접근할 가상 머신을 생성합니다.
1.1 Azure Container Registry 생성
먼저, 소문자만 포함하는 ACR을 생성합니다.
- [기본 사항] 탭
Pricing plan은 "표준"을 선택합니다.
프라이빗 액세스를 구성하고자 할 경우에는 "프리미엄" plan을 선택해야 합니다.
- [검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Container Registry]를 생성합니다.
이름에 대문자를 포함하는 Azure Container Registry도 상기 과정과 동일하게 생성하면 됩니다.
- [기본 사항] 탭
참고로, 컨테이너 레지스트리는 Azure 전역에서 고유한 이름이어야 합니다. (대소문자 구분 없음)
ex) acrhyein이라는 ACR이 존재할 경우 acrHyein이라는 이름으로는 ACR을 생성할 수 없습니다.
- [검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [Azure Container Registry]를 생성합니다.
1.2 가상 머신 생성 및 세부 구성
Local PC에서도 접근이 가능하지만 가상 머신을 생성하여 이미지를 생성하고 Push를 진행해 보도록 하겠습니다.
- [기본 사항] 탭
본 테스트에서는 Ubuntu 20.04 이미지를 사용하였습니다.
- [검토 + 만들기] 탭에서 유효성 검사 후 [만들기]를 클릭하여 [가상 머신]을 생성합니다.
가상 머신 생성이 완료되었으면 공인 IP로 접근합니다. (ssh hyein@{vm 공인 ip})
가상 머신에서 하기 과정을 진행해야 합니다. (설치 과정은 링크로 갈음합니다.)
- az cli를 설치합니다.
- Docker를 설치합니다.
- Azure CLI 설치
2. 대문자를 포함하지 않은 ACR에 컨테이너 이미지 push 하기
먼저 대문자를 포함하지 않은 ACR에 컨테이너 이미지를 push해 보겠습니다.
- Docker image를 Docker Hub에서 Pull 해옵니다. ( docker pull alpine )
- 이미지를 Azure Container Registry에 push하기 위해 먼저 az login을 진행합니다.
(멀티 테넌트를 소유하고 있는 경우 -t 옵션으로 tenantID를 입력해 주어야 합니다.)
- 멀티 구독인 경우 az account -s "구독 명"을 입력하여 Azure Container Registry가 존재하는 구독으로 활성 구독을 변경해 줍니다.
- acrhyein이라는 ACR에 로그인합니다. ( az acr login -n acrhyein )
- ACR에 push할 컨테이너 이미지에 대한 tag를 지정합니다. ( docker tag alpine:latest acrhyein.azurecr.io/hyein )
- docker images 명령어를 통해 tag를 확인합니다.
- docker push acrhyein.azurecr.io/hyein 명령어로 ACR에 push를 진행합니다.
- Azure Portal 상에서 ACR에 이미지가 정상적으로 push 된 것을 확인할 수 있습니다.
상기 내용과 같이 소문자로 이루어진 ACR의 경우 어떠한 문제도 발생하지 않는 것을 확인할 수 있습니다.
3. 대문자를 포함한 ACR에 컨테이너 이미지 Push 하기
이번에는 대문자를 포함한 이름을 가지고 있는 ACR에 컨테이너 이미지를 push 해 보도록 하겠습니다.
- acrHyein이라는 ACR에 로그인합니다. ( az acr login -n acrHyein01 )
Login Succeeded라는 문구가 출력되기는 하지만 2번 과정에서와는 다르게 노란색의 경고 문구가 함께 출력되어 있는 것을 확인할 수 있습니다.
🚨 경고 문구 🚨
Uppercase characters are detected in the registry name.
When using its server url in docker commands, to avoid authentication errors, use all lowercase.
ACR 이름에 대문자가 있을 경우, docker command에서 server url을 사용할 때 authentication error를 피하기 위해서는 모두 대문자로 사용해라 라는 내용입니다.
실제로 ACR에 로그인 시 서버 명을 모두 소문자로 한 후 로그인을 시도하면 하기와 같이 Login Succeeded라는 문구만 출력되는 것을 확인할 수 있습니다.
우선, 대문자가 포함되어 있는 서버명으로 하기 과정을 진행해 보겠습니다.
- 가상 머신에 빌드 되어 있는 alpine이라는 이미지에 대해 태그를 생성합니다. ( docker tag alpine:latest acrHyein01.azurecr.io/hyein )
- docker push acrHyein01.azurecr.io/hyein 명령어로 ACR에 push를 진행합니다.
상기 스크린샷과 같이 unauthorized로 시작하는 에러가 발생한 것을 확인할 수 있습니다.
🚨 에러 문구 🚨
Using default tag: latest
The push refers to repository [acrHyein01.azurecr.io/hyein]
d4fc045c9e3a: Preparing
unauthorized: {"errors": {"code":"UNAUTHORIZED","message":"authentication required, visit https://aka.ms/acr/authorization for more information."}]}
이를 방지하기 위해서는 server url을 모두 lowercase로 변경하여야 합니다.
- ACR의 서버 명에 있는 대문자를 모두 소문자로 바꾼 후 태그를 재 생성합니다. ( docker tag alpine:latest acrhyein01.azurecr.io/hyein )
- docker push acrhyein01.azurecr.io/hyein 명령어로 ACR에 push를 진행합니다.
아까와는 다르게 push가 정상적으로 진행되는 것을 확인할 수 있습니다.
- 마지막으로, Azure Portal 상에서 ACR에 이미지가 정상적으로 push 되었는지 확인합니다.
acrHyein01이라는 이름의 ACR에 컨테이너 이미지가 제대로 push된 것을 알 수 있습니다.
추가적으로,
이러한 내용은 Microsoft Azure 공식 문서의 FAQ에도 적혀 있으니 참고하실 분들은 참고 부탁 드립니다.
'TOPIC > Cloud' 카테고리의 다른 글
프라이빗 엔드포인트 VS VNET 통합 (프라이빗 액세스) (0) | 2024.04.30 |
---|---|
Azure Route Table 공부하기 (1) (1) | 2024.04.26 |
Azure Private Subnet에 명시적으로 아웃바운드 연결하기 (0) | 2024.04.23 |
Azure Private Subnet과 Azure NAT Gateway란? (0) | 2024.04.23 |
Azure Cloud Shell에 Private하게 접근하기 (2) (1) | 2024.04.03 |