YS's develop story

GCP 에서 springboot 프로젝트 docker로 배포하기 본문

Spring

GCP 에서 springboot 프로젝트 docker로 배포하기

Yusang 2023. 11. 25. 12:43

 

 

GCP로 이동합니다.

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

vm인스턴스 -> 인스턴스 생성

 

 

아래와 같이 설정했습니다.

가장 저렴한 비용으로 할 수 있습니다.

OS는 ubuntu로 했습니다.

 

 

 

vpc 네트워크 -> 외부 고정 ip 주소 예약을 클릭해 고정 ip주소를 할당합니다.

 

 

생성된 인스턴스에 ssh를 통해 연결하고 도커를 설치합니다

아래는 도커공식문서에서 가져온 설치 방법입니다.

 

Install Docker Engine on Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on Ubuntu.

docs.docker.com

$ sudo apt-get update
$ sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

$ sudo mkdir -m 0755 -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ sudo docker --version

 

 

docker compose 또한 설치합니다.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
$ docker-compose -v

 

 

도커 이미지를 생성하기 위한 dockerfile을 생성해야 합니다.

인텔리제이에서 프로젝트 최상단에 Dockerfile을 생성하면 됩니다.

저는 env파일을 사용해 key값을 저장했기에 아래와 같은 docker file을 생성했습니다.

FROM openjdk:17-jdk-slim-buster
COPY build/libs/yanolja-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
# 작업 디렉토리 생성
WORKDIR /app

# 소스 코드 및 .env 파일 복사
COPY . .

# .env 파일을 WORKDIR로 복사
COPY .env .env

ENTRYPOINT ["java", "-jar", "/app.jar"]

 

 

yml파일에서 datasource부분을 env파일에 있는 값을 사용하는 방식으로 사용했습니다.

DB는 GCP에 Cloud SQL를 사용했습니다.

spring:
  config:
    activate:
      on-profile: docker

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: ${DBURL}
    username: ${DBUSER}
    password: ${DBUSER}

 

 

bootJar을 통해 jar파일을 빌드해 줍니다

 

 

 

docker hub에서 repositories를 생성합니다.

 

Docker Hub Container Image Library | App Containerization

Build and Ship any Application Anywhere Docker Hub is the world's easiest way to create, manage, and deliver your team's container applications. Create your account Signing up for Docker is fast and free. Continue with GoogleContinue with GitHubContinue wi

hub.docker.com

 

이제 도커 이미지를 만들어 줍니다.

docker build -t liyusang799/test . -> .을 붙어야 합니다.

docker build -t (본인닉네임)/(레포이름) .

 

그리고 

docker push liyusang799/test 

docker hub로 push합니다.

 

 

 

아까 생성한 vm 인스턴스를 ssh를 통해 연결합니다.

sudo vim docker-compose.yml을 통해 docker-compose.yml파일을 생성합니다.

version: '3'
services:
  application :
    image : test
    env_file: .env
    environment:
      SPRING_DATASOURECE_URL: 
      SPRING_DATESOURECE_USERNAME: 
      SPRING_DATASOURCE_PASSWORD: 
      SPRING_PROFILES_ACTIVE: dev
    restart: always
    container_name: test
    ports:
      - "8080:8080"

그리고 저는 env파일에서 값을 가져오는 코드들이 있어 env파일을 같은 경로에 넣어주어야 합니다.

gcp에서 지원하는 파일업로드를 통해 같은 경로에 env파일을 넣었습니다.

 

 


그리고 docker hub에서 accesstoken을 발급받고 sudo docker login -u (이름)을 통해 로그인해 줍니다.

password는 토큰을 발급받아서 확인할 수 있습니다.

 

 

 

sudo docker pull liyusang799/test

sudo docker pull (이름)/(레포이름)

을 통해서 생성된 도커 이미지를 가져와서

아까 만들어둔 docker-compose.yml을 실행시키면 됩니다.

 

sudo docker compose up이 명령어입니다.

 

 

 

관련 명령어들입니다.

현재 실행 중인 도커 이미지들을 확인합니다.

docker ps

 

 

실행중단

docker stop my_container

 

 

 

도커 이미지 삭제

sudo docker rmi -f my_container

 

 

배포된 api를 이제 사용할 수 있습니다.

 

 

 

Comments