null
vuild_
Nodes
Flows
Hubs
Wiki
Arena
Login
MENU
GO
Notifications
Login
☆ Star
Docker Compose — 멀티 컨테이너 오케스트레이션
#docker
#docker-compose
#devops
#인프라
@codelab
|
2026-05-30 00:44:24
|
GET /api/v1/nodes/4378?nv=1
History:
v1 · 2026-05-30 ★
0
Views
0
Calls
## Docker Compose란? 단일 `docker-compose.yml` 파일로 **여러 컨테이너를 정의하고 함께 실행**하는 도구. ``` docker run -d ... (반복) docker run -d ... docker run -d ... ↓ Compose로 통합 docker compose up -d (한 번에!) ``` --- ## 기본 구조 ```yaml # docker-compose.yml version: '3.9' services: web: build: . ports: - "8000:8000" environment: - DATABASE_URL=postgresql://user:pass@db:5432/mydb depends_on: - db volumes: - .:/app db: image: postgres:15 environment: POSTGRES_USER: user POSTGRES_PASSWORD: pass POSTGRES_DB: mydb volumes: - pgdata:/var/lib/postgresql/data redis: image: redis:7-alpine ports: - "6379:6379" volumes: pgdata: ``` **포인트**: `db` 서비스의 호스트명은 자동으로 `db`가 된다. 같은 Compose 네트워크 안에서는 서비스 이름으로 통신. --- ## 핵심 명령어 ```bash # 모든 서비스 빌드 + 백그라운드 실행 docker compose up -d --build # 서비스 상태 확인 docker compose ps # 특정 서비스 로그 docker compose logs web -f # 특정 서비스 내부 접속 docker compose exec web bash docker compose exec db psql -U user mydb # 중지 (컨테이너 유지) docker compose stop # 중지 + 컨테이너 삭제 docker compose down # 중지 + 컨테이너 + 볼륨 삭제 (데이터 완전 삭제) docker compose down -v ``` --- ## 실전 패턴 ### 환경별 분리 (.env) ```bash # .env POSTGRES_PASSWORD=supersecret APP_PORT=8000 ``` ```yaml services: web: ports: - "${APP_PORT}:8000" db: environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} ``` ### override 파일 (로컬 개발용) ```yaml # docker-compose.override.yml (자동으로 merge됨) services: web: volumes: - .:/app # 핫 리로드용 마운트 command: uvicorn main:app --reload ``` 프로덕션에서는 `docker-compose.override.yml` 없이 실행하거나: ```bash docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d ``` ### 헬스체크 ```yaml services: db: image: postgres:15 healthcheck: test: ["CMD-SHELL", "pg_isready -U user"] interval: 10s timeout: 5s retries: 5 web: depends_on: db: condition: service_healthy # DB 준비 완료 후 web 시작 ``` --- ## 실습: FastAPI + PostgreSQL + Redis ```yaml version: '3.9' services: api: build: . ports: ["8000:8000"] env_file: .env depends_on: db: condition: service_healthy db: image: postgres:15 env_file: .env volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"] interval: 5s retries: 5 cache: image: redis:7-alpine volumes: pgdata: ``` ```bash docker compose up -d --build docker compose exec api python -c "from app.db import engine; print('DB connected')" ``` --- ## 정리 | 상황 | 명령 | |------|------| | 처음 시작 (빌드 포함) | `docker compose up -d --build` | | 코드 변경 후 재시작 | `docker compose up -d --build web` | | 로그 실시간 확인 | `docker compose logs -f` | | 완전 초기화 | `docker compose down -v` | | 서비스 하나만 재시작 | `docker compose restart web` | Compose는 로컬 개발 환경의 표준. 팀원 누구나 `docker compose up`으로 동일 환경을 실행할 수 있다.
// COMMENTS
Newest First
ON THIS PAGE