코딩스토리

GCR을 사용하여 private하게 Cloud Run에 Docker Image 배포하기 본문

Google Cloud Platform

GCR을 사용하여 private하게 Cloud Run에 Docker Image 배포하기

kimtaehyun98 2022. 7. 28. 00:06

앞선 포스팅에서 Spring boot 서버를 docker를 사용하여 돌려보고 image를 생성하였다.

 

https://kimtaehyun98.tistory.com/150

 

Spring 프로젝트로 Docker Image 만들기

현재 진행 중인 프로젝트에서 Cloud Run을 사용하여 서버를 배포하려고 한다. Cloud run은 앞선 포스팅에서 설명했듯이 컨테이너 기반의 Instance를 서버리스 형태로 실행하게 된다. 자세한 설명은 아

kimtaehyun98.tistory.com

 

현재 프로젝트의 아키텍처는 아래와 같기 때문에 Cloud Run을 사용하여 docker image를 배포해야 한다.

 

 

여러 가지 방법이 있겠지만, 원래라면 docker hub에 저장하고 Cloud Run에서 해당 hub를 보고 배포하는 방법이 있다.

 

하지만 docker hub는 public 하고, 나는 private을 원하기 때문에 위의 방법으로는 배포할 수 없다.

(물론 docker hub 유료 플랜으로 private이 있지만.. 돈을 쓰고 싶진 않았다.. 😆)

 

이런 경우에 GCP의 container registry를 사용하면 된다.

 

GCR(Google Container Registry)는 쉽게 말하면 Github의 private repository라고 생각하면 된다.

 

 

1) 프로젝트 생성 및 세팅

 

먼저 GCP에 가입 후 프로젝트를 생성한다.

(생성 안 하면 아무것도 안 보임.. 😭)

 

프로젝트 생성 시 프로젝트 ID를 입력하라고 하는데 이 부분을 기억해놓자.

 

깜빡하고 캡처를 못했지만 아마 GCP를 처음 들어간다면 프로젝트를 생성해야 한다고 대문짝만 하게 나올 것이다.

 

프로젝트를 생성했다면, 검색에서 gcr 누른 다음에 들어가서 API 사용을 허용해준다.

 

 

2) docker image push

 

이제 docker의 tag 기능을 통해 docker image를 GCP 배포에 맞게 build 해준다.

 

docker tag [SOURCE_IMAGE] gcr.io/[PROJECT-ID]/[IMAGE]

 

 

[SOURCE_IMAGE]에는 자신이 기존에 배포했던 docker Image를 넣으면 된다.

[PROJECT-ID]에는 앞서 프로젝트를 생성할 때 기억해놓았던 ID를 입력한다.

[IMAGE]에는 새롭게 생성할 image 이름을 입력하면 된다.

 

 

이렇게 제대로 image가 생성되었다면, gcr에 push 한다.

docker push gcr.io/[PROJECT-ID]/[IMAGE]

 

GCP 들어가 보면 아래와 같이 나온다.

 

해당 폴더를 누르면 이미지를 확인할 수 있다. 그리고 바로 Cloud Run에 배포 가능!

 

 

그리고 배포 설정을 마무리한다.

각 설정을 보면 이해하기 어렵진 않다.

 

나도 처음 써보는 거라 뭐가 좋고 나쁘다를 판단할 수가 없어서 현재 서비스에 필요한 설정으로 맞추었다.

 

 

세팅

  • 최대 인스턴스 수 = 1 (내 프로젝트는 인스턴스가 많을 필요가 없다. 어차피 한 번 호출로 해결하기 때문에. 각자의 상황에 맞추기)
  • 요청 시간제한 600 (현재 프로젝트 서비스 로직이 대략 2~3분을 소요한다. 콜드 부팅 등 혹시 몰라서 10분으로 늘려놓음)
  • Memory 8GB, CPU 2개 (메모리는 AWS EC2를 돌릴 때 작게 잡았다가 서버가 터진 경우가 있어서 시원하게 크게 잡았다.)

(딴 건 몰라도 고급 설정에서 메모리는 꼭 늘려주기!! 500MB면.. 아마 웬만한 서비스 돌아가다 멈출 듯..? 🤔)

 

혹시나 세팅을 했는데도 자꾸 제대로 입력하라는 에러가 뜬다면 위의 사진에서 사용 설정을 눌러서 Cloud Run Admin API 사용 설정을 완료하고 나갔다가 다시 들어오기!

(그러면 없던 리전 선택 화면이 생김 두둥 ‼️)

 

이렇게 세팅을 끝내고 완료를 누르면 완성!!!!

 

이제 위의 URL을 복붙 해서 PostMan에서 테스트해보면..!

 

 

콜드 스타트가 있음이 확실하다.

단순하게 String을 반환하는 테스트용 API임에도 응답을 받기까지 꽤나 오래 걸린다. (약 10초)

 

즉 부팅 시간이 10초 정도 된다는 것이다.

 

앞서 여러 번 말했듯이 Cloud Run은 서버리스이기 때문에 부팅 시간이 필요하다.

 

해당 사실을 알고 있었고, 우리가 사용하려는 서비스 로직에서 전혀 문제 될 것이 없었기 때문에 사용하였다.

 

이번에 GCP에 배포해보면서 느낀 점은.. 배포하기 너무 편하다.

 

서버가 항상 떠 있어야 하는 게 아니고 우리처럼 일정 주기마다 한 번씩만 로직을 실행해야 한다면 최고의 선택일 것 같다.

Comments