MMeshOps
Docker와 Docker Compose: 개발 환경을 하나로 통일하는 도구
13예상 3입문

[요약] Part 3. 복잡한 시스템을 한 번에: Docker Compose

Part 3. 복잡한 시스템을 한 번에: Docker Compose의 핵심 내용을 정리하고 복습하는 요약 회차입니다.

  • 학습 목표: 도커 컴포즈(Docker Compose)를 활용한 다중 컨테이너 통합 관리 숙지
  • 핵심 가치: YAML 파일 하나로 프론트, 백엔드, DB를 한 번에 제어하는 선언적 오케스트레이션
  • 요약 포인트: 컴포즈 필수 명령어, 내부망 서비스 이름 통신, Health Check 기반 실행 순서 보장

docker-compose.yml 작성 예시

version: '3.8'
services:
  web:
    image: nginx
    ports:
      - "8080:80"

1. 컴포즈 핵심 명령어와 네트워크

  • 필수 명령어 암기:
  • `docker compose up -d`: 전체 컨테이너 백그라운드 일괄 실행
  • `docker compose down`: 네트워크 및 전체 컨테이너 일괄 종료 및 정리
  • `docker compose logs -f`: 전체 서비스의 로그를 실시간으로 모니터링
  • 내부 네트워크 통신:
  • IP 주소 암기 불필요
  • 컨테이너끼리는 `api`, `db` 등 서비스 이름을 도메인처럼 사용하여 직통 연결 가능

네트워크 연결 시 자주 하는 실수

오해 또는 실수

컨테이너 통신을 위해 항상 ports 옵션을 연다.

바로잡기

ports는 외부 접속용이며, 내부 통신은 포트 매핑 없이 서비스 이름만으로 가능합니다.

2. 완벽한 부팅 순서 제어 (depends_on)

  • 문제점: DB 컨테이너가 켜졌다고 해서 내부 DB 프로그램이 즉시 응답 가능한 것은 아님 (시차 발생)
  • 해결책: Health Check와 `depends_on`을 결합하여 완벽한 준비 상태 보장

순서 제어 방식 비교

방식설명결과
단순 depends_on지정된 컨테이너 실행 직후 바로 다음 컨테이너 실행DB 연결 에러 등 타이밍 문제 발생 위험
depends_on + Health Check선행 애플리케이션이 완전히 준비(Healthy)될 때까지 대기의존성에 맞는 안전하고 정확한 부팅 완료
  • Health Check 부가 효과: 부팅 순서 제어뿐만 아니라 장애 발생 시 자동 복구를 위한 핵심 지표로도 활용됨

개념 퀴즈

퀴즈 답을 맞춰야 학습 완료가 됩니다.

다음 중 도커 컴포즈 환경에서, 백엔드 컨테이너가 데이터베이스 컨테이너의 완벽한 부팅(응답 가능 상태)을 안전하게 기다렸다가 켜지게 만들기 위한 가장 적절한 방법은 무엇인가요?

3줄 요약

  1. 1도커 컴포즈는 docker-compose.yml 파일 하나로 여러 컨테이너를 한 번에 올리고 내리는 선언적 관리 도구입니다.
  2. 2컴포즈 환경 내에서는 복잡한 IP를 외울 필요 없이 서비스 이름(예: db, api)으로 컨테이너 간 통신이 가능합니다.
  3. 3Health Check와 depends_on 옵션을 결합하면 애플리케이션 레벨의 실행 순서를 안전하게 보장할 수 있습니다.