Docker 리드·아키텍트 트러블슈팅 면접
새 면접Q. 프로덕션 환경에서 특정 마이크로서비스 컨테이너들이 주기적으로 OOMKilled 상태가 되어 재시작을 반복하고 있습니다. 메모리 limit은 2GB로 설정되어 있고, 평소에는 1.5GB 정도 사용하다가 갑자기 spike가 발생합니다. 이 문제를 체계적으로 진단하고 해결하기 위한 접근 방법과 단계별 조치사항을 설명해주세요.
메모리 사용 패턴 분석, 커널 메모리와 애플리케이션 메모리 구분, 그리고 모니터링 데이터 확보가 우선입니다.
먼저 docker stats와 cAdvisor를 통해 실시간 메모리 사용 패턴을 모니터링하고, docker inspect로 현재 메모리 설정을 확인합니다. docker logs로 OOM 발생 시점의 애플리케이션 로그를 분석하고, /sys/fs/cgroup/memory 경로에서 memory.stat을 확인하여 cache, RSS, swap 사용량을 구분합니다. 메모리 프로파일링 도구로 애플리케이션 레벨의 메모리 누수를 확인하고, 필요시 memory reservation과 limit을 분리 설정합니다. 근본 원인이 애플리케이션 코드라면 코드 수정, 인프라 문제라면 리소스 재조정 또는 horizontal scaling으로 전환하며, Prometheus + Grafana로 메모리 사용 추이를 지속 모니터링하는 알림 체계를 구축합니다.
- • docker stats, cAdvisor, memory.stat을 통한 다층적 메모리 사용량 분석
- • cache와 RSS 메모리를 구분하여 실제 애플리케이션 메모리 사용량 파악
- • 메모리 프로파일링과 로그 분석으로 애플리케이션 레벨 이슈 진단
- • memory reservation 설정과 horizontal scaling을 통한 구조적 해결
대규모 트래픽 환경에서 컨테이너 메모리 최적화는 인프라 비용과 안정성에 직접적인 영향을 미칩니다.
memory limit과 memory reservation을 함께 사용할 때의 전략과, Kubernetes 환경에서 requests와 limits를 어떻게 다르게 설정하시겠습니까?
Q. 멀티 호스트 Docker Swarm 환경에서 특정 서비스 간 통신이 간헐적으로 실패하는 현상이 발생하고 있습니다. 같은 overlay network에 있는 컨테이너들인데, 약 30% 정도의 요청이 connection timeout으로 실패합니다. 이 문제의 원인을 찾기 위한 디버깅 전략과 확인해야 할 네트워크 레이어별 체크포인트를 설명해주세요.
overlay network의 VXLAN 터널, DNS 라운드로빈, iptables 규칙, 그리고 커널 파라미터를 순차적으로 확인해야 합니다.
먼저 docker network inspect로 overlay network 설정과 연결된 컨테이너 목록을 확인하고, docker service ps로 태스크 배치 상태를 점검합니다. nsenter나 docker exec로 컨테이너 네트워크 네임스페이스에 진입해 ping, traceroute, tcpdump로 패킷 흐름을 추적합니다. iptables -L -t nat와 iptables -L -t filter로 NAT 규칙과 방화벽 설정을 확인하고, VXLAN 인터페이스(vxlan)의 MTU 설정이 올바른지 검증합니다. 내장 DNS 서버의 로드밸런싱 이슈를 확인하기 위해 dig나 nslookup으로 서비스 디스커버리를 테스트하고, conntrack 테이블 오버플로우 여부를 sysctl net.netfilter.nf_conntrack_count로 확인합니다. 원인 파악 후 MTU 조정, conntrack 테이블 크기 증가, 또는 external load balancer 도입 등의 해결책을 적용하고, 네트워크 모니터링 도구로 지속 관찰합니다.
- • overlay network의 VXLAN 터널과 MTU 설정 검증
- • iptables NAT 규칙과 conntrack 테이블 상태 분석
- • 내장 DNS 서비스 디스커버리와 로드밸런싱 동작 확인
- • 네트워크 네임스페이스 레벨에서 패킷 추적 및 원인 격리
마이크로서비스 아키텍처에서 컨테이너 간 네트워크 안정성은 전체 시스템 가용성의 핵심 요소입니다.
Swarm의 ingress network와 overlay network의 차이점과, 각각의 장애 포인트는 어떻게 다릅니까?
Q. 프로덕션 데이터베이스 컨테이너의 I/O 성능이 갑자기 급격히 저하되어 쿼리 응답 시간이 10배 이상 증가했습니다. Docker volume을 사용하고 있으며, 호스트는 AWS EBS를 백엔드로 사용합니다. 스토리지 레이어 전반에 걸친 성능 병목 지점을 찾고 해결하기 위한 진단 프로세스를 설명해주세요.
컨테이너 레이어, volume driver, 파일시스템, 블록 디바이스 각 레벨에서의 I/O 메트릭을 수집해야 합니다.
먼저 iostat과 iotop으로 호스트 레벨의 디스크 I/O 사용률과 대기 시간을 확인하고, docker stats로 컨테이너별 block I/O를 모니터링합니다. docker volume inspect로 volume driver와 마운트 옵션을 확인하고, df와 du로 디스크 공간 사용률을 점검합니다. fio나 dd를 사용해 sequential/random read/write 성능을 벤치마크하여 기준치와 비교합니다. overlay2 스토리지 드라이버의 경우 docker system df로 이미지 레이어와 컨테이너 레이어의 공간 사용을 분석하고, 필요시 docker system prune으로 정리합니다. AWS CloudWatch로 EBS 볼륨의 IOPS와 throughput 메트릭을 확인하여 프로비저닝된 용량 대비 사용률을 검증합니다. 원인에 따라 EBS 볼륨 타입 변경(gp3, io2), volume 마운트 옵션 최적화(noatime), 또는 데이터베이스 설정 튜닝을 수행하고, 장기적으로는 전용 스토리지 솔루션 도입을 검토합니다.
- • 호스트, 컨테이너, 볼륨 각 레벨에서의 I/O 메트릭 수집 및 분석
- • 스토리지 드라이버와 파일시스템 마운트 옵션의 영향 평가
- • 클라우드 블록 스토리지의 IOPS/throughput 제한 확인
- • 벤치마크 도구를 통한 정량적 성능 측정 및 비교
데이터베이스 컨테이너의 I/O 성능은 전체 애플리케이션 성능에 직접적인 영향을 미치므로 정확한 진단이 필수입니다.
컨테이너 환경에서 stateful 애플리케이션의 스토리지 전략으로 volume, bind mount, tmpfs를 각각 언제 선택하시겠습니까?
Q. CI/CD 파이프라인에서 Docker 이미지 빌드가 특정 단계에서 간헐적으로 실패하는 현상이 발생합니다. 실패 메시지는 'failed to export image: failed to solve: unexpected EOF'이며, 같은 Dockerfile로 재시도하면 성공하기도 합니다. 이런 비결정적 빌드 실패의 원인을 찾고 안정화하기 위한 접근 방법을 설명해주세요.
네트워크 불안정성, 레이어 캐싱, BuildKit 설정, 그리고 레지스트리 연결 상태를 점검해야 합니다.
먼저 docker build에 --progress=plain 옵션을 추가해 상세 빌드 로그를 확보하고, 어느 레이어에서 실패하는지 정확히 파악합니다. BuildKit 사용 시 DOCKER_BUILDKIT=1 환경변수와 builder 인스턴스 상태를 docker buildx ls로 확인합니다. 외부 패키지 저장소나 베이스 이미지 pull 단계에서 실패한다면 네트워크 타임아웃 설정을 늘리고, Dockerfile에 retry 로직이나 --retry 옵션을 추가합니다. docker system df로 빌더 캐시 공간을 확인하고, 필요시 docker builder prune으로 정리합니다. 레지스트리 연결 문제라면 docker login 상태와 credential helper 설정을 검증하고, 프라이빗 레지스트리의 경우 네트워크 정책과 인증서를 확인합니다. 근본적으로는 multi-stage build로 의존성을 명확히 분리하고, 외부 의존성은 내부 artifact repository로 미러링하며, 빌드 재시도 정책을 CI/CD 파이프라인에 구현합니다.
- • 상세 빌드 로그 확보를 통한 정확한 실패 지점 파악
- • BuildKit 캐시와 네트워크 연결 안정성 검증
- • 외부 의존성의 내재화 및 retry 메커니즘 구현
- • CI/CD 파이프라인 레벨의 빌드 안정성 강화
CI/CD 파이프라인의 안정성은 개발 생산성과 배포 신뢰성에 직접적인 영향을 미칩니다.
대규모 조직에서 Docker 이미지 빌드 속도와 안정성을 개선하기 위한 아키텍처 수준의 전략은 무엇입니까?
Q. 프로덕션 환경에서 Docker daemon이 응답하지 않아 모든 컨테이너 관리 명령이 hang 상태가 되었습니다. 실행 중인 컨테이너들은 정상 동작하고 있지만, docker ps 같은 명령어가 무한 대기합니다. 서비스 중단 없이 이 상황을 복구하고, 재발 방지를 위한 근본 원인을 찾는 과정을 설명해주세요.
Docker daemon의 상태, containerd/runc 프로세스, 그리고 /var/lib/docker의 메타데이터 상태를 확인해야 합니다.
먼저 systemctl status docker로 daemon 프로세스 상태를 확인하고, journalctl -u docker로 최근 로그를 분석합니다. ps aux로 dockerd, containerd, docker-containerd-shim 프로세스들의 상태와 리소스 사용률을 점검합니다. strace -p로 dockerd 프로세스를 추적해 어디서 blocking되는지 파악하고, lsof로 열린 파일 디스크립터와 소켓 연결을 확인합니다. /var/lib/docker와 /var/run/docker.sock의 권한 및 디스크 공간을 검증합니다. 메타데이터 손상이 의심되면 docker info로 스토리지 드라이버 상태를 확인하고, 필요시 containerd를 직접 사용해 컨테이너 목록을 조회합니다(ctr containers ls). 즉각 복구가 필요하면 systemctl restart docker를 실행하되, 컨테이너 재시작 정책을 확인하고 영향을 최소화합니다. 근본 원인으로 메타데이터 데이터베이스 락, 파일 디스크립터 고갈, 또는 스토리지 드라이버 이슈를 찾아 해결하고, Docker daemon 설정에 적절한 타임아웃과 리소스 제한을 추가하며, 모니터링 알림을 강화합니다.
- • dockerd, containerd, runc 프로세스 체인 전체의 상태 진단
- • strace와 lsof를 활용한 시스템 콜 레벨 디버깅
- • 메타데이터 손상과 리소스 고갈 여부 확인
- • 서비스 영향 최소화하며 daemon 재시작 및 설정 최적화
컨테이너 런타임 장애는 전체 인프라에 영향을 미치므로 신속한 진단과 복구 능력이 필수적입니다.
Docker daemon 장애를 예방하기 위한 모니터링 지표와 알림 임계값을 어떻게 설정하시겠습니까?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!