도커 컴포즈 (Docker Compose)

컴퓨터과학·AI
한 줄 정의: 여러 개의 도커 컨테이너로 구성된 애플리케이션을 하나의 설정 파일로 정의하고 한꺼번에 실행·관리할 수 있게 해주는 도구.

쉽게 풀면

실제 서비스는 데이터베이스, 웹 서버, API 서버처럼 여러 개의 컨테이너가 함께 동작해야 하는 경우가 많다. 도커 컴포즈는 이런 여러 컨테이너를 하나의 설정 파일(YAML)에 정의해 두고, 명령 하나로 전부 동시에 켜고 끄고 서로 연결할 수 있게 해주는 도구이다. 연구용 데모나 실험 파이프라인에서 데이터베이스와 처리 서버를 함께 띄워야 할 때 자주 활용된다.

왜 중요한가

연구 논문에서 소개하는 시스템이나 실험 파이프라인은 단일 프로그램이 아니라 여러 서비스가 협력하는 구조인 경우가 많아, 이를 재현 가능하게 공유하려면 각 컨테이너의 구성과 실행 순서를 명시적으로 정의할 필요가 있습니다. 도커 컴포즈는 이런 다중 컨테이너 구성을 코드로 남길 수 있게 해주어, 다른 연구자가 논문의 실험 환경을 그대로 재현하는 데 도움을 줍니다. 소프트웨어공학이나 시스템 분야 논문에서 재현성을 강조할 때 자주 언급되는 이유입니다.

논문에서는 이렇게 쓰입니다

"실험용 파이프라인은 docker-compose를 사용해 데이터베이스, 캐시 서버, 추론 서버를 함께 구동하도록 구성하였다."

여러 개의 독립된 컨테이너(데이터베이스, 캐시, 추론 서버)를 도커 컴포즈로 한꺼번에 관리하며 실험 시스템을 구성했다는 뜻이다.

"제안하는 벤치마크 환경은 docker-compose 설정 파일 하나로 재현 가능하도록 배포되었다."

소프트웨어공학 연구에서는 복잡한 실험 환경을 다른 연구자가 손쉽게 그대로 재현할 수 있도록 설정 파일을 논문과 함께 공개하는 경우가 많습니다.

"마이크로서비스 아키텍처의 각 구성요소를 docker-compose로 오케스트레이션하여 부하 테스트를 수행하였다."

분산 시스템 연구에서는 여러 개의 독립 서비스를 함께 띄우고 이들 간 상호작용을 실험적으로 측정할 때 이런 표현이 사용됩니다.

조금 더 깊게 보면

도커 컴포즈 설정 파일에는 각 컨테이너가 어떤 이미지를 쓰는지, 어떤 포트를 열고 어떤 네트워크로 서로 통신하는지, 데이터를 어디에 저장할지(볼륨) 등이 명시됩니다. 이런 구성 정보를 파일로 남겨두면 실행 환경 전체가 코드처럼 버전 관리되고 공유될 수 있어, 이를 "코드로서의 인프라(infrastructure as code)"라는 개념과 함께 설명하는 경우도 있습니다. 다만 여러 대의 서버로 규모를 확장해야 하는 상황에서는 도커 컴포즈만으로는 한계가 있어 쿠버네티스 같은 오케스트레이션 도구로 넘어가는 경우가 많습니다.

주의할 점

도커 컴포즈는 보통 한 대의 컴퓨터 안에서 여러 컨테이너를 관리하는 용도이며, 여러 대의 서버에 걸친 대규모 운영에는 쿠버네티스가 더 많이 쓰인다.

관련 용어