피드로 돌아가기
Services without Docker-in-Docker: how PikoCI handles test dependencies
Dev.toDev.to
DevOps

DinD 탈피 및 Host Network 기반 Service 추상화로 CI 테스트 안정성 확보

Services without Docker-in-Docker: how PikoCI handles test dependencies

Francesc Gil2026년 6월 9일5intermediate

Context

CI 환경 내 Integration Test를 위한 Docker-in-Docker(DinD)의 Privileged 권한 요구 및 낮은 안정성 문제 분석. Shared Database 사용에 따른 Test Flakiness 및 수동 관리로 인한 리소스 누수 문제 해결 필요성 대두.

Technical Solution

  • Service를 First-class Concept로 정의하여 Job Plan 내 선언적 생명주기 관리 체계 구축
  • DinD 대신 Worker Host 직접 실행 및 Host Network 공유를 통한 Sibling Container 통신 구조 설계
  • $BUILD_PIPELINE_NAME 및 $BUILD_JOB_NAME 기반의 Stable Name 부여와 Start-block 내 사전 Cleanup 로직을 통한 Orphan Container 제거
  • Ready Check 매커니즘(예: pg_isready) 도입으로 의존 서비스의 완전한 기동 후 Task 실행 보장
  • HTTP/Git 기반의 Sourceable service_type 설계를 통한 서비스 정의의 재사용성 및 모듈화 달성
  • Docker Socket Mounting을 통한 Worker-to-Host 제어권 확보로 Nested Container 구조 배제

1. CI 서비스 기동 시 단순 Sleep 대신 Health Check API나 CLI 도구를 활용한 Ready Check 구현 여부 확인

2. 컨테이너 기반 CI 환경에서 /var/run/docker.sock 마운트를 통한 Sibling Container 구조 검토

3. 예기치 못한 프로세스 종료에 대비하여 'Start 시점에 이전 잔적 제거'하는 Idempotent한 시작 스크립트 작성

원문 읽기