Quick Flow
services:
app:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://app:password@db:5432/app
depends_on:
db:
condition: service_healthy
db:
image: postgres:16
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: password
POSTGRES_DB: app
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d app"]
interval: 5s
timeout: 3s
retries: 20
start_period: 10s
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:docker compose config
docker compose up -d --build
docker compose ps
docker compose down # named volume은 기본으로 유지
docker compose down --volumesCompose file은 service의 image/build, environment, port, network, volume을 선언합니다. up은 현재 daemon의 project resource를 create 또는 reconcile하지만, dependency가 실제로 request를 받을 준비가 됐는지는 healthcheck·application retry로 따로 다룹니다.
application model
services는 같은 image와 configuration으로 실행할 component를 뜻하고, networks는 service 간 통신 범위, volumes는 persistent data resource를 뜻합니다. Compose는 이 선언을 active Docker context의 daemon에 적용합니다. 명시적 network가 없으면 project의 default network가 생성되고, 같은 network의 service는 service name으로 서로를 찾습니다.
services:
api:
image: my-api:1.2.3
redis:
image: redis:7위 api의 application은 redis:6379로 연결합니다. localhost는 api container 자신이므로 다른 service address가 아닙니다. network를 명시하면 service마다 연결할 network를 선언해 frontend/backend 경계를 나눕니다.
up과 down
docker compose up은 필요한 image build·pull, network·volume 생성, container create/start를 수행합니다. 같은 project에서 Compose file을 바꾼 뒤 다시 up하면 변경된 service를 재생성하거나 reconcile할 수 있으므로, CLI output과 docker compose ps로 실제 교체 범위를 확인합니다.
docker compose up -d --build
docker compose logs --follow app
docker compose ps
docker compose downdocker compose down은 project의 container와 default network를 제거하지만 named volume은 기본으로 지우지 않습니다. down --volumes는 named volume까지 삭제하므로 DB와 upload data를 초기화할 수 있습니다. external로 선언한 resource는 Compose가 만들고 지우는 대상이 아닐 수 있으므로 config 결과와 resource type을 확인합니다.
의존성과 검증
짧은 depends_on: [db]는 start 순서만 정할 뿐 DB readiness를 기다리지 않습니다. healthcheck가 있고 condition: service_healthy를 선언해도 application의 retry·timeout·migration 순서를 대신하지는 않습니다. readiness 조건의 정확한 선택은 Compose depends_on과 healthcheck 카드에서 다룹니다.
# interpolation·병합·profile을 반영한 최종 model 확인
docker compose config
# 실행 중 service의 상태와 health 확인
docker compose ps
docker compose logs --tail 100 dbdocker compose config는 YAML 오류만이 아니라 variable interpolation과 여러 Compose file의 결합 결과를 확인할 때 유용합니다. secret·environment·project name·profile 같은 운영 조건도 실행 전에 이 결과와 deployment environment에서 확인합니다.
Compose가 한 명령으로 stack을 올려 준다고 data lifecycle이나 startup failure가 자동 해결되지는 않습니다. down --volumes의 data deletion, service readiness, plaintext environment 노출, active context를 확인한 뒤 실행하십시오.
참고 링크
3 sources