피드로 돌아가기
30-Day Cloud & DevOps Challenge: Day 10 — Docker in CI
Dev.toDev.to
DevOps

Docker Socket Mounting을 통한 Jenkins 기반 CI 배포 아티팩트 자동화

30-Day Cloud & DevOps Challenge: Day 10 — Docker in CI

Michelle2026년 5월 4일5beginner

Context

코드 빌드 및 의존성 설치만 가능했던 기존 파이프라인의 한계로 인해 프로덕션 배포 가능한 컨테이너 이미지 생성 단계가 결여된 상태임. Jenkins가 컨테이너 환경에서 동작함에 따라 호스트 Docker Daemon에 접근하지 못하는 권한 및 통신 제약 발생.

Technical Solution

  • 호스트의 /var/run/docker.sock을 Jenkins 컨테이너에 마운트하여 Docker-out-of-Docker(DooD) 구조 설계
  • Jenkins 프로세스의 root 권한 부여를 통한 Docker Daemon 통신 시 Permission Denied 문제 해결
  • 컨테이너 내부에 Docker CLI를 설치하여 Pipeline 스크립트 내 docker build 명령어 실행 환경 구축
  • Backend(Node.js) 및 Frontend(Nginx) 각각의 Dockerfile을 통한 환경 격리 및 이미지 최적화
  • Build Context 경로 지정을 통한 소스 코드 및 빌드 결과물의 정확한 이미지 레이어 주입
  • latest 태그를 활용한 최신 빌드 아티팩트의 식별 및 배포 준비 완료 상태 확보

- Jenkins 컨테이너 설정 시 `/var/run/docker.sock` 마운트 여부 확인 - 컨테이너 내 Docker CLI 설치 및 `docker --version`을 통한 정상 작동 검증 - Dockerfile 내 `COPY` 명령 사용 시 Build Context 경로와 파일 위치의 일치 여부 점검 - root 권한 부여에 따른 보안 리스크 검토 및 최소 권한 원칙 적용 고려

원문 읽기