안녕하세요. J4J입니다.
이번 포스팅은 SpringBoot 환경 구축하는 방법에 대해 적어보는 시간을 가져보려고 합니다.
들어가기에 앞서 다음 글을 참고하시면 좋을 것 같습니다.
사전 준비
[ 1. 소스 코드 ]
STS와 같은 IDE를 사용했을 때 동작이 잘 이루어지고 있는 SpringBoot 소스 코드가 필요합니다.
제가 구현한 것은 포스트맨을 이용해 API를 호출해보면 다음과 같은 결과를 만들어줍니다.
[ 2. Datasource 설정 ]
해당 부분은 DB 연결을 위해 설정한 Datasource의 url이 localhost로 되어 있는 분들만 참고해주시면 됩니다.
Docker를 이용해 SpringBoot를 동작시킬 경우 localhost로 Datasource를 설정하면 정상 동작되던 것도 정상적으로 동작이 이루어지지 않을 것입니다.
그 이유는 다음과 같기 때문입니다.
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
[ 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 logs be-con // 지금까지 동작된 것 확인
$ docker logs -f be-con // 강제 종료할 때까지 컨테이너에서 동작되는 모든 로그 즉각 확인
이상으로 SpringBoot 환경 구축하는 방법에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Infra, Cloud > Docker' 카테고리의 다른 글
[Docker] Nginx 환경 구축 (0) | 2022.02.01 |
---|---|
[Docker] Next 환경 구축 (0) | 2022.02.01 |
[Docker] MySQL 환경 구축 (0) | 2022.01.24 |
[Docker] Docker Compose 설치하기 (Ubuntu 20.04) (0) | 2022.01.23 |
[Docker] Docker 설치하기 (Ubuntu 20.04) (0) | 2022.01.20 |
댓글