344 단어
2 분
docker-compose 구성
docker-compose.yml
services:
app:
volumes:
- ./.env:/app/.env
build:
context: .
dockerfile: Dockerfile
ports:
- "${APP_PORT}:8080"
environment:
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${DB_NAME}
SPRING_DATASOURCE_USERNAME: ${DB_USER}
SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}
SPRING_PROFILES_ACTIVE: ${PROFILE_ACTIVE}
# AWS 설정
AWS_ACCESS_KEY_ID: ${AWS_S3_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY: ${AWS_S3_SECRET_KEY}
AWS_REGION: ${AWS_S3_REGION}
AWS_S3_BUCKET: ${AWS_S3_BUCKET}
JVM_OPTS:
depends_on:
- db
db:
image: postgres:${POSTGRES_VERSION}
environment:
POSTGRES_DB: ${DB_NAME}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
ports:
- "5433:5432"
volumes:
- discodeit-data:/var/lib/postgresql/data
- ./sql:/docker-entrypoint-initdb.d
volumes:
discodeit-data:- 서비스에 필요한 환경 변수를
.env파일에 넣어두고,volumnes: - ././env:/app/.env를 사용하여 docker-compose에서 환경 변수를 사용할 수 있게 두었다. - 컨테이너가 재시작 되어도 데이터를 유지하기 위해
db섹션의volumes: - discodeit-data:/var/lib/postgresql/data를 사용했다. db섹션이 먼저 이루어지고 난 뒤app을 띄우기 위해depense on을 사용했다.- 현재 로컬에 있는 sql 파일을 실행해 데이터를 초기화 하기 위해서
./sql:/docker-entrypoint-initdb.d를 사용하여 실행시 데이터가 초기화되게 만들었다.
Dockerfile
# 빌드
FROM gradle:7.6-jdk17 AS builder
WORKDIR /app
# 프로젝트의 모든 파일을 컨테이너로 옮김
COPY . /app
RUN gradle build --no-daemon
FROM amazoncorretto:17
WORKDIR /app
# 80포트 쓸꺼라고 알림
EXPOSE 80
# 프로젝트 환경 변수
ENV PROJECT_NAME=discodeit
ENV PROJECT_VERSION=1.2-M8
ENV SPRING_PROFILES_ACTIVE=prod
ENV AWS_S3_BUCKET=""
ENV AWS_ACCESS_KEY_ID=""
ENV AWS_SECRET_ACCESS_KEY=""
ENV AWS_REGION=""
# 빌드 스테이지에서 만들어진 jar 파일을 현재 /app으로 옮기기
COPY --from=builder /app/build/libs/${PROJECT_NAME}-${PROJECT_VERSION}.jar .
# JVM 옵션 환경변수
ENV JVM_OPTS=""
CMD ["sh", "-c", "java $JVM_OPTS -jar ${PROJECT_NAME}-${PROJECT_VERSION}.jar --spring.profiles.active=${SPRING_PROFILES_ACTIVE}"]환경 변수를 위한 Dockerfile도 수정했다.
docker-compose 구성
https://realits.me/posts/docker-compose/