344 단어
2 분
docker-compose 구성
2025-04-09
2025-04-12

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:
  1. 서비스에 필요한 환경 변수를 .env 파일에 넣어두고, volumnes: - ././env:/app/.env를 사용하여 docker-compose에서 환경 변수를 사용할 수 있게 두었다.
  2. 컨테이너가 재시작 되어도 데이터를 유지하기 위해 db 섹션의 volumes: - discodeit-data:/var/lib/postgresql/data를 사용했다.
  3. db 섹션이 먼저 이루어지고 난 뒤 app을 띄우기 위해 depense on을 사용했다.
  4. 현재 로컬에 있는 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/
저자
realitsyourman
게시일
2025-04-09
라이선스
CC BY-NC-SA 4.0