기본 서비스 정의를 넘어, Docker Compose는 실세계 사용을 위한 기능을 제공합니다 — 환경 관리, health check, 의존성 조건, profile, 네트워크/volume 구성, 확장(scaling), override — 이는 개발과 복잡한 스택에 더 강력하게 만듭니다.
기본 서비스 정의를 넘어, Docker Compose는 실세계 사용을 위한 기능을 제공합니다 — 환경 관리, health check, 의존성 조건, profile, 네트워크/volume 구성, 확장(scaling), override — 이는 개발과 복잡한 스택에 더 강력하게 만듭니다.
services:
app:
build: .
env_file: .env # 파일에서 환경 변수 로드
environment:
- NODE_ENV=production
ports:
- "${PORT:-3000}:3000" # 기본값을 가진 변수 치환
Compose는 유연하고 환경별 구성을 위해 .env 파일, 환경 변수, 변수 치환(${VAR:-default})을 지원합니다.
services:
db:
image: postgres:16
healthcheck: # 서비스가 정상인지 확인하는 방법 정의
test: ["CMD", "pg_isready", "-U", "postgres"]
interval: 5s
retries: 5
app:
build: .
depends_on:
db:
condition: service_healthy # db가 정상(HEALTHY)이 될 때까지 대기(단지 시작이 아니라)
condition: service_healthy(와 healthcheck)를 갖춘 depends_on은 서비스가 그 의존성이 실제로 준비될 때까지 — 단지 시작된 것이 아니라 — 대기하도록 보장합니다 — 흔한 "앱이 데이터베이스가 준비되기 전에 시작됨" 경쟁 상태를 해결합니다.
PROFILE → 선택적 서비스를 그룹화(예: 원할 때만 "debug" 도구 시작):
docker compose --profile debug up
OVERRIDE 파일 → docker-compose.override.yml이 자동 병합됨(개발 override);
또는 -f compose.yml -f compose.prod.yml로 환경별 구성
확장 → docker compose up --scale worker=3 (서비스의 인스턴스 3개 실행)
명명된 VOLUME 및 NETWORK → 최상위 수준에서 선언하고 구성
고급 Docker Compose 기능을 이해하는 것은 실세계 개발과 복잡한 스택에서 Compose를 효과적으로 사용하는 데 가치가 있으며, 기본 서비스 정의 위에 구축됩니다.
기본 Compose가 서비스를 정의하는 반면, 고급 기능은 실제 요구를 다룹니다. 환경 관리(.env 파일, 기본값을 가진 변수 치환)는 하드코딩 없이 유연하고 환경별 구성을 가능하게 합니다 — 동일한 compose 파일을 다양한 설정에 걸쳐 사용하는 데 중요합니다. 의존성 조건을 갖춘 health check(condition: service_healthy를 갖춘 depends_on)는 매우 흔하고 좌절스러운 문제를 해결합니다 — 애플리케이션 container가 그 데이터베이스가 실제로 연결을 받아들일 준비가 되기 전에 시작되어 시작 실패를 야기하는 경쟁 상태; 서비스가 진정한 준비(단지 container 시작이 아니라)를 기다리게 만드는 방법을 이해하는 것은 신뢰할 수 있는 멀티 컨테이너 시작에 실질적으로 중요합니다. profile(debug 도구 같은 선택적 서비스를 선택적으로 시작), override 파일(환경별 구성을 계층화, 예: 개발 override나 프로덕션 구성), 확장(서비스의 여러 인스턴스 실행)은 다양한 워크플로와 환경을 위해 Compose를 확장합니다.
이러한 기능은 Compose를 단순한 사소한 설정이 아니라 정교한 개발 환경과 복잡한 애플리케이션 스택에 적합하게 만듭니다.
실제 개발과 복잡한 애플리케이션은 구성 유연성, 적절한 시작 순서(단지 시작이 아니라 준비), 환경별 설정을 필요로 하고, Compose의 고급 기능(환경 관리, health check 기반 의존성, profile, override, 확장)이 이러한 요구를 다루므로, 고급 Docker Compose를 이해하는 것은 실제 프로젝트에서 Compose를 효과적으로 사용하는 데 가치 있고 실질적으로 관련된 지식이며, 그것을 기본 멀티 컨테이너 시작에서 복잡하고 구성 가능한 애플리케이션 스택을 관리하는 견고한 도구로 격상시킵니다 — 특히 health check 의존성 기능은 흔한 실세계 시작 신뢰성 문제를 해결합니다.