Docker Compose로 로컬 개발환경 세팅하기 🐳
Docker Compose로 로컬 개발환경 세팅하기 🐳
왜 Docker Compose인가?
“내 컴퓨터에서는 되는데요?”
이 말을 안 하려면 Docker가 필수입니다. 특히 Docker Compose는 로컬 개발환경 구성에 있어서 게임 체인저입니다.
🎯 목표
이 글에서 만들 개발환경:
- FastAPI 백엔드
- PostgreSQL 데이터베이스
- Redis 캐시
- pgAdmin (DB 관리 도구)
📄 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
version: '3.8'
services:
# FastAPI 애플리케이션
api:
build:
context: .
dockerfile: Dockerfile
container_name: fastapi-app
ports:
- "8000:8000"
volumes:
- ./app:/app/app # 코드 변경 시 자동 반영
environment:
- DATABASE_URL=postgresql://postgres:password@db:5432/myapp
- REDIS_URL=redis://redis:6379
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# PostgreSQL
db:
image: postgres:16-alpine
container_name: postgres-db
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
# Redis
redis:
image: redis:7-alpine
container_name: redis-cache
ports:
- "6379:6379"
volumes:
- redis_data:/data
# pgAdmin
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
ports:
- "5050:80"
depends_on:
- db
volumes:
postgres_data:
redis_data:
🐍 Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
FROM python:3.12-slim
WORKDIR /app
# 시스템 의존성 설치
RUN apt-get update && apt-get install -y \
gcc \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Python 의존성 설치
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 소스코드 복사
COPY . .
# 포트 노출
EXPOSE 8000
# 실행
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
🚀 사용법
시작하기
1
2
3
4
5
6
7
8
# 모든 서비스 시작 (백그라운드)
docker-compose up -d
# 로그 확인
docker-compose logs -f api
# 특정 서비스만 재시작
docker-compose restart api
데이터베이스 접속
1
2
3
4
5
6
7
# psql로 직접 접속
docker-compose exec db psql -U postgres -d myapp
# pgAdmin 접속
# http://localhost:5050
# Email: admin@admin.com
# Password: admin
종료하기
1
2
3
4
5
# 서비스 종료 (데이터 유지)
docker-compose down
# 서비스 종료 + 볼륨 삭제 (데이터 초기화)
docker-compose down -v
💡 꿀팁
1. 개발용 vs 프로덕션용 분리
1
2
3
4
5
# docker-compose.override.yml (개발용, 자동 적용)
# docker-compose.prod.yml (프로덕션용)
# 프로덕션 실행
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
2. .env 파일 활용
1
2
3
4
5
# docker-compose.yml
services:
db:
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
1
2
# .env
DB_PASSWORD=super_secret_password
3. healthcheck 활용
서비스 간 의존성이 있을 때 depends_on만으로는 부족합니다. healthcheck를 설정하면 DB가 완전히 준비된 후 앱이 시작됩니다.
4. 볼륨으로 Hot Reload
1
2
volumes:
- ./app:/app/app # 소스코드 마운트
이렇게 하면 코드 수정 시 컨테이너 재빌드 없이 바로 반영됩니다.
🎯 마무리
Docker Compose를 쓰면:
- ✅ 팀원 모두 동일한 환경
- ✅ 원커맨드로 전체 인프라 구동
- ✅ 프로덕션과 유사한 환경에서 개발
처음 세팅이 조금 번거롭지만, 한번 해두면 정말 편합니다!
다음 글에서는 Kubernetes 로컬 개발환경 (k3d)을 다뤄보겠습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.