Docker ComposeDocker Java 애플리케이션Docker PostgreSQLDocker 환경 변수 관리docker

Docker Compose를 활용한 Java 애플리케이션 환경 구성

KUKJIN LEE
KUKJIN LEE
2025년 2월 25일
317

Docker Compose를 사용하면 여러 개의 컨테이너를 손쉽게 관리하고 실행할 수 있습니다. Docker Compose를 활용한 Java 애플리케이션과 데이터베이스(PostgreSQL) 환경 구성 방법을 살펴보겠습니다.

 

Docker Compose란?

Docker Compose는 여러 개의 Docker 컨테이너를 정의하고 관리할 수 있는 도구입니다. docker-compose.yml 파일을 작성하면 한 번의 명령어로 애플리케이션과 관련 서비스를 동시에 실행할 수 있습니다.

💡 Docker Compose를 사용할 경우 얻을 수 있는 장점
✅ 여러 개의 컨테이너를 쉽게 관리
✅ YAML 파일을 활용하여 환경 설정을 코드로 저장
docker-compose up 한 줄로 환경 구성 및 실행

 

프로젝트 구조

Docker Compose를 적용할 기본적인 디렉토리 구조입니다.

/java-docker-app
 ├── src/main/java/com/example/demo/DemoApplication.java
 ├── Dockerfile
 ├── docker-compose.yml
 ├── build.gradle 또는 pom.xml
 ├── .env (환경 변수 파일)
 └── app.jar (빌드된 JAR 파일)

docker-compose.yml 작성

Java 애플리케이션과 PostgreSQL 데이터베이스를 함께 실행하는 환경을 구성.

📌 docker-compose.yml

version: '3.8'

services:
  app:
    image: java-docker-app  # Java 애플리케이션 컨테이너
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydatabase
      SPRING_DATASOURCE_USERNAME: ${DB_USER}
      SPRING_DATASOURCE_PASSWORD: ${DB_PASSWORD}

  db:
    image: postgres:15  # PostgreSQL 최신 버전 사용
    container_name: postgres-db
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:
  • depends_on: db 서비스가 실행된 후 app 서비스가 실행되도록 설정

  • 환경 변수 설정 (SPRING_DATASOURCE_URL): 애플리케이션이 PostgreSQL과 연결되도록 설정

  • volumes: 데이터가 컨테이너가 종료되어도 유지되도록 설정 (단순 테스트 작성 불필요, 하지만 작성을 권장)


4. 환경 변수 파일 (.env) 작성

데이터베이스 접속 정보를 .env 파일에 저장하면 보안성과 유연성이 향상됩니다.

📌 .env 파일

DB_USER=myuser
DB_PASSWORD=mypassword

이제 docker-compose.yml에서 ${DB_USER}, ${DB_PASSWORD}를 사용하여 환경 변수를 불러올 수 있습니다.

 

Docker Compose 실행

📌 컨테이너 실행

docker-compose up -d
  • -d 옵션을 사용하면 백그라운드에서 실행됩니다.

 

📌 컨테이너 상태 확인

docker-compose ps

 

예시)

 Name                Command               State           Ports
---------------------------------------------------------------------------------
java-docker-app     "java -jar app.jar"   Up (running)   0.0.0.0:8080->8080/tcp
postgres-db         "docker-entrypoint.sh" Up (running)   0.0.0.0:5432->5432/tcp

 

📌 실행 중인 컨테이너 내부 접속해보기

docker exec -it postgres-db psql -U myuser -d mydatabase

PostgreSQL 데이터베이스 내부에서 SQL 명령어 실행 가능

SELECT * FROM pg_tables;
#Docker Compose#Docker Java 애플리케이션#Docker PostgreSQL#Docker 환경 변수 관리#docker