grep

Engineering

NHN Container Registry(NCR) 이미지 캐시 기능 소개

NHN

2022년 12월 22일

원문에서 보기 ↗

NHN Container Registry(NCR) 이미지 캐시 기능 소개

NHN클라우드 NCR 이미지 캐시 기능 소개_썸네일_221219.jpg

컨테이너 레지스트리를 사용하다 보면 다른 레지스트리(Docker Hub, Quay, NCR 등)에서 이미지 다운로드가 필요한 경우가 있습니다. 사용자가 매번 각 레지스트리에 이미지가 변경되었는지 확인하고 다운로드하는 것은 불편한 작업입니다. NHN Container Registry(NCR)에서는 이러한 불편함을 해소하기 위해 이미지 캐시 기능이 추가되었습니다. NCR에 다른 레지스트리의 정보를 등록하면 NCR에서 다른 레지스트리에서 이미지를 다운로드하여 사용자에게 제공합니다.

또한, 이미지 캐시 기능을 통해 레지스트리 서버에 의해 이미지 다운로드 제한(Docker Hub’s rate limit policy)되는 것에 대해 일부 대응이 가능합니다. NCR에서 다른 레지스트리의 이미지를 캐싱하고 제공하여 레지스트리로 요청하는 이미지 다운로드 횟수를 줄일 수 있습니다.

이미지 캐시 기능의 특징

이미지 캐시 기능의 특징은 다음과 같습니다.

일반 레지스트리와 이미지 캐시 레지스트리의 차이점

일반 레지스트리와 이미지 캐시 레지스트리의 차이점은 아래와 같습니다.

일반 레지스트리이미지 캐시 레지스트리
레지스트리에 저장된 이미지 다운로드OO
다른 레지스트리에 저장된 이미지 다운로드XO
이미지 업로드OX

01.png

본 문서에서는 이미지 캐시 레지스트리를 이용하여 Docker Hub에서 hello-world 이미지를 다운로드하는 내용으로 작성하였습니다.

이미지 캐시 설정

이미지 캐시 기능을 사용하려면 NCR 콘솔에서 이미지 캐시를 설정해야 합니다. NCR 콘솔에서 이미지 캐시 탭으로 이동하면 현재 설정된 이미지 캐시 목록을 확인할 수 있습니다. 02.png 새로운 이미지 캐시를 설정하기 위해서 + 이미지 캐시 생성 을 클릭합니다. 이미지 캐시 생성 페이지에서 소스 레지스트리의 정보를 입력해야 합니다. 03.png

NCR에서 지원되는 소스 레지스트리 유형과 입력되는 정보는 아래와 같습니다.

소스 레지스트리 유형URLAccess IDAccess Secret
NHN Container Registry(NCR)https://xxxxxxxx-$REGION-registry.container.nhncloud.comUser Access Key IDSecret Access Key
Amazon Elastic Container Registryhttps://$AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazoneaws.comIAM 액세스키 IDIAM 비밀 액세스 키
Azure Container Registryhttps://$REGISTRY_NAME.azurecr.io액세스 키 사용자 이름액세스 키 암호
Google Cloud Container Registryhttps://$REGION_json_key서비스 계정의 비공개 키(JSON 유형)
Docker Hubhttps://hub.docker.comUsernamePassword
Docker Registrydocker-registry 주소UsernamePassword
HarborHarbor 주소UsernamePassword
Quayhttps://quay.iojson_file{ "account_name": "$사용자 계정", "docker_cli_password": "$Quay에서 생성한 암호화된 Password" }

필요한 정보를 모두 입력한 뒤 확인을 클릭하면 URL, Access ID, Secret 정보를 이용하여 소스 레지스트리와 연동 확인을 하게 됩니다. 연동에 문제가 없는 경우 이미지 캐시가 생성됩니다.

[참고] 소스 레지스트리가 자체 인증서를 사용하거나 신뢰할 수 없는 인증서를 사용하는 경우 인증서 검증을 사용 안 함으로 설정해야 합니다.

04.png

이미지 캐시용 레지스트리 생성

이미지 캐시를 생성하였으면 이미지 캐시용 레지스트리를 생성해야 합니다. NCR 콘솔에서 관리 탭으로 이동하여 + 레지스트리 생성 을 클릭합니다. 레지스트리 생성 페이지에서 이미지 캐시를 선택하면 생성한 이미지 캐시 목록이 조회됩니다. 05.png 이미지 캐시 대상을 선택한 뒤 확인 을 클릭하면 이미지 캐시용 레지스트리가 생성됩니다. 06.png

이미지 캐시용 레지스트리에서 이미지 다운로드

이미지 캐시용 레지스트리가 생성되면 NCR에 이미지가 없더라도 이미지를 다운로드할 수 있습니다. 로컬 PC에서 터미널을 실행하고 다음과 같이 명령어를 입력하여 이미지를 다운로드할 수 있습니다. NCR 레지스트리에서 이미지 다운로드를 하기 위해서는 사전 준비와 로그인 과정이 필요합니다. 자세한 내용은 NCR 사용 가이드를 참고하세요.

$ docker pull $REGISTRY_DOMAIN/library/hello-world:latest

이미지를 다운로드하면 NCR에도 이미지가 자동으로 추가됩니다. 07.png

이후 동일한 명령어를 이용하여 이미지 다운로드를 수행하면 NCR에 캐싱된 이미지를 제공합니다. 캐싱된 이미지가 제공되고 있는 것은 아래와 같이 확인할 수 있습니다. 이미지 캐시 레지스트리로 Image Pull을 수행하기 전에 Docker Hub에서 Image Pull 가능한 횟수를 확인합니다.

$ TOKEN=$(curl --user '$USERNAME:$PASSWORD' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token)
$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep ratelimit-remaining

ratelimit-remaining: 199;w=21600

로컬 PC에 다운로드되어 있는 이미지는 삭제합니다.

$ docker rmi $REGISTRY_DOMAIN/library/hello-world:latest

이미지 캐시 레지스트리로 Image Pull을 수행 후 Docker Hub에서 Image Pull 가능한 횟수를 조회하면 Image Pull 가능한 횟수가 차감되지 않는 것을 확인할 수 있습니다.

$ docker pull $REGISTRY_DOMAIN/library/hello-world:latest
$ curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest 2>&1 | grep ratelimit-remaining

ratelimit-remaining: 199;w=21600

NCR 콘솔에서는 Pull 횟수가 증가하는 것을 확인할 수 있습니다. 08.png

마치며

NCR의 이미지 캐시 기능에 대해서 알아보았습니다. 정리하면 아래와 같습니다.

  1. NCR 콘솔에서 이미지 캐시를 생성할 수 있습니다.
  2. 이미지 캐시 레지스트리를 통해 다른 레지스트리의 이미지를 제공받을 수 있습니다.
  3. 이미지 캐시 레지스트리에 캐싱된 이미지가 있으면 캐싱된 이미지를 제공합니다.
  4. 퍼블릭 이미지 캐시 기능은 아직 지원되지 않지만 Docker Hub’s rate limit policy에 대응할 수 있습니다.

이미지 캐시에 대한 자세한 내용은 이미지 캐시 사용을 참고해 주세요.