Container Registry 사용 가이드
    • PDF

    Container Registry 사용 가이드

    • PDF

    Article Summary

    네이버 클라우드 플랫폼의 Container Registry는 Docker Registry v2 스펙의 Docker 컨테이너 이미지 저장소를 제공합니다. Docker 컨테이너 이미지는 Object Storage에 저장됩니다. 개발자는 Docker CLI 명령어를 이용하여 Docker 컨테이너 이미지를 업로드(Push) 및 다운로드(Pull)할 수 있습니다. 또한 Docker 컨테이너 이미지 저장 및 관리를 위한 인프라에 대한 고민할 필요가 없으므로 컨테이너 개발에 집중할 수 있습니다.

    제공 엔드 포인트

    레지스트리 이름은 아래와 같이 레지스트리 엔드포인트에 사용됩니다. 퍼블릭 엔드포인트는 필요에 따라 사용할 수 없도록 비활성화할 수 있습니다.

    • 퍼블릭 엔드포인트: <registry-name>.ncr.fin-ntruss.com
    • 프라이빗 엔드포인트: <random-id>.private-ncr.fin-ntruss.com
    참고
    • 퍼블릭 엔드포인트(Public Endpoint)를 VPC 환경의 가상 서버 인스턴스(Virtual Machine, VM) 내에서 접근하기 위해서는 외부향 인터넷 구성이 요구됩니다. 해당 구성에는 NAT Gateway와 Public Subnet인 경우 PublicIP와 같은 리소스가 요구되며 추가 요금이 부과될 수 있습니다.
    • 프라이빗 엔드포인트(Private Endpoint)는 네이버 클라우드 플랫폼의 네트워크내에서만 사용할 수 있는 Container Registry 엔드포인트입니다. 이를 사용하는 경우 모든 네트워크 트래픽은 네이버 클라우드 플랫폼의 네트워크로만 제한 되므로 보안을 향상시킬 수 있습니다. 프라이빗 엔드포인트(Private Endpoint)를 사용하는 경우 이와 같은 리소스 없이 VPC내에서 Container Registry를 이용할 수 있습니다.

    제약 사항

    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 기능을 활성화한 경우에는 접근 제어가 설정된 서버 내에서 프라이빗 엔드포인트를 이용하여 컨테이너 레지스트리 서비스를 이용할 수 있습니다.

    레지스트리 생성하기

    네이버 클라우드 플랫폼의 Container Registry를 사용하기 위해서는 레지스트리를 생성해야합니다. 레지스트리는 Docker 컨테이너 이미지가 저장 및 관리되는 단위입니다. 서브 계정의 경우 관리자(매니져) 권한이 있는 경우 해당 기능이 허용됩니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속하여 Services > Container > Container Registry 메뉴를 선택해 주십시오.

    2. 서비스 화면 상단의 [레지스트리 생성] 버튼을 클릭해 주십시오.

    3. 레지스트리 이름을 입력해 주십시오.

      • 레지스트리 이름은 영소문자, 숫자, 붙임표(-)를 사용할 수 있으며 3~30자 이내의 길이로 작성되어야 합니다. 또한 영소문자로 시작해야 하고 붙임표(-)로 끝날 수 없습니다.
    참고

    레지스트리 이름은 퍼블릭 엔트포인트의 주소로 활용됩니다. Container Registry 내 존재하는 다른 레지스트리 이름과 중복될 수 없습니다.

    1. 버킷 필드에는 Object Storage에 생성된 버킷들의 리스트가 표시됩니다. 생성할 레지스트리와 연동될 버킷을 선택해 주십시오.
    참고

    생성된 버킷이 없는 경우 Object Storage로 이동하여 생성할 레지스트리와 연동될 버킷을 생성해야합니다. 레지스트리와 이미 연동한 버킷은 선택할 수 없습니다.

    레지스트리 퍼블릭 엔드포인트 활성/비활성화

    퍼블릭 엔드포인트는 외부 네트워크(인터넷) 이용이 가능한 환경에서 네이버 클라우드 플랫폼의 Container Registry를 이용하고자 할 때 사용할 수 있는 엔드포인트입니다. 필요한 경우에 이 기능을 비활성화하여 컨테이너 레지스트리를 공개하지 않도록 설정할 수 있습니다.

    참고

    퍼블릭 엔드포인트가 비활성화 상태여도 프라이빗 레지스트리는 네이버 클라우드 플랫폼의 네트워크 환경 내에서 이용할 수 있습니다.

    퍼블릭 엔드포인트(Public Endpoint) 활성화 또는 비활성화하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
    2. Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
    3. 목록에서 대상 레지스트리 이름을 클릭해 주십시오.
    4. 상세 정보 영역에서 Configuration에 있는 i-containerregistry-detailset을 클릭해 주십시오.
    5. Configuration 설정 팝업창에서 Public Endpoint 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.

    퍼블릭 레지스트리 활성/비활성화

    퍼블릭 레지스트리는 권한이 없는 누구든지 해당 레지스트리로부터 이미지를 다운로드(Pull)할 수 있도록 설정하는 기능입니다. 기본적으로 네이버 클라우드 플랫폼의 컨테이너 레지스트리는 권한이 있는 사용자만 이미지 다운로드(Pull)를 수행할 수 있습니다. 필요한 경우 퍼블릭 레지스트리를 활성화하여 누구든지 이미지를 다운로드(Pull)할 수 있도록 설정할 수 있습니다.

    참고

    퍼블릭 레지스트리가 활성화 상태여도 권한이 없는 사용자는 이미지 업로드(Push)를 수행할 수 없습니다.

    퍼블릭 레지스트리(Public Registry) 활성화 또는 비활성화하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에 접속해 주십시오.
    2. Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
    3. 목록에서 대상 레지스트리 이름을 클릭해 주십시오.
    4. 상세 정보 영역에서 Configuration에 있는 i-containerregistry-detailset을 클릭해 주십시오.
    5. Configuration 설정 팝업창에서 Public Registry 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.

    레지스트리 삭제하기

    1. 삭제하기 위한 레지스트리를 선택해 주십시오.

    2. [레지스트리 삭제] 버튼을 클릭해 주십시오.

    참고

    레지스트리를 삭제하더라도 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 인증키와 생성한 레지스트리의 엔드포인트가 필요합니다.

    ncr-1-2-1_ko

    레지스트리 목록의 상세 메뉴에서 로그인을 위한 엔드포인트를 확인할 수 있습니다.
    네이버 클라우드 플랫폼의 Container Registry를 이용하기 위해서는 Docker Engine 1.10 이상의 버전이 필요합니다. 해당 버전이 설치되어 있는 경우 터미널에서 Docker CLI를 이용하여 엔드포인트에 로그인할 수 있습니다.
    로그인 시 필요한 사용자 아이디와 패스워드는 각각 API 인증키의 Access Key Id, Secret Key입니다.

    $ docker login -u <access-key-id> <registry-name>.ncr.fin-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.fin-ntruss.com/mysql:5.7.21
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "1234"
    

    Docker 컨테이너 이미지 업로드(Push)하기

    docker login 명령어를 이용하여 특정 레지스트리의 엔드포인트에 로그인한 경우 해당 레지스트리에 Docker 컨테이너 이미지를 업로드(Push)할 수 있습니다.

    $ docker push <registry-name>.ncr.fin-ntruss.com/jenkins
    The push refers to repository [myrepo.ncr.fin-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.fin-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 컨테이너 이미지를 관리하는 방법을 기술합니다.

    업로드한 이미지 확인하기

    1. 레지스트리 목록에서 이미지 리스트의 이동 버튼을 클릭해 주십시오.

    2. 이미지 리스트에서 업로드(Pull)한 목록을 확인해 주십시오.

    테이블 헤더설명
    이미지 이름컨테이너 이미지의 이름입니다.
    Short Description컨테이너 이미지에 대한 짧은 메모입니다.
    최근 변경일컨테이너 이미지에 대한 최근 변경일입니다.
    Pulls컨테이너 이미지를 다운로드한 횟수입니다.

    이미지 Description 작성하기

    이미지 리스트에서 특정 행을 클릭하면 이미지에 대한 Short Description과 Full Description을 볼 수 있습니다.
    Edit 버튼을 클릭하여 Description을 작성할 수 있습니다.

    • Short Description: 100자 이내의 메모를 입력할 수 있습니다.
    • Full Description: Markdown 포맷을 지원합니다. 보다 풍부한 메모를 작성할 수 있습니다.

    이미지 삭제하기

    이미지 리스트에서 삭제하기 위한 이미지를 선택 후 상단의 [이미지 삭제] 버튼을 클릭합니다.
    모달창의 [삭제] 버튼을 클릭하여 해당 이미지를 삭제합니다.

    • 이미지를 삭제하는 경우 해당 이미지의 모든 태그(tag)들이 자동 삭제됩니다.

    이미지 태그 삭제하기

    이미지에 대한 태그(tag) 탭에서 해당 이미지에 대한 태그(tag) 목록들을 확인할 수 있습니다.
    각 태그 행에 있는 삭제 버튼을 통해 해당 태그를 삭제할 수 있습니다.

    ncr-1-3-9_ko

    태그 변경 가능 여부 활성/비활성화

    동일한 이름의 태그를 가진 이미지가 Push/Overwrite 되는 것을 방지하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에서 Services > Containers > Container Registry 메뉴를 차례대로 클릭해 주십시오.
    2. 레지스트리 목록에서 대상 레지스트리에 있는 이미지 리스트의 [이동] 버튼을 클릭해 주십시오.
    3. 도커 컨테이너 이미지 목록의 Details 탭에서 Configuration에 있는 i-containerregistry-detailset을 클릭해 주십시오.
    4. Configuration 설정 팝업창에서 Tag Mutability 항목의 활성/비활성 토글 버튼을 클릭해 사용 여부를 설정한 후 [확인] 버튼을 클릭해 주십시오.

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.