Header Banner
Kakao Logo

TECH.KAKAO.GG

기술 자료/Docker/Docker Compose를 활용한 Java 애플리케이션 환경 구성

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

Docker
👁️ 1122개월 전

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;