본문 바로가기
Infra, Cloud/Docker

[Docker] SpringBoot 환경 구축

by J4J 2022. 1. 26.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 SpringBoot 환경 구축하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

들어가기에 앞서 다음 글을 참고하시면 좋을 것 같습니다.

 

 

 

 

사전 준비

 

[ 1. 소스 코드 ]

 

STS와 같은 IDE를 사용했을 때 동작이 잘 이루어지고 있는 SpringBoot 소스 코드가 필요합니다.

 

제가 구현한 것은 포스트맨을 이용해 API를 호출해보면 다음과 같은 결과를 만들어줍니다.

 

구현 결과

 

 

 

[ 2. Datasource 설정 ]

 

해당 부분은 DB 연결을 위해 설정한 Datasource의 url이 localhost로 되어 있는 분들만 참고해주시면 됩니다.

 

Docker를 이용해 SpringBoot를 동작시킬 경우 localhost로 Datasource를 설정하면 정상 동작되던 것도 정상적으로 동작이 이루어지지 않을 것입니다.

 

그 이유는 다음과 같기 때문입니다.

 

SpringBoot 배포 환경

 

 

반응형

 

 

Docker는 기본적으로 Docker Container라는 새로운 OS 환경을 구축하고 그 내부에서 Spring을 동작시킵니다.

 

그렇기 때문에 내부에서 동작되고 있는 Spring이 생각할 때 localhost는 Docker Container 내부를 의미하기 때문에 실제 localhost에서 실행되고 있는 DB를 인지하지 못합니다.

 

이를 해결하고자 Datasource의 url은 다음과 같이 설정해주시면 됩니다.

 

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://{내 PC IP}:3306/blog?serverTimezone=UTC
    username: dockeradm
    password: dockeradm!01

 

 

 

SpringBoot 환경 구축 방법

 

[ 1. 도커 설치 ]

 

위에 링크를 걸어둔 [Docker] MySQL 환경 구축을 참고해주시길 바랍니다.

 

 

 

[ 2. Dockerfile 작성 ]

 

root위치에 Dockerfile이라는 이름으로 파일 하나를 생성해줍니다.

 

Dockerfile의 용도는 SpringBoot가 실행될 수 있는 환경이 마련되어 있는 이미지를 생성해주기 위함입니다.

 

그리고 생성된 이미지를 이용해 Docker Container를 동작시킵니다.

 

 

 

SpringBoot의 Dockerfile에서는 소스코드를 빌드하고 빌드된 파일을 실행될 수 있는 설정을 해줘야 합니다.

 

저는 Maven을 이용하여 구현했기 때문에 다음과 같이 Dockerfile을 작성해줄 수 있습니다.

 

# maven 이미지 불러오기
FROM maven:3.8.4-jdk-11

# Docker Container에서 작업이 이루어지는 위치
WORKDIR /root

# 현재 경로에 있는 모든 파일을 Docker Container의 WORKDIR 위치로 모두 복사 (이미지 생성할 때 동작)
COPY ./ ./

# WORKDIR에서 maven을 이용해 build하기 (이미지 생성할 때 동작)
RUN mvn clean package -DskipTests

# build되어 만들어진 jar파일 실행하기 (컨테이너 실행할 때 동작)
CMD ["java", "-jar", "target/be-0.0.1-SNAPSHOT.jar"]

# profile 설정이 필요한 경우
# CMD ["java", "-Dspring.profiles.active=dev", "-jar", "target/be-0.0.1-SNAPSHOT.jar"]

 

 

 

[ 3. Dockerfile로 이미지 만들기 ]

 

현재까지 저의 폴더 구성은 다음과 같습니다.

 

폴더 구조

 

 

 

Dockerfile을 이용할 거기 때문에 터미널을 이용해 be폴더로 접근해줍니다.

 

그 뒤에는 다음의 명령어를 이용하여 이미지를 빌드해줍니다.

 

$ docker build -t be-img . // .경로에 있는 Dockerfile을 이용하여 be-img라는 이름의 이미지로 빌드하기

 

 

 

빌드 단계까지 거치기 때문에 어느 정도의 시간이 소요될 것이고 모든 작업이 완료되었다면 다음 명령어를 입력하여 be-img라는 이미지가 잘 생성되었는지 확인해줍니다.

 

$ docker images

 

 

728x90

 

 

[ 4. 컨테이너 생성 및 실행하기 ]

 

이미지가 만들어졌다면 다음 명령어를 이용하여 컨테이너를 생성하고 실행해줄 수 있습니다.

 

$ docker run --name be-con -p 8080:8080 -d be-img
// --name be-con: 컨테이너 이름을 be-con으로 지정
// -p 8080:8080: 포트 설정, 컨테이너 외부에서 8080포트로 들어오는 것은 컨테이너 내부의 8080포트가 동작
// -d: 데몬으로 실행 (컨테이너에게 실행하라고 명령만 보내기)
// be-img: be-img라는 이름의 이미지를 이용하여 컨테이너 생성 및 실행

 

 

 

컨테이너가 정상적으로 동작된 것은 다음 명령어를 이용해 확인해줄 수 있습니다.

 

$ docker ps -a

 

 

 

정상 실행되었다면 다음과 같이 be-con이라는 이름의 컨테이너가 조회될 것이고 STATUS에는 몇 초전에 실행되었다는 표시가 보일 것입니다.

 

컨테이너 확인

 

 

 

[ 5. 포스트맨 테스트 ]

 

모든 게 올바르게 수행되었다면 포스트맨에서 Docker를 사용하지 않고 나왔던 결과와 동일한 결과를 확인할 수 있습니다.

 

Docker 구현 결과

 

 

 

만약 올바르게 동작되지 않는다고 하면 다음 명령어를 이용해 컨테이너 로그를 확인하여 그에 맞는 대응을 해주시면 될 것 같습니다.

 

$ docker logs be-con // 지금까지 동작된 것 확인
$ docker logs -f be-con // 강제 종료할 때까지 컨테이너에서 동작되는 모든 로그 즉각 확인

 

 

 

 

 

 

 

 

이상으로 SpringBoot 환경 구축하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글