1-7. 이미지가 저장되는 곳, 컨테이너 레지스트리

황인권·2025년 2월 5일

Kubernetes

목록 보기
7/37

도커 허브란?

  • 소스코드를 공유하는 깃허브가 있다면, 도커 생태계에는 이미지를 공유하는 도커 허브가 있다.
  • 우리가 이미지를 다운로드 받기 위해 입력했던 명령어
    dcoker pull nginx
    • 이렇게 이미지를 다운로드 받을 때, '어디서 가져올 것인지'의 기본 설정이 도커 허브

도커 허브 같은 곳 = 컨테이너 레지스트리

  • 깃허브 깃랩, 빗버킷과 같은 Git 기반 소스코드 저장소를 깃 저장소라 부르는 것과 비슷하게, 컨테이너 이미지를 저장해두는 장소를 컨테이너 레지스트리라고 부른다.
  • 불특정 다수가 공개적으로 사용하는 컨테이너 레지스트리는 사실상 도커 허브가 유일

클라우드 서비스에서 제공하는 프라이빗 컨테이너 레지스트리

  • 내가 만든 이미지를 아무나 다운 받으면 안된다.
    -> 그래서 나만 접속할 수 있는 프라이빗 컨테이너 레지스트리를 만들어야 한다.
  • 컨테이너 레지스트리를 직접 일일이 구축하는 방법도 있지만
    -> 쿠버네티스 클러스터를 만드는 것과 마찬가지로, 클라우드 서비스에서 클릭 몇 번으로 나만을 위한 컨테이너 레지스트리를 만들 수 있다.
    • AWS에서는 ECR이라는 이름으로 서비스가 제공되면, GCP에서는 Artifact Registry라는 서비스에 컨테이너 이미지 레지스트리 기능이 포함되어 있다.

컨테이너 레지스트리 만들고, 이미지 업로드 하기

AWS를 사용

  1. AWS 콘솔에서 'ECR'을 검색하여, '프라이빗 레지스트리'에 접속

  2. 좌측 메뉴에서 Private registry의 Repositories를 클릭하여 리포지토리 목록 화면으로 진입

  3. 리포지토리 생성 버튼을 클릭하고, 리포지토리 이름을 입력하여 새로운 리포지토리를 생성한다.

  • 여기서 만약에 표시 여부 설정을 '퍼블릭'으로 선택하게 되면 내가 AWS에 올린 이미지를 아무나 다운로드 받아서 사용할 수 있게 된다.
  • AWS의 ECR 서비스는 이미지별로 매번 리포지토리를 새로 생성해야 하니, 만약 예시와 같이 'sample-image'라는 이미지를 등록할 수 있도록 공간을 만들어 놓아도 'sample-image-2'라는 완전히 새로운 이미지를 업로드하고 싶다면 'sample-image-2'와 같이 새로운 리포지토리를 만들어야 한다.


  1. 만들어진 리포지토리를 클릭하여 상세 화면에 접속한 뒤, 우측 상단의 '푸시 명령 보기' 버튼을 클릭

  2. 내 컴퓨터와 ECR을 연결해주는 CLI 명령어를 복사하여 터미널에 입력

  • 해당 연결은 때떄로 풀릴 때가 있으니, AWS에 올려둔 이미지가 pull 되지 않을 경우 다시 연결을 해야 한다.
  • Windows도 MacOS와 동일한 명령어를 통해 연결해도 된다.
    (다만, 환경에 따라 설정이 안되는 경우도 있을 수 있으니 그럴 떄는 윈도우 탭에 적힌 방법대로 PowerShell용 AWS CLI 도구를 설치하여 진행)

  1. ECR의 경로가 명시되게끔 이미지의 이름을 설정해주고, 이를 push 하여 제대로 업로드되었는지 확인

GCP를 사용

  1. GCP 콘솔에서 'Artifact Registry'를 검색해 아티팩트 레지스트리 서비스에 접속

  2. 화면 상단의 '저장소 만들기' 버튼을 클릭해 저장소 생성 화면에 진입

  3. 저장소의 이름을 입력하고 형식은 'Docker'를 선택

  4. 위치 유형은 '리전'을 선택 후 리전을'asia-northeast-3'로 선택

  5. 나머지 설정은 그대로 두고, '만들기' 버튼을 클릭해 저장소 생성 완료

  6. 만들어진 저장소의 상세 화면에 진입한 후, 화면 상단의 '설정 안내' 버튼을 클릭

  7. 내 컴퓨터의 Docker와 Artifact Registry를 연결하기 위한 CLI 명령어를 복사해 터미널에 입력한다.

  • Windows에서 CMD를 통해 해당 명령어를 입력하려면, \를 제거하고 모두 한줄로 입력하거나, \대신 ^기로흘 입력하면 된다.
    CLI 환경에서 \은 일반적으로 하나의 명령어를 여러줄에 걸쳐 입력하는 경우 사용하는 기호인다. CMD는 \기호 대신 ^기호를 사용도록 하고 있다.
gcloud auth configure-docker asia-northeast3-docker.pkg.dev
# 또는
gcloud auth configure-docker ^
asia-northeast3-docker.pkg.dev


  1. 저장소 상세 화면의 경로 부분 옆에 있는 복사 버튼을 클릭해 해당 저장소의 주소를 복사

  2. <저장소 주소>/<이미지명>:<버전>형식으로 이미지를 만들어 잘 push 되는지 확인한다.

  • GCP의 Artifact Registry의 저장소는 AWS의 ECR 리포지토리와 다르게 이미지 단위로 만드는 것이 아닌, 아예 다양한 이미지를 자유롭게 저장할 수 있는 공간이 만들어지게 된다.
    • 즉, 만든 저장소의 주소가 docker.pkg.dev/study-project/kube-study-registry 라면, 이미지의 이름은 docker.pkg.dev/study-project/kube-study-registry/hello-docker:1.0.0 과 같은 형식으로 구성되어야 한다.


      docker image 확인 방법



과제 실습해보기

과제 안내

  • nginx:1.27.0 이미지를 베이스 이미지로 하여 접속했을 때 "Hello, Docker!" 라는 문구가 출력되는 이미지를 만들고, 이를 컨테이너 레지스트리에 올려라.
  • 당연히 올린 후에는 이걸 다시 pull 해서 실행해보기

과제를 수행하기 위한 사전 지식

  • nginx 이미지를 통해 띄워진 웹사이트의 내용은 컨테이너 내의 /user/share/nginx/html 경로의 index.html파일의 내용에 따라 달라진다.

과제 해설

  1. 일단 이미지를 다운로드 받기

  2. 이미지를 8080포트에 실행시켜보기

  3. 컨테이너 실행된 것을 그대로 두고 컨테이너에 접속해보기

  4. /user/share/nginx/html 경로의 index.html파일에 접근

  5. 내용을 바꾸기

  6. index.html 파일을 만든 후, 내용을 “Hello, World!”로 채워준다.

  7. index.html 파일이 위치한 경로와 같은 곳에 Dockerfile을 생성하고, 아래와 같이 내용을 입력해 준다.

FROM nginx:1.27.0

WORKDIR /usr/share/nginx/html
COPY ./index.html ./index.html
  1. 이미지를 빌드하기

  2. 8080포트로 실행시켜보기

  3. 리포지토리에 push하기

profile
inkwon Hwang

0개의 댓글