GCP 에서 springboot 프로젝트 docker로 배포하기
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를 이제 사용할 수 있습니다.