본문 바로가기

DevOps/Docker4

Docker Compose로 MongoDB Replica Set 자동 구성하기 (one-shot init 컨테이너 패턴 + docker host / container 관점 설명)1. 배경MongoDB Replica Set을 Docker Compose로 구성하다 보면 보통 이런 흐름을 겪는다.컨테이너는 잘 올라가는데rs.initiate()는 직접 실행해야 하고재기동할 때마다 “이미 초기화된 건지” 사람이 판단해야 한다이 상태는 실습 단계에서는 괜찮지만,운영 관점에서는 명백한 문제다.분산 시스템에서 “선출(election)”이 수동으로 남아 있다는 건자동화가 덜 끝났다는 뜻이기 때문이다.이번 글에서는:docker compose up -d 한 번으로MongoDB 3노드 Replica Set 기동레플리카셋 초기화 + PRIMARY 선출까지 자동으로 완료되는 구조를 one-shot init.. 2026. 2. 4.
Docker - Healthcheck, Liveness, Readiness 세 가지를 명확히 구분하자.컨테이너가 살아있는 상태컨테이너가 트래픽을 받을 수 있는 상태Docker와 Kubernetes가 이걸 어떻게 다르게 다루는지한 줄 요약Docker의 healthy는 readiness가 아니다.의미상으로는 liveness에 가깝다.Docker healthcheck 실습에서 무슨 일이 있었나다음과 같은 Docker healthcheck를 설정했다.healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 5s timeout: 2s retries: 3처음에는 /health 경로가 없어서 컨테이너 상태가 unhealthy였다.이후 컨테이너 안에서 다음 작업을 했다.echo "ok" > /usr/sh.. 2026. 2. 1.
Docker - Kafka를 Docker로 띄우면 왜 로컬에서는 붙었다가 실패할까? Kafka advertised.listeners 정리— “붙었다가 안 되는” 이유는 항상 여기였다Docker + 로컬 환경에서 Kafka를 띄웠을 때연결은 되는데 consume/produce에서 터지는 문제를 정리한 글이 글의 전제이 글은 아래를 이미 알고 있다고 가정한다.Docker bridge 네트워크 개념localhost / service name / host.docker.internal 차이로컬 애플리케이션 ↔ Docker 컨테이너 통신 구조👉 위 개념이 없다면, 먼저 이 글을 참고하는 걸 추천한다.👉 https://structuring.tistory.com/208문제 상황 요약다음과 같은 환경에서 Kafka를 사용하고 있었다.Kafka: Docker 컨테이너Kafka Connect: Dock.. 2026. 2. 1.
Docker - Docker와 로컬 환경 통신 — 왜 붙고, 왜 안 붙는지 주소 관점으로 이해하기Docker 네트워크 문제를 코드가 아니라“누가 누구를 어떤 주소로 보느냐” 기준으로 정리한 기록오늘의 한 줄 요약Docker 통신 문제의 90%는 주소 문제다.localhost, service name, host 주소만 구분하면 끝난다.배경로컬에서 Spring Boot 애플리케이션을 실행한 상태에서Docker로 여러 서비스를 띄워 연동 테스트를 진행했다.DB (예: MongoDB)외부 서비스 문제는 다음과 같았다.컨테이너 안에서는 되는데 로컬에서는 안 됨localhost로 붙었는데 연결 실패헬스체크는 실패하는데 서비스는 떠 있음결론적으로 네트워크 구조를 정확히 이해하지 못한 상태였다.Docker 네트워크 구조 한 장 요약Docker bridge 네트워크.. 2026. 1. 31.