지난 포스트에서 Oracle Instance를 생성하고 접속하는 방법을 알아 보았습니다.
이어서 Spring Boot 애플리케이션을 docker를 사용하여 배포하는 방법을 알아보겠습니다.
Docker Desktop이 설치되어 있고, docker hub계정이 있다고 가정하고 진행하겠습니다.
1편에서 oracle cloud db를 생성하고 전자지갑을 통해서 Spring Boot 애플리케이션에서 접속하는 방법을 설명 알려드렸었습니다.
local PC에 받은 전자지갑을 리눅스 서버에 옮겨서 TLS인증 통해 커넥션할 수 있는 방법도 있지만 번거롭다고 느껴서 TLS 인증 없이 커넥션하는 방법을 알려드리겠습니다.
자율 운영 데이터베이스 접속하여 네트워크란의 mTLS(상호 TLS)인증을 필요없을 으로 편집합니다.
엑세스 제어 목록을 열어서 oracle cloud instance의 public ip를 등록 시켜줍니다.
local PC에서도 접속하여 테스트 해보고 싶다면 내 IP 주소 추가를 클릭합니다.
데이터베이스 접속버튼을 클릭하여 접속 문자열을 복사해줍니다.
Spring boot yaml의 datasource 정보를 수정해줍니다.
url의 @ 뒤 쪽에 복사해두었던 접속 문자열을 붙혀넣기 해주시면 됩니다.
datasource:
url: jdbc:oracle:thin:@{복사해두었던 접속 문자열}
username: {아이디(admin으로 자동생성)}
password: {비밀번호}
도커 이미지 생성을 위한 Dockerfile을 프로젝트 최상단에 생성해줍니다.
아래 내용을 Dockerfile에 입력해줍니다.
{build파일명}에 각자 프로젝트에 맞도록 값을 수정해 주어야하는데 보통 프로젝트명 을 입력해주시면 됩니다.
정확하게 확인하고 싶다면 build를 하면 build/libs 하위에 jar파일이 생성되는데 이를 참고해주시면 됩니다.
FROM amazoncorretto:17 AS builder
WORKDIR /app
COPY gradlew build.gradle settings.gradle ./
COPY gradle ./gradle
COPY src/main ./src/main
RUN sed -i 's/\r//' ./gradlew && ./gradlew bootJar
# Final stage
FROM amazoncorretto:17
WORKDIR /app
COPY --from=builder /app/build/libs/{build파일명}-*.jar app.jar
ENV PROFILE="dev"
ENTRYPOINT java -jar app.jar --spring.profiles.active=$PROFILE
주요 절차를 설명하면 아래와 같습니다.
- amazoncoreetto의 jdk 17을 사용하여 build
- build된 jar파일을 app.jar 라는 파일 명으로 복사
- 환경변수를 "dev"로 설정
- 엔트리 포인트를 사용하여 애플리케이션 JAR를 실행
docker image를 올리기 위한 저장소를 생성해줍니다.
https://hub.docker.com/
원하는 저장소 이름을 입력 후 Create 버튼을 클릭해줍니다.
cmd창을 통해 spring boot 프로젝트 경로로 이동 후 아래 명령어를 통해 이미지를 생성해 줍니다.
로그인이 필요하다는 메시지가 나온다면 docker login 명령어를 통해 로그인을 진행해줍니다.
docker build -t {Docker계정 이름}/{저장소 이름}:{태그} .
아래 명령어를 통해 docker hub에 이미지를 저장합니다.
docker push {Docker계정 이름}/{저장소 이름}:{태그}
지난 포스트에 설명했던 방법으로 MobaXterm을 통해 Oracle Cloud Instance에 접속해줍니다.
sudo su -
apt update
apt install docker.io
docker version
docker run -d --name {원하는 이름} -p 80:8080 {Docker계정 이름}/{저장소 이름}:{태그}
docker logs {원하는 이름}
Oracle Cloud Instance의 공용 IP를 통해 접속을 하면 정상적으로 접속된 것을 확인할 수 있습니다.