반응형
지난 포스팅에서 ORM을 JPA로 하여 H2 DB와 연동하는 간단한 SpringBoot App을 만들어 보았다. 그럼 SpringBoot App과 h2 DB를 Docker Compose를 활용하여 컨테이너에 띄어보자.
Docker Image 만들기
컨테이너에 App을 띄우려면 도커 이미지가 필요하다. H2 이미지는 도커에서 제공하므로, 우리가 만든 SpringBoot App의 이미지를 만들어 보자.
Dockerfile
##### Build Stage #####
# 종속성 추출
# 빌드 작업을 위한 JDK 베이스이미지
FROM openjdk:11-jdk-slim as build
# 워킹 디렉토리 설정
WORKDIR /workspace/app
# 빌드에 필요한 Gradle 소스 복사
COPY gradle gradle
COPY build.gradle settings.gradle gradlew ./
COPY src src
# 빌드 진행
RUN ./gradlew bootJar # 빌드 진행
RUN mkdir -p build/libs/dependency && (cd build/libs/dependency; jar -xf ../*.jar) # 종속성 추출
##### Run Stage #####
# 실행 작업을 위한 JRE 베이스이미지
FROM openjdk:11-jre-slim
# 호스트 서버에 전달이 필요한 데이터 저장공간
VOLUME /tmp
# Arugument에 종속성 경로를 추가
ARG DEPENDENCY=/workspace/app/build/libs/dependency
# Build Stage에서 추출된 종속성 카피하기
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
# 실행하기
ENTRYPOINT ["java","-cp","app:app/lib/*","hello.hellospring.HelloSpringApplication"]
Multi Stage 빌드로 구성하였다.
Multi Stage에 대한 자세한 내용은 아래 포스팅을 참고하면 된다.
Docker Compose 파일 만들기
docker-compose.yml
version: "3"
services:
db: # db 서비스
container_name: h2 # 컨테이너 이름
image: oscarfonts/h2:latest # h2 이미지
ports: # 포트포워딩
- 1521:1521 # TCP 포트 : 데이터베이스 연결 포트
- 8081:81 # HTTP 포트 : 웹콘솔 연결 포트
environment: #h2 설정
H2_OPTIONS: -ifNotExists # DB가 이미 존재하면 재생성 X
volumes:
- ./h2/:/opt/h2-data # host 서버와 연결되는 통로 ( 저장 및 백업 경로 )
restart: always # 컨테이너 종료시 자동 재실행
app: # app 서비스
build:
context: . # Dockerfile 위치
dockerfile: Dockerfile # Docker 파일 이름
container_name: spring-app # 컨테이너 이름
ports: # 포트포워딩
- 5000:8080 # HTTP 포트 연결
environment: # spring app 설정
SPRING_DATASOURCE_URL: jdbc:h2:tcp://h2:1521/demo # h2 db url
SPRING_DATASOURCE_USERNAME: sa # h2 db id
SPRING_DATASOURCE_PASSWORD: # h2 db password
SPRING_JPA_HIBERNATE_DDL_AUTO: create # DDL 자동 생성
depends_on: # app 서비스 시작 전 실행되어야 하는 서비스
- db
도커 컴포즈 파일을 만들지 않고 단순히 docker run 으로 컨테이너를 실행하면 명령어가 길어지고 복잡해진다. 그러므로 두 개 이상의 컨테이너를 실행해야 하고 볼륨도 맞추어야 하고 포트포워딩 등이 필요한 경우 도커 컴포즈 파일을 만들어 실행하면 된다.
* 도커 컴포즈 실행 명령어 : docker-compose up
- docker-compose up 실행화면
- 도커 컨테이너 실행화면
- 홈화면 ( url : localhost:5000 )
- 저장화면
- 조회화면
- 저장 및 조회 시 SQL이 실행된 화면 ( JPA )
참고자료
반응형
'DevOps > DOCKER' 카테고리의 다른 글
[Docker] Nginx - React - Nodejs - Mysql 연동 실습하기 (0) | 2023.10.05 |
---|---|
[Docker] MultiStage란? (0) | 2023.09.22 |
[Docker] DockerHub에 이미지 올리고 다른 환경에서 실행하기 (0) | 2023.09.20 |
[Docker] 실습용 SpringBoot 프로젝트 만들기 (0) | 2023.09.18 |
[DOCKER] 우분투 리눅스에 도커엔진(Docker CE) 설치하기 (0) | 2022.11.19 |