GCR을 이용한 배포는
다음과같이 간단한 구조를 가지고 있습니다.
1. Artifact Registry(Docker Image Repository) (Image)
2. Google Cloud Run (Container)
Artifact는 Docker Image를 저장해두는 리포지토리입니다.
Google Cloud Run은 Artifact저장소에서 하나의 도커 이미지를 선택해 해당 이미지로 컨테이너를 생성합니다.
생각해보면 아주 간단한 구조입니다.. 애초에 Cloud Run자체가 이런 구조를띄기 떄문에, 이러한 플로우를 이해하게된다면
CI / CD도 자연스럽게 이해가 될 수 있었습니다.
또한 Google Cloud Run은 서버리스를 기반으로 동작하기떄문에 , 필요한 플랫폼을 따로 설치하지않아도(java... 등) 간단하게 배포가
가능하다는점에서 이점을 가지고 있습니다.
이번 포스팅에서는 CI / CD를 제외한, 수동 배포 방식에대해서 설명드리도록 하겠습니다.
Dockerfile 생성
FROM openjdk:17-slim
COPY build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]
도커와 8080로 맞물린, 빌드된 스프링부트 jar파일로부터 컨테이너 이미지를 만드는 Dockerfile입니다.
Artifact Registry 생성
$ gcloud artifacts repositories create 프로젝트 이름/폴더 이름 \
--project=프로젝트 이름 --location=asia-east1\
--repository-format=docker --description="Docker repository"
위 커맨드를 입력하면, GCP상의 artifact registry에 내 저장소가 생성되게 됩니다.
Docker image 생성 (build)
내 로컬머신에서, Dockerfile을 이용해 빌드된 스프링부트 jar 파일을 컨테이너 이미지로 만들어 줍니다.
* (주의) Apple m1 머신에서 docker build 하는경우
m1에서의 docker image와, gcp에서 구동가능한 docker image는 플랫폼이 다릅니다. 따라서,
위와같은 방식을 사용하지 말고 , 아래와 같이 buildx를 이용해 gcp의 플랫폼에 맞는 x86용 docker image를 build 해주어야 합니다.
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t 이미지-이름 .
Docker image 푸시
빌드한 도커 이미지를 아까 만든 gcp artifact registry에 푸쉬해주어야 합니다. 그러기위해선,
해당 도커 이미지의 이름을 내 artifact registry의 경로명과 일치시켜주어야합니다.
docker tag 처음에만든-이미지-이름 asia-east1-docker.pkg.dev/프로젝트-이름/아티팩트-저장소-이름/이미지-이름
tag명령어를통해, 이미지이름을 변경시켜줍니다.
그 후 , artifact에 해당 docker image를 푸시해줍니다.
gcloud push asia-east1-docker.pkg.dev/프로젝트-이름/아티팩트-저장소-이름/이미지-이름
Cloud Run 만들기
서비스 만들기 버튼을 클릭합니다.
컨테이너 이미지 URL선택을 누른 후 , 아까 만든 레지스트리의 이미지를 선택하면 배포가 완료됩니다.
'Cloud > GCP' 카테고리의 다른 글
[GCP] application.properties의 민감한 정보 환경변수 등록하기 (0) | 2024.07.21 |
---|---|
[GCP] Cloud Build를 이용해, CI/CD 파이프라인 적용해보기 (0) | 2024.07.21 |