docker-compose.yml 기본 구조
YAML
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
depends_on:
db:
condition: service_healthy
volumes:
- ./logs:/app/logs
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: secret
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
interval: 10s
timeout: 5s
retries: 5
volumes:
pg_data:자주 쓰는 명령
Bash
# 빌드 + 시작 (백그라운드)
docker compose up -d --build
# 특정 서비스만 재시작
docker compose restart app
# 로그 실시간 확인
docker compose logs -f app
# 실행 중인 컨테이너 상태
docker compose ps
# 컨테이너 내부 접속
docker compose exec app sh
# 모두 중지 + 네트워크/볼륨 제거
docker compose down -v
# 스케일 업 (app 서비스 3개 실행)
docker compose up -d --scale app=3환경 파일 분리
Bash
# .env 파일 (기본으로 자동 로드)
DB_PASSWORD=secret
APP_PORT=3000YAML
# docker-compose.yml에서 사용
environment:
DB_PASSWORD: ${DB_PASSWORD}
APP_PORT: ${APP_PORT}Bash
# 환경별 오버라이드
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d리소스 제한
YAML
services:
app:
image: myapp:latest
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256MNginx + App + DB 실전 구성
YAML
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./certbot/conf:/etc/letsencrypt:ro
depends_on:
- app
app:
build:
context: .
dockerfile: Dockerfile
expose:
- "3000"
env_file:
- .env
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- pg_data:/var/lib/postgresql/data
- ./sql/init.sql:/docker-entrypoint-initdb.d/init.sql
env_file:
- .env.db
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
interval: 10s
retries: 5
restart: unless-stopped
volumes:
pg_data:편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서Docker 공식 문서 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.