단일 컨테이너를 실행할 때는 docker run 명령어로 충분하지만, 웹 서버, DB, 레디스(Redis) 등이 얽힌 복잡한 애플리케이션을 관리하기엔 역부족입니다. 이때 필요한 것이 바로 여러 컨테이너를 하나의 서비스처럼 정의하고 실행하게 해주는 도커 컴포즈(Docker Compose)입니다.
도커 컴포즈란 무엇인가? YAML로 쓰는 인프라
도커 컴포즈는 애플리케이션의 인프라 구조를 docker-compose.yml이라는 파일에 명시적으로 정의합니다. "이 컨테이너는 어떤 이미지를 쓰고, 포트는 몇 번이며, 어떤 네트워크를 사용하는지"를 한눈에 파악할 수 있게 해주는 설계도와 같습니다.
명령어 한 줄로 전체 환경 구축
컴포즈의 가장 큰 매력은 docker-compose up 명령어 한 줄로 정의된 모든 컨테이너를 동시에 띄울 수 있다는 것입니다. 개발 환경 구축 시간을 획기적으로 단축해 주며, 팀원 간에 동일한 개발 환경을 공유하는 데도 탁월합니다.
depends_on: 컨테이너 실행 순서 제어
DB가 실행된 후에 웹 서버가 떠야 하는 경우, depends_on 옵션을 사용하여 컨테이너 간의 의존 관계를 정의할 수 있습니다. 비록 서비스가 완전히 준비될 때까지 기다려주는 기능은 아니지만, 실행 순서를 논리적으로 관리할 수 있습니다.
네트워크 환경의 자동 격리와 연결
도커 컴포즈로 실행된 컨테이너들은 자동으로 하나의 전용 네트워크에 묶입니다. 덕분에 컨테이너끼리 복잡한 IP 주소 대신 서비스 이름(예: db, api)만으로 서로 통신할 수 있어 설정이 매우 간결해집니다.
볼륨(Volume) 설정을 통한 데이터 영속성
컨테이너를 껐다 켜도 데이터가 사라지지 않게 하려면 로컬 디렉토리와 컨테이너 디렉토리를 연결해야 합니다. 컴포즈 파일에서 volumes 설정을 통해 소스 코드 동기화나 DB 데이터 보존을 손쉽게 구성할 수 있습니다.
환경 변수 관리의 편의성
API 키나 DB 비밀번호 같은 민감한 정보를 컴포즈 파일에 직접 적지 않고 .env 파일을 통해 주입할 수 있습니다. 이는 보안상 안전할 뿐만 아니라, 개발/테스트/운영 환경별로 설정을 다르게 가져갈 때도 유용합니다.
여러 대의 서버로 확장: replicas
테스트 환경에서도 부하 분산을 확인하고 싶다면 deploy 섹션의 replicas 옵션을 사용해 동일한 컨테이너를 여러 개 띄울 수 있습니다. 로드 밸런싱이 제대로 동작하는지 로컬에서 미리 확인해 볼 수 있는 좋은 방법입니다.
docker-compose.override.yml 활용하기
기본 설정 파일 외에 override 파일을 사용하면, 로컬 개발 환경에서만 필요한 설정(예: 디버그 모드 활성화)을 기본 파일 수정 없이 덧씌울 수 있습니다. 팀 공통 설정과 개인 설정을 분리하기에 매우 편리합니다.
리소스 제한(CPU, Memory) 특정 컨테이너가 시스템 자원을 독점하지 않도록 CPU 점유율이나 메모리 사용량을 제한할 수 있습니다. 실제 운영 환경과 유사한 리소스 제약 조건을 걸고 테스트해 봄으로써 안정성을 검증할 수 있습니다.
도커 컴포즈, 마이크로서비스의 시작
결론적으로 도커 컴포즈는 복잡한 시스템을 단순하게 관리할 수 있게 해주는 필수 도구입니다. 이제 복잡한 docker run 옵션들을 메모장에 적어두지 마세요. docker-compose.yml 파일 하나에 모든 노하우를 담아 관리하시길 바랍니다.
0 댓글