IT/Cloud & DevOps

컨테이너 레지스트리란? GCP Artifact Registry 로 실습해보기

iamhyeon 2025. 4. 20. 10:05

💡컨테이너 레지스트리란?

- 컨테이너 이미지를 저장하고 관리하는 공간이다
- 도커 이미지를 만들면, 그 이미지를 어디엔가 저장해두고, 필요할 때 꺼내서 실행해야 한다 
- 그 저장소가 바로 컨테이너 레지스트리(Container Registry) 이다

 

- 도커 이미지가 없으면 컨테이너를 실행할 수 없다
- 다음과 같은 작업이 필요하다
    - 이미지를 만든다 (docker build)
    - 어딘가에 저장한다 (docker push)
    - 저장된 이미지를 다른 서버나 클러스터에서 가져온다 (docker pull)
- 이 모든 흐름의 중심이 되는 것이 레지스트리이다 

 

 

|  퍼블릭 vs 프라이빗 레지스트리

  설명 대표 서비스 
퍼블릭 레지스트리 누구나 접근 가능, 검색 가능 Docker Hub
프라이빗 레지스트리 소유자 또는 허용된 사용자만 접근 가능 AWS ECR, GCP Artifact Registry, GitHub Container Registry 등

- 보안상 이유로 실제 서비스 배포 시에는 프라이빗 레지스트리를 사용하는 것이 일반적이다

 

 

|  클라우드별 컨테이너 레지스트리

클라우드 서비스 이름 특징 
AWS ECR (Elastic Container Registry) IAM으로 접근 제어
GCP Artifact Registry 여러 언어 패키지 + 컨테이너 이미지 지원
Azure ACR (Azure Container Registry) Azure Active Directory 통합
GitHub GitHub Container Registry (ghcr.io) 오픈소스/프라이빗 모두 지원

 

 

💡 Artifact Registry란?

- Artifact Registry는 Google Cloud에서 제공하는 컨테이너 이미지, 패키지 등을 저장하고 관리하는 중앙 저장소다.
- 기존의 Container Registry(GCR)를 대체하는 서비스로, 더 정교한 권한 관리, 리전 설정, 리포지토리 단위 관리가 가능하다.

Artifact Registry의 특징
- Docker, Maven, npm, Python 등 다양한 형식 지원
- IAM 기반 세분화된 권한 제어 가능
- Private 또는 Public 저장소 운영 가능
- VPC 네트워크 및 Cloud Build, GKE와 통합 용이


 

🔶 GCP Artifact Registry 사용해보기 

1. Artifact Registry 저장소 만들기
2. gcloud auth configure-docker 명령으로 로컬 Docker와 인증 연결
3. docker build -t [이미지주소] . 로 이미지 생성
4. docker push [이미지주소] 로 업로드 클러스터에서 이미지 주소로 pull 받아 사용

 

 

(⚠️ GCP에서 GKE 클러스터 만들기  ⬇️)

2025.04.19 - [IT/Cloud & DevOps] - 클라우드 환경에서 쿠버네티스 클러스터 만들기

 

 

✅ GCP 콘솔에서 ‘Artifact Registry’를 검색해 아티팩트 레지스트리 서비스에 접속한다

 

 

✅ 화면 상단의 ‘저장소 만들기’ 버튼을 클릭해 저장소 생성 화면에 진입한다

 

 

✅ 저장소의 이름을 입력하고 형식은 ‘Docker’를 선택해준다

     위치 유형은 ‘리전’을 선택 후 리전을 ‘asia-northeast-3’로 선택한다 

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

 

 

✅ 만들어진 저장소의 상세 화면에 진입한 후, 화면 상단의 ‘설정 안내’ 버튼을 클릭한다 

 

 

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

- Docker와 Artifact Registry 연결 (권한 및 인증)

- Windows에서 CMD를 통해 해당 명령어를 입력하는 경우

- `\` 를 제거하고 모두 한줄로 입력하거나,

- `\` 대신 `^` 기호를 입력한다
- CLI 환경에서 `\` 은 일반적으로 하나의 명령어를 여러 줄에 걸쳐 입력하는 경우 사용하는 기호인데, CMD는 `\` 기호 대신 `^` 기호를 사용하도록 하고 있다 

 

 

 

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

 

✅ `<저장소 주소>/<이미지명>:<버전>` 형식으로 이미지를 만들어 잘 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 build -t `저장소 주소`/`이미지명`:`버전` .

예) docker build -t asia-northeast3-docker.pkg.dev/rare-shadow-457105-s7/kube-study-registry/hello-docker:1.0.0 .

 

naming to asia-northeast3-docker.pkg.dev/rare-shadow-457105-s7/kube-study-registry/hello-docker:1.0.0

=> 이 메시지가 나왔다는 건,
- hello-docker:1.0.0 이미지를 네임태그로 잘 만들었다는 뜻
- Dockerfile과 demo.jar도 문제 없이 잘 인식되었고, 캐시도 활용되었다. 

 

 

|  이미지 푸시

docker push `저장소 주소`/`이미지 이름`:`버전`

 

 

 

=>  이 주소에 이미지가 업로드되었고, Kubernetes에서 사용 가능한 상태 

=>  이미지를 Artifact Registry에 푸시했다 

 

 

|  이미지 전체 경로 예시 설명

asia-northeast3-docker.pkg.dev/rare-shadow-457105-s7/kube-study-registry/hello-docker:1.0.0

 

레지스트리 asia-northeast3-docker.pkg.dev 이미지가 저장되는 중앙 저장소 서비스 주소 (DockerHub, GCR 등)
프로젝트 /
레포지토리
rare-shadow-457105-s7/kube-study-registry GCP 프로젝트 내의 저장소 경로
이미지 이름 hello-docker 실제 애플리케이션 이미지의 이름
태그 1.0.0 버전 또는 특정 상태 (latest, dev, 1.0.0 등)

 

 

|  이미지 확인

docker images

 

 

|  실행해보기

docker pull asia-northeast3-docker.pkg.dev/rare-shadow-457105-s7/kube-study-registry/hello-docker:1.0.0
docker run -p `호스트포트 : 컨테이너포트` asia-northeast3-docker.pkg.dev/rare-shadow-457105-s7/kube-study-registry/hello-docker:1.0.0

 

localhost:`호스트포트`  접속해서 나오는지 확인!

 


 

👉🏼👉🏼👉🏼

 

- 컨테이너 레지스트리는 이미지를 저장하고 배포할 수 있는 저장소이다 
- DockerHub는 가장 널리 쓰이는 퍼블릭 레지스트리이다 
- 보안을 위해 클라우드 프라이빗 레지스트리를 사용하는 것이 일반적이다 
- GCP에서는 Artifact Registry를 사용하면 Kubernetes, Cloud Run 등과 연동하기 쉽다