목. 8월 14th, 2025

D: 🚀 개발자라면 한 번쯤 겪는 고민
“로컬에서 웹 서버, DB, 캐시 서버를 각각 띄우려니 명령어가 너무 복잡해!”
“테스트 환경마다 컨테이너 설정이 달라서 매번 헷갈려…”

이런 문제를 해결해줄 Docker Compose의 매력에 대해 상세히 알아보겠습니다.


🔍 Docker Compose가 뭐길래?

Docker Compose는 여러 개의 Docker 컨테이너를 하나의 파일(docker-compose.yml)로 정의하고, 명령어 한 줄로 전체 환경을 관리할 수 있는 도구입니다.

👉 예시 시나리오

  • 웹 애플리케이션 (Node.js)
  • 데이터베이스 (MySQL)
  • 캐시 시스템 (Redis)
  • 로그 수집기 (Elasticsearch)

이 모든 걸 각각 docker run으로 실행하면 명령어가 길어지지만, Compose로는 YAML 파일 하나로 간결하게 정의 가능합니다.


✨ 핵심 기능 3가지

  1. 멀티 컨테이너 정의
    • 서비스 간 의존성, 네트워크, 볼륨을 한 번에 설정
  2. 환경 변수 관리
    • .env 파일과 연동해 보안 정보 분리 가능
  3. 단일 명령어 제어
    • docker-compose up / down으로 전체 시작/종료

🛠️ 실전 예제: 웹 + DB + Redis 구성

version: '3.8'

services:
  web:
    image: node:14
    ports:
      - "3000:3000"
    volumes:
      - ./app:/usr/src/app
    depends_on:
      - db
      - redis

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql

  redis:
    image: redis:alpine

volumes:
  db_data:

📌 주요 설정 설명

  • depends_on: 웹 서버가 DB와 Redis보다 나중에 시작되도록 보장
  • volumes: DB 데이터 영구 저장 (컨테이너 삭제 시 데이터 유지)
  • environment: 비밀번호 같은 민감 정보는 실제로는 .env 파일로 분리 권장

💡 고급 활용 팁

1. 프로파일로 환경 분리

services:
  web:
    # ...  
    profiles: ["development"]  # 개발 시에만 실행

  monitoring:
    image: prometheus
    profiles: ["monitoring"]  # 모니터링 필요 시 선택 실행

👉 docker-compose --profile monitoring up

2. 커스텀 네트워크 구성

networks:
  app_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24

3. 빌드 + 배포 한 번에

web:
  build: ./dockerfiles  # Dockerfile 경로 지정
  image: my-custom-image:latest  # 빌드 후 태그

❓ 자주 묻는 질문

Q. Docker Compose vs Kubernetes?

  • Compose: 로컬/소규모 환경용 (단일 호스트)
  • K8s: 대규모 클러스터 관리용

Q. 기존 docker run 명령어를 Compose로 변환하려면?
👉 docker run -p 8080:80 nginx

services:
  nginx:
    image: nginx
    ports:
      - "8080:80"

🎯 마무리: 왜 Compose를 써야 할까?

  • 생산성 향상 ⏳: 반복적인 명령어 입력 X
  • 환경 일관성 🔄: 개발/테스트/운영 환경 동기화
  • 협업 용이 👥: docker-compose.yml 파일 공유로 설정 공유

💡 초보자라면?
도커 공식 문서의 Compose 샘플로 연습해보세요!

이제 팀원들에게 “설치는 docker-compose up 한 줄이에요!” 라고 말할 수 있게 되었습니다. 🎉

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다