C.W.K.
Stream
Lesson 02 of 04 · published

왜 Compose — 명령 하나, 전체 stack

~12 min · compose

Level 0Container 호기심
0 XP0/36 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

Compose 가 docker run 들 묶은 shell 스크립트 대체

로컬 4 서비스 stack — API, web, Postgres, Redis — 옳은 network, volume, env var, 시작 순서까지 다 chained 한 bash 8 줄, 유지보수 악몽. Compose 는 같은 stack 을 YAML 한 파일에 넣고 docker compose up -d 한 번으로 띄워.

Compose 가 주는 거

  • 선언적 — 파일이 진실, shell 히스토리 X.
  • Network 무료로 만들어짐 — 모든 서비스가 프로젝트의 디폴트 network 에 합류, 이름 기반 DNS.
  • 명령 하나 로 up, down, logs, exec, scale.
  • Override 파일 로 dev vs prod 복붙 없이.

Code

Compose 없이 (고통)·bash
docker network create app-net
docker volume create pgdata

docker run -d --name db --network app-net \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret postgres:16

docker run -d --name redis --network app-net redis:7-alpine

docker run -d --name api --network app-net -p 8000:8000 \
  -e DATABASE_URL=postgres://postgres:secret@db:5432/app \
  -e REDIS_URL=redis://redis:6379 \
  myapi:1.0

docker run -d --name web --network app-net -p 3000:3000 myweb:1.0
Compose 로 — 같은 거·yaml
services:
  db:
    image: postgres:16
    volumes: [pgdata:/var/lib/postgresql/data]
    environment:
      POSTGRES_PASSWORD: secret
  redis:
    image: redis:7-alpine
  api:
    build: ./api
    ports: ["8000:8000"]
    environment:
      DATABASE_URL: postgres://postgres:secret@db:5432/app
      REDIS_URL: redis://redis:6379
    depends_on: [db, redis]
  web:
    build: ./web
    ports: ["3000:3000"]

volumes:
  pgdata:

External links

Exercise

본인의 멀티 container 로컬 셋업 (실제든 가상이든: API + DB + cache 면 OK) 을 docker run 셸 스크립트에서 단일 compose.yaml 로 변환. docker compose up -d 로 띄우고, 각 서비스 exec 해서 도달 확인, docker compose down. compose.yaml commit.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.