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

KUKJIN LEE • 1개월 전 작성
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;