- 인쇄
- PDF
Container Registry 사용 가이드
- 인쇄
- PDF
Classic/VPC 환경에서 이용 가능합니다.
네이버 클라우드 플랫폼의 Container Registry는 Docker Registry v2 스펙의 Docker 컨테이너 이미지 저장소를 제공합니다. Docker 컨테이너 이미지는 Object Storage에 저장됩니다. 개발자는 Docker CLI 명령어를 이용하여 Docker 컨테이너 이미지를 업로드(Push) 및 다운로드(Pull)할 수 있습니다. 또한 Docker 컨테이너 이미지 저장 및 관리를 위한 인프라에 대한 고민할 필요가 없으므로, 컨테이너 개발에 집중할 수 있습니다.
제공 리전(VPC)
리전 | 리전 코드 |
---|---|
수도권 | KR |
남부권 | KRS |
CLI 환경에서 Docker Client를 통해 Container Registry에 로그인 하기 위한 엔드포인트는 다음과 같습니다.
레지스트리 이름은 아래와 같이 레지스트리 엔드포인트에 사용됩니다.
- 레지스트리 엔드포인트:
<registry-name>
.ncr.gov-ntruss.com - 프라이빗 엔드포인트:
<random-id>
.private-ncr.gov-ntruss.com
퍼블릭 엔드포인트(Public Endpoint)를 VPC 환경의 가상 서버 인스턴스(Virtual Machine, VM) 내에서 접근하기 위해서는 외부향 인터넷 구성이 요구됩니다. 해당 구성에는 NAT Gateway와 Public Subnet인 경우 PublicIP와 같은 리소스가 요구되며, 추가 요금이 부과될 수 있습니다.
프라이빗 엔드포인트(Private Endpoint)는 네이버 클라우드 플랫폼의 VPC 네트워크내에서만 사용할 수 있는 Container Registry 엔드포인트입니다. 이를 사용하는 경우 모든 네트워크 트래픽은 네이버 클라우드 플랫폼의 네트워크로만 제한 되므로 보안을 향상시킬 수 있습니다. 프라이빗 엔드포인트(Private Endpoint)를 사용하는 경우, 이와 같은 리소스 없이 VPC내에서 Container Registry를 이용할 수 있습니다.
네이버 클라우드 플랫폼의 Container Registry의 프라이빗 엔드포인트(Private Endpoint)는 교차 리전 요청을 허용하지 않습니다.
제공 리전(Classic)
리전 | 리전 코드 |
---|---|
수도권 | KR |
CLI 환경에서 Docker Client를 통해 Container Registry에 로그인 하기 위한 엔드포인트는 다음과 같습니다.
레지스트리 이름은 아래와 같이 레지스트리 엔드포인트에 사용됩니다.
- 레지스트리 엔드포인트:
<registry-name>
.ncr.gov-ntruss.com
제약 사항
Image
- x86 Linux machine 용 이미지를 지원합니다.
Docker Version
- 네이버 클라우드 플랫폼의 Container Registry를 이용하기 위해서는, Docker Engine 1.13 버전 이상이 필요합니다.
Object Storage
- 해당 서비스는 Object Storage 구독이 필요합니다. Object Storage의 버킷에 Docker 컨테이너 이미지가 저장됩니다.
- 아래의 기능들을 활성화 하는 경우, 정상적인 서비스 이용이 불가능할 수 있습니다.
- WORM(Write Once Read Many)
- Lifecycle Management
- ACL(Access Control List)
- ACL 기능을 활성화한 경우에는 접근 제어가 설정된 서버 내에서 프라이빗 엔드포인트를 이용하여 컨테이너 레지스트리 서비스를 이용할 수 있습니다.
Secure Zone
- 클래식 환경의 Secure zone 내 가상 서버 인스턴스(Virtual Machine, VM)에서 사용할 수 없습니다.
레지스트리 생성하기
네이버 클라우드 플랫폼의 Container Registry를 사용하기 위해서는 레지스트리를 생성해야합니다. 레지스트리는 Docker 컨테이너 이미지가 저장 및 관리되는 단위입니다. 서브 계정의 경우 관리자(매니져) 권한이 있는 경우, 해당 기능이 허용됩니다.
① 콘솔에 접속하여 Containers > Container Registry 메뉴를 선택합니다.
② 화면 상단의 [레지스트리 생성] 버튼을 클릭합니다.
③ 레지스트리 이름을 입력합니다.
- 레지스트리 이름은 영소문자, 숫자, "-"를 사용할 수 있으며, 3~30자 이내의 길이로 작성되어야합니다. 또한 영소문자로 시작해야 하며, "-"로 끝날 수 없습니다.
④ 버킷 필드에는 Object Storage에 생성된 버킷들의 리스트가 표시됩니다. 생성할 레지스트리와 연동될 버킷을 선택합니다.
생성된 버킷이 없는 경우, Object Storage로 이동하여 생성할 레지스트리와 연동될 버킷을 생성해야합니다. 레지스트리와 이미 연동한 버킷은 선택할 수 없습니다.
레지스트리 퍼블릭 엔드포인트 활성/비활성화
퍼블릭 엔드포인트는 외부 네트워크(인터넷) 이용이 가능한 환경에서 네이버 클라우드 플랫폼의 Container Registry를 이용하고자 할 때 사용할 수 있는 엔드포인트입니다. 필요한 경우에 이 기능을 비활성화하여 컨테이너 레지스트리를 공개하지 않도록 설정할 수 있습니다.
퍼블릭 엔드포인트가 비활성화 상태여도 프라이빗 레지스트리는 네이버 클라우드 플랫폼의 네트워크 환경 내에서 이용할 수 있습니다.
퍼블릭 엔드포인트(Public Endpoint) 활성화 또는 비활성화하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
- Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 목록에서 대상 레지스트리 이름을 클릭해 주십시오.
- 상세 정보 영역에서 Configuration에 있는 을 클릭해 주십시오.
- Configuration 설정 팝업창에서 Public Endpoint 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.
퍼블릭 레지스트리 활성/비활성화
퍼블릭 레지스트리는 권한이 없는 누구든지 해당 레지스트리로부터 이미지를 다운로드(Pull)할 수 있도록 설정하는 기능입니다. 기본적으로 네이버 클라우드 플랫폼의 컨테이너 레지스트리는 권한이 있는 사용자만 이미지 다운로드(Pull)를 수행할 수 있습니다. 필요한 경우 퍼블릭 레지스트리를 활성화하여 누구든지 이미지를 다운로드(Pull)할 수 있도록 설정할 수 있습니다.
퍼블릭 레지스트리가 활성화 상태여도 권한이 없는 사용자는 이미지 업로드(Push)를 수행할 수 없습니다.
퍼블릭 레지스트리(Public Registry) 활성화 또는 비활성화하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
- Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 목록에서 대상 레지스트리 이름을 클릭해 주십시오.
- 상세 정보 영역에서 Configuration에 있는 을 클릭해 주십시오.
- Configuration 설정 팝업창에서 Public Registry 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.
레지스트리 삭제하기
① 삭제하기 위한 레지스트리를 선택합니다.
② [레지스트리 삭제] 버튼을 클릭합니다.
레지스트리를 삭제하더라도, Object Storage에 저장된 Docker 컨테이너 이미지는 삭제되지 않습니다. 사전에 모든 이미지를 삭제 후에 레지스트리를 삭제하는 것을 권장합니다.
서브 계정 정책 관리하기
네이버 클라우드 플랫폼의 Sub Account를 통해, 서브 계정에 Container Registry 권한을 할당할 수 있습니다. 서브 계정에 할당할 수 있는 Container Registry 정책은 아래와 같습니다.
- Container Registry 관리자(NCP_CONTAINER_REGISTRY_MANAGER): 레지스트리 생성, 레지스트리 삭제, Docker 컨테이너 이미지 업로드(Push), Docker 컨테이너 이미지 다운로드(Pull), Docker 컨테이너 이미지 삭제
- Container Registry 뷰어(NCP_CONTAINER_REGISTRY_VIEWER): 레지스트리 조회, Docker 컨테이너 이미지 다운로드(Pull)
Docker CLI 환경에서 서브 계정이 레지스트리에 로그인시 사용하는 아이디는 서브 계정의 API 인증키입니다. API 인증키는 Sub Account에서 확인 하실 수 있습니다. 사용하고자 하는 서브 계정에 대한 접근 유형(Access Type)의 API Gateway Access가 활성화 된 경우, 서브 계정 상세에서 API 인증키를 확인하 실 수 있습니다. 이외에도 API Gateway Access를 가진 서브 계정은 포털 > 마이페이지 > 계정 관리 > 인증키 관리
에서 해당 서브 계정 인증키를 확인할 수 있습니다.
레지스트리 로그인 하기
Docker CLI에서 로그인
네이버 클라우드 플랫폼에 생성한 레지스트리에 로그인하기 위한 예제입니다.
로그인을 위해서는 API 인증키와 생성한 레지스트리의 엔드포인트가 필요합니다.
레지스트리 목록의 상세 메뉴에서 로그인을 위한 엔드포인트를 확인할 수 있습니다.
네이버 클라우드 플랫폼의 Container Registry를 이용하기 위해서는 Docker Engine 1.10 이상의 버전이 필요합니다. 해당 버전이 설치되어 있는 경우, 터미널에서 Docker CLI를 이용하여 엔드포인트에 로그인할 수 있습니다.
로그인 시 필요한 사용자 아이디와 패스워드는 각각 API 인증키의 Access Key Id, Secret Key입니다.
$ docker login -u <access-key-id> <registry-name>.ncr.gov-ntruss.com
Password: <secret-key>
Login Succeeded
로그인 성공 후에는, Login Succeeded
메시지가 출력됩니다.
쿠버네티스(Kubernetes)에서 로그인
쿠버네티스에서 네이버 클라우드 플랫폼의 Container Registry를 이용하기 위한 secret
을 생성하는 예제입니다.
아래는 kubectl
명령어를 이용하여 regcred
라는 이름의 secret
을 생성하는 예제입니다.
$ kubectl create secret docker-registry regcred --docker-server=<registry-end-point> --docker-username=<access-key-id> --docker-password=<secret-key> --docker-email=<your-email>
네이버 클라우드 플랫폼에 생성한 레지스트리의 이미지를 다운로드(Pull)하기 위해서는, template의 spec 영역의 imagePullSecrets
에 앞서 생성한 secret
이름을 입력합니다.
Example: MySQL YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-mysql
labels:
name: test-mysql
spec:
replicas: 1
selector:
matchLabels:
name: test-mysql
template:
metadata:
labels:
name: test-mysql
spec:
imagePullSecrets:
- name: regcred
containers:
- name: test-mysql
image: <registry-name>.ncr.gov-ntruss.com/mysql:5.7.21
env:
- name: MYSQL_ROOT_PASSWORD
value: "1234"
Docker 컨테이너 이미지 업로드(Push) 하기
docker login
명령어를 이용하여 특정 레지스트리의 엔드포인트에 로그인한 경우, 해당 레지스트리에 Docker 컨테이너 이미지를 업로드(Push)할 수 있습니다.
$ docker push <registry-name>.ncr.gov-ntruss.com/jenkins
The push refers to repository [mybear.ncr.gov-ntruss.com/jenkins]
0577e068c587: Layer already exists
b1891bf16fa7: Layer already exists
37c1d818eb0b: Layer already exists
d51e4482f53a: Layer already exists
ceed640cbb93: Layer already exists
9c2e8b91bfa8: Layer already exists
c477b6c8ca45: Layer already exists
fa0c3f992cbd: Layer already exists
ce6466f43b11: Layer already exists
719d45669b35: Layer already exists
3b10514a95be: Layer already exists
latest: digest: sha256:0de43cde2c4b864a8e4a84bbd9958e47c5d851319f118203303d040b0a74f159 size: 4501
서브 계정의 경우에는 Sub Account 정책에 관리자(매니져) 권한이 있어야, 해당 작업이 허용됩니다.
Docker 컨테이너 이미지 다운로드(Pull) 하기
docker login
명령어를 이용하여 특정 레지스트리의 엔드포인트에 로그인한 경우, 해당 레지스트리에 저장된 Docker 컨테이너 이미지를 Pull할 수 있습니다.
아래의 예제는 레지스트리에 저장된 jenkins:latest
이미지를 다운로드하는 에제입니다.
$ docker pull <registry-name>.ncr.gov-ntruss.com/jenkins
Using default tag: latest
latest: Pulling from jenkins
55cbf04beb70: Pull complete
c58988e753d7: Pull complete
70fcfa476f73: Pull complete
0539c80a02be: Downloading [===============> ] 40.52MB/133.9MB
54fefc6dcf80: Download complete
911bc90e47a8: Download complete
38430d93efed: Download complete
c0cbcb5ac747: Download complete
35ade7a86a8e: Download complete
aa433a6a56b1: Downloading [===================> ] 27.91MB/70.41MB
841c1dd38d62: Download complete
12b47c68955c: Download complete
1322ea3e7bfd: Download complete
서브 계정의 경우에는 Sub Account 정책에 뷰어 이상의 권한이 있어야, 해당 작업이 허용됩니다.
Docker 컨테이너 이미지 관리 하기
이 절에서는 네이버 클라우드 플랫폼의 Container Registry의 대시보드에서, Docker 컨테이너 이미지를 관리하는 방법을 기술합니다.
업로드한 이미지 확인하기
① 레지스트리 목록에서 이미지 리스트의 [이동] 버튼을 클릭합니다.
② 이미지 리스트에서 업로드(Pull)한 목록을 확인할 수 있습니다.
테이블 헤더 | 설명 |
---|---|
이미지 이름 | 컨테이너 이미지의 이름입니다. |
Short Description | 컨테이너 이미지에 대한 짧은 메모입니다. |
최근 변경일 | 컨테이너 이미지에 대한 최근 변경일입니다. |
Pulls | 컨테이너 이미지를 다운로드한 횟수입니다. |
이미지 Description 작성
도커 컨테이너 이미지에 대한 설명을 Short Description과 Full Description로 작성할 수 있습니다.
- Short Description: 100자 이내의 설명 입력
- Full Description: 마크다운(Markdown) 형식을 지원하여 보다 풍부한 설명 작성 가능
도커 컨테이너 이미지에 대한 설명(Description)을 작성하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 레지스트리 목록에서 대상 레지스트리에 있는 이미지 리스트의 [이동] 버튼을 클릭해 주십시오.
- 도커 컨테이너 이미지 목록의 Detail 탭에서 Short Description 또는 Full Description의 [수정] 버튼을 클릭해 주십시오.
- 입력 필드에 설명을 입력한 후 [제출] 버튼을 클릭해 주십시오.
- Full Description은 마크다운 형식으로 설명을 입력할 수 있는 [Code] 탭과 작성한 설명을 미리 볼 수 있는 [Preview] 탭으로 구분됩니다.
- Short Description에서 작성한 설명은 목록의 Short Description 열에 표시됩니다.
이미지 삭제
레지스트리에 업로드된 도커 컨테이너 이미지를 삭제하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 레지스트리 목록에서 대상 레지스트리에 있는 이미지 리스트의 [이동] 버튼을 클릭해 주십시오.
- 도커 컨테이너 이미지 목록에서 삭제 대상 도커 컨테이너 이미지를 체크하여 선택한 후 [삭제] 버튼을 클릭해 주십시오.
- 이미지 삭제 팝업 창에서 내용을 확인한 후 [삭제] 버튼을 클릭해 주십시오.
- 이미지가 삭제되면 해당 이미지의 모든 태그(tag)도 자동으로 삭제됩니다.
이미지 또는 이미지태그 삭제 시에 Garbage Collection이 수행됩니다. Garbage Collection이 수행되는 동안 데이터 보호를 위해 이미지 Push가 제한됩니다.
이미지 태그 삭제
도커 컨테이너 이미지에 적용된 태그(tag)를 삭제하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 레지스트리 목록에서 대상 레지스트리에 있는 이미지 리스트의 [이동] 버튼을 클릭해 주십시오.
- 도커 컨테이너 이미지 목록에서 대상 도커 컨테이너 이미지를 클릭해 주십시오.
- 상세 정보 화면에서 [Tags] 탭을 클릭해 주십시오.
- 태그 목록에서 삭제 대상 태그를 체크하여 선택한 후 [Tag 삭제] 버튼을 클릭해 주십시오.
- Tag 삭제 팝업 창에서 내용을 확인한 후 [삭제] 버튼을 클릭해 주십시오.
오래된 태그 정리
도커 컨테이너 이미지에 적용된 태그를 삭제하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 레지스트리 목록에서 대상 레지스트리를 클릭해 주십시오.
- 레지스트리 상세 정보 화면에서 오래된 태그 정리 항목의 [이동] 버튼을 클릭해 주십시오.
- 필요한 경우, Filter 기능을 이용하여 조회 조건에 맞는 도커 컨테이너 이미지만 표시할 수 있습니다. 기준 날짜와 마지막 태그 제외 여부를 선택한 후 [적용] 버튼을 클릭해 주십시오.
- 이미지 목록에서, 해당 태그를 삭제할 이미지를 체크하여 선택한 후 [삭제] 버튼을 클릭해 주십시오.
- 삭제 팝업 창에서 내용을 확인한 후 [삭제] 버튼을 클릭해 주십시오.
태그 변경 가능 여부 활성/비활성화
동일한 이름의 태그를 가진 이미지가 Push/Overwrite 되는 것을 방지하는 방법은 다음과 같습니다.
- 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
- 레지스트리 목록에서 대상 레지스트리에 있는 이미지 리스트의 [이동] 버튼을 클릭해 주십시오.
- 도커 컨테이너 이미지 목록의 Details 탭에서 Configuration에 있는 을 클릭해 주십시오.
- Configuration 설정 팝업창에서 Tag Mutability 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.