피드로 돌아가기
Dev.toDevOps
원문 읽기
Docker Compose 설정에서 서비스, 볼륨, 네트워크의 명확한 분리 없이 다중 컨테이너를 구성하면 지속적 데이터 손실과 연결 실패가 발생한다
Docker Compose Configuration
AI 요약
Context
단일 컨테이너 환경에서는 정상 작동하지만, 데이터베이스와 캐시가 추가되면 포트 충돌, 데이터 소멸, 서비스 연결 실패가 발생한다. 이 문제의 원인은 Docker 자체가 아니라 구성 파일을 임시 스크립트처럼 취급하는 접근 방식에 있다.
Technical Solution
- docker compose 파일에서 "version" 키를 제거하고 최신 문법만 사용한다
- 익명 볼륨 대신 명명된 볼륨을 명시하여 컨테이너 종료 시 데이터가 유지되도록 한다
- 네트워크를 명시적으로 정의하여 서비스 간 통신 경로를 제어한다
- depends_on 조건과 healthcheck를 함께 사용하여 컨테이너가 아닌 서비스 내부 준비 완료를 대기한다
- .env 파일로 환경 변수를 관리하고, latest 태그 대신 고정 버전을 지정한다
Impact
healthcheck를 적용하면 부트 시 랜덤 연결 실패를 방지하고, 배포 전 docker compose config 검증으로 YAML 들여쓰기 오류와 포트 충돌을 사전에 감지한다.
Key Takeaway
Docker Compose는 단일 호스트에서 소규모 서비스를 관리하기 적합하며, 머신 간 스케일링이나 로드 밸런싱이 필요하면 Kubernetes로 전환해야 한다.
실천 포인트
PostgreSQL과 같은 상태 저장 서비스를 docker compose로 구성할 때 healthcheck와 명명된 볼륨, 명시적 네트워크를 적용하면 재시작 후에도 데이터가 유지되고 서비스 연결 실패를 방지할 수 있다