Docker Compose
여러 개의 컨테이너를 정의하고 실행하기 위한 도구
수많은 컨테이너들의 설정과 실행 순서, 네트워크 연결을 관리하는 지휘자 역할
기존에는 명령어를 통해 관리하였지만 이는 기억하기도 어려울 뿐더라 하나하나의 명령어를 숙지하는 것이 매우 어려움
Compose를 통해 서버가 어떻게 구성되어야 하는지를 파일로 저장
docker-compose.yml
version: '3.8'
services:
mysqldb:
image: mysql:8.0
container_name: mysqldb
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
volumes:
- ./db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
app:
build: .
container_name: my-app
ports:
- "8000:8000"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/${MYSQL_DATABASE}?useSSL=false&allowPublicKeyRetrieval=true
SPRING_DATASOURCE_USERNAME: ${SPRING_DB_USERNAME}
SPRING_DATASOURCE_PASSWORD: ${SPRING_DB_PASSWORD}
depends_on:
mysqldb:
condition: service_healthy
트러블 슈팅 - DB 연결 오류 해결
Connection Refused. 스프링 부트가 켜지자마자 죽어버림
depends_on은 컨테이너가 생성된 것만 확인 가능
MySQL은 내부 프로세스 로딩에 시간이 걸림.
DB가 준비되지 않은 상태에서 앱이 접속을 시도해서 발생한 경쟁 상태 문제가 발생.
MySQL이 ping에 응답할 때까지 앱 실행을 대기
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
feat: Docker Compose 기반 로컬 개발 환경 구성 by 0hj1hyeon · Pull Request #12 · 0hj1hyeon/distributed
보안 위한 gitignore 수정 Docker Compose 기반 로컬 개발 환경 구성
github.com
'분산 처리 환경' 카테고리의 다른 글
| 스프링 분산 처리 환경 15: MSA (0) | 2026.01.15 |
|---|---|
| 스프링 분산 처리 환경 14: Nginx 로드밸런싱 (1) | 2026.01.02 |
| 스프링 분산 처리 환경 12: Kubernetes (0) | 2025.12.18 |
| 스프링 분산 처리 환경 11: Docker (0) | 2025.12.14 |
| 스프링 분산 처리 환경 10: 중간 정리 (0) | 2025.11.23 |