Oh My Algorithm
Concept Guide서비스 그래프 · 선언형

멀티 컨테이너 (Docker Compose)

실제 앱은 컨테이너 하나로 끝나지 않습니다. 웹·API·데이터베이스를 각각 띄우고 네트워크로 잇고 볼륨을 붙이는 일을 `docker run` 여러 번으로 하면 재현이 어렵습니다. Compose 는 이 구성을 YAML 파일 하나에 선언해 두고 `docker compose up` 한 번으로 전체를 세우며, 서비스 이름이 곧 네트워크 상의 호스트 이름이 됩니다.

01멀티 컨테이너 (Docker Compose)

실제 앱은 컨테이너 하나로 끝나지 않습니다. 웹·API·데이터베이스를 각각 띄우고 서로 잇는 일을 docker run 여러 번으로 하면 재현이 어렵습니다.

Compose 는 이 구성을 YAML 한 장에 선언해 둡니다. 명령의 나열이 아니라 '이런 상태였으면 좋겠다'는 선언입니다.

up 하면 먼저 이 프로젝트 전용 네트워크를 만들고 모든 서비스를 그 안에 띄웁니다.

서비스 이름이 그대로 DNS 이름이 됩니다. api 는 IP를 몰라도 환경변수 DB_HOST=db 만으로 데이터베이스에 붙습니다.

바깥으로 여는 포트는 web 하나뿐입니다. api 와 db 는 네트워크 안에서만 보이므로 외부에 노출되지 않습니다.

db 의 데이터는 pgdata 볼륨에 둡니다. 볼륨은 컨테이너 바깥에 있어서, compose down 으로 컨테이너를 전부 내려도 그대로 남습니다.

depends_on 은 기동 '순서'만 정합니다. db 컨테이너가 떴다는 것과 포스트그레스가 접속을 받을 준비가 됐다는 것은 다릅니다.

그래서 실제로는 헬스체크나 애플리케이션 쪽 재시도를 함께 둡니다. 순서만 믿으면 첫 기동에서 연결 실패가 납니다.

docker run web …docker run api …
1 / 8

정리

파일 하나로 전체 환경이 재현되고, 서비스 이름이 주소가 되며, 지켜야 할 상태는 볼륨에 남습니다. 팀원 모두가 같은 환경을 한 명령으로 세웁니다.

02 쉽게 이해하기

For Everyone
🔑핵심 동작

여러 컨테이너의 구성을 YAML 한 장에 선언해 두고 한 번에 세웁니다. 서비스 이름이 그대로 네트워크 주소가 되고, depends_on 은 기동 순서만 정할 뿐 준비 완료를 보장하지 않습니다.

💡쉽게 말하면

compose 파일에 서비스별 이미지·포트·환경변수·볼륨을 적으면, up 할 때 전용 네트워크를 만들고 각 서비스를 그 안에 띄웁니다.

서비스 이름이 DNS 이름이 되므로 API 는 `db:5432` 로 데이터베이스에 붙습니다.

depends_on 은 기동 순서만 정할 뿐 준비 완료를 보장하지 않아, 실제로는 헬스체크나 재시도를 함께 둡니다.

📍어디에 쓰나
  • 로컬 개발 환경 재현
  • 통합 테스트 환경 구성
  • 여러 서비스의 의존 관계·기동 순서 정의
  • 팀원 간 환경 공유

03 자주 묻는 질문

FAQ
멀티 컨테이너 (Docker Compose)란 무엇인가요?+

실제 앱은 컨테이너 하나로 끝나지 않습니다. 웹·API·데이터베이스를 각각 띄우고 네트워크로 잇고 볼륨을 붙이는 일을 `docker run` 여러 번으로 하면 재현이 어렵습니다. Compose 는 이 구성을 YAML 파일 하나에 선언해 두고 `docker compose up` 한 번으로 전체를 세우며, 서비스 이름이 곧 네트워크 상의 호스트 이름이 됩니다.

멀티 컨테이너 (Docker Compose)은(는) 어디에 사용하나요?+

로컬 개발 환경 재현, 통합 테스트 환경 구성, 여러 서비스의 의존 관계·기동 순서 정의, 팀원 간 환경 공유

멀티 컨테이너 (Docker Compose)를 쉽게 비유하면?+

여러 컨테이너의 구성을 YAML 한 장에 선언해 두고 한 번에 세웁니다. 서비스 이름이 그대로 네트워크 주소가 되고, depends_on 은 기동 순서만 정할 뿐 준비 완료를 보장하지 않습니다.