지난 포스팅에서 Spring Boot 환경에서 jib로 docker 이미지를 올리는 법을 알아보았습니다.
https://developer-jp.tistory.com/90
Dockerfile 설정하기
이번에는 jib를 쓰지않고 직접 Dockerfile을 만들어 해보겠습니다. Spring Boot, Gradle 환경으로 진행해보겠습니다.
우선 Spring Boot 프로젝트의 최상위 경로에 확장자 없이 Dockerfile을 만들어서 아래처럼 입력합니다.
# Dockerfile
FROM gradle:jdk17-alpine AS builder
COPY --chown=gradle:gradle . /gradle
WORKDIR /gradle
RUN gradle build --no-daemon
FROM openjdk:17-oracle
RUN mkdir /app
COPY --from=builder /gradle/build/libs/*.jar /app/app.jar
ARG PROFILE
ENTRYPOINT ["java", "-Dspring.profiles.active=${PROFILE}", "-jar", "/app/app.jar"]
EXPOSE 8080
java 17에 gradle 환경입니다.
ARG PROFILE은 docker-compose 파일에서 설정한 환경변수로 적용되는 변수입니다.
Docker-Compose 파일 설정하기
docker-compose.yaml 파일 설정입니다. docker-compose.yaml 파일의 위치는 모든 도커 프로젝트들의 최상위에 위치해야합니다. 아래의 예시로 한번 만들어 보겠습니다.
- 폴더 구조 예시
# 예시 :
# 하나의 서버에 spring boot 프로젝트와 redis를 docker로 같은 컨테이너에 올릴 때
<Root> #project folder
<SpringBoot Project> # spring boot project folder
-Dockerfile
<Redis> # redis folder
-redis.conf
-Dockerfile
-docker-compose.yaml
-test.env
- docker-compose.yaml 파일 설정
version: "3.4"
services:
<your-spring-boot-project-name>:
container_name: <your-spring-boot-project-name>
build:
context: ./<your-spring-boot-project-location>
cache_from:
- openjdk:17-oracle
environment:
# - REDIS_HOST=test-redis
# - REDIS_PORT=${REDIS_PORT}
- PROFILE=${PROFILE}
#depends_on:
# - test-redis
volumes:
- ./<your-spring-boot-project-location>:/<mount-location>
ports:
- "${PORT}:8080"
# test-redis:
# container_name: "test-redis"
# build:
# context: ./redis # Redis folder location
# volumes:
# - ./redis/redis.conf:/etc/redis.conf
# - /redis-data
# ports:
# - "${REDIS_PORT}:6379"
# command: redis-server /etc/redis.conf
Redis를 설정한다면 주석을 풀면되는데, application.yml 파일에서도 아래처럼 바꿔줘야 합니다.
# spring boot project application.yml
spring:
data:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
위 예제는 단일 서버 기준으로 설정한 것이다. 오토스케일링을 생각한다면 redis는 분리하여 따로 띄워야한다.
환경변수 설정
위에서 PROFILE이나 PORT등의 변수를 볼 수 있는데, 이 경우 .env파일을 만들어서 도커 명령어 실행 시 적용하면 됩니다. 예시로 만들어 보겠습니다.
# test.env
PROFILE=dev
PORT=8080
REDIS_PORT=6379
Docker Image 빌드 및 실행
도커 빌드 명령문으로 차례대로 실행하면 됩니다.
# 도커 빌드
docker compose build
# 도커 컨테이너 실행
docker compose --env-file test.env up -d
반응형
'Architecture' 카테고리의 다른 글
패키지 매니저(저장소)를 구축해보자(Verdaccio) [1] (0) | 2023.09.01 |
---|---|
Kubernetes 관리(GUI) 툴 OpenLens에 대해 알아보자 (0) | 2023.08.13 |
SSO (Single Sign On)란? (0) | 2017.09.07 |
JWT의 이해 (0) | 2017.08.30 |
REST의 이해 (2) | 2017.08.29 |