YS's develop story
GCP 에서 springboot 프로젝트 docker로 배포하기 본문
GCP로 이동합니다.
vm인스턴스 -> 인스턴스 생성
아래와 같이 설정했습니다.
가장 저렴한 비용으로 할 수 있습니다.
OS는 ubuntu로 했습니다.
vpc 네트워크 -> 외부 고정 ip 주소 예약을 클릭해 고정 ip주소를 할당합니다.
생성된 인스턴스에 ssh를 통해 연결하고 도커를 설치합니다
아래는 도커공식문서에서 가져온 설치 방법입니다.
$ 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 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를 이제 사용할 수 있습니다.
'Spring' 카테고리의 다른 글
spring jpa에 Querydsl 적용하기 [spring 3.1.5, java 17] (0) | 2023.12.06 |
---|---|
springboot certbot으로 ssl인증서 받아서 https로 배포하기 (1) | 2023.11.30 |
[Spring] request시 notnull값 controllerAdvice로 처리해서 response보내기 (1) | 2023.11.24 |
Jpa @CreatedDate, @LastModifiedDate 어노테이션이 적용 (0) | 2023.11.22 |
Spring, Docker에서 MySQL 데이터베이스 컨테이너 설정하기 (0) | 2023.11.19 |