정지용
프로젝트 목록
인프라

Node+Docker CLI 통합 베이스 이미지 정리 노트

CI에서 Node 런타임과 Docker CLI를 한 이미지에 합치는 DooD 패턴과 함정을 정리한 기술 문서

node-docker-base-image-docs최근 업데이트 2026년 5월 13일

개요

CI 파이프라인의 한 단계에서 Node 애플리케이션 빌드와 Docker 이미지 빌드/push 를 동시에 수행해야 할 때 쓰이는 컴팩트한 베이스 이미지(node:alpine + docker CLI + compose)를 관찰자 시점에서 분석한 노트입니다. 세 줄짜리 Dockerfile 이 어떤 결정을 내포하는지, Docker daemon 없이 host 소켓을 공유하는 Docker-out-of-Docker(DooD) 구조가 왜 필요한지를 아키텍처 다이어그램과 함께 설명합니다. musl libc 호환성 문제, apk 캐시/레이어 관리, docker socket 권한 및 path mismatch, 보안 함의 등 실제로 이 패턴을 CI에 적용할 때 마주치는 함정과 대처법을 정리했습니다. 마지막으로 node:bullseye-slim, docker:cli+node, kaniko/buildah 같은 대안 구성과의 트레이드오프도 비교합니다.

담당 역할

CI/CD 베이스 이미지 패턴을 관찰·분석하여 아키텍처, 함정, 스택 비교를 한국어 기술 문서로 정리

아키텍처 다이어그램

레포지토리 분석 결과를 바탕으로 자동 생성된 구조도입니다.

아키텍처

Docker-out-of-Docker 구조

CI 러너 host 의 Docker daemon 소켓을 컨테이너에 bind mount 하여, 컨테이너 안의 Node 앱과 Docker CLI 가 host daemon 을 호출하는 구조를 보여줍니다.

다이어그램을 그리는 중…
흐름도

CI 빌드-패키징 흐름

하나의 컨테이너 실행 안에서 Node 빌드부터 Docker 이미지 생성까지 이어지는 단일 CI 스텝 흐름입니다.

다이어그램을 그리는 중…

기술스택

각 기술을 이 프로젝트에서 어떤 용도로 썼는지 정리했습니다.

DevOps

  • DockerNode 빌드 산출물을 이미지로 패키징하기 위한 CLI 실행 환경
  • Docker Composedocker compose 명령으로 다중 컨테이너 빌드/실행 처리
  • JenkinsJenkinsfile의 docker agent 이미지로 이 베이스 이미지를 지정하는 CI 통합 대상
  • GitHub Actionscontainer 키워드로 베이스 이미지를 지정하는 CI 통합 대상

인프라

  • Alpine Linuxmusl libc 기반의 경량 베이스 OS로 이미지 크기 최소화

언어

  • Node.jsCI 빌드 단계에서 애플리케이션 빌드를 수행하는 런타임

핵심 포인트

  • 3줄짜리 Dockerfile을 분해해 FROM/apk add/CMD 각각의 의도와 트레이드오프를 상세 분석
  • Docker daemon 없이 host 소켓을 bind mount 하는 DooD 패턴을 다이어그램으로 설명
  • musl libc 비호환으로 bcrypt·sharp·prisma 등 native 모듈이 깨지는 원인과 대처법을 정리
  • host docker.sock 노출이 사실상 host root 권한과 동등하다는 보안 함의를 명시
  • node:alpine, bullseye-slim, docker:cli, kaniko/buildah 등 대안 구성을 비교표로 정리

문제와 해결

문제node:alpine 은 musl libc 기반이라 bcrypt, sharp, prisma 같은 glibc 전제 native 모듈 빌드가 깨질 수 있음

해결python3/make/g++ 를 추가 설치해 native build 환경을 제공하거나 alpine 전용 패키지 변종을 사용

문제컨테이너 내부 경로(예: $(pwd))로 volume 마운트를 시도해도 docker daemon 은 host 소켓을 통해 동작해 host 경로로 잘못 해석됨(path mismatch)

해결마운트 경로를 컨테이너 시작 시 host 경로와 동일하게 맞추거나 빌드 산출물을 named volume 으로 이동

문제host docker.sock 을 컨테이너에 노출하면 malicious 빌드 스크립트가 host 를 점유할 수 있는 보안 위험이 있음

해결신뢰 가능한 내부 코드 빌드에만 사용하고, 외부 PR 빌드는 별도 isolated runner 또는 kaniko/buildah 같은 daemon-less 빌더로 대체

레포지토리 정보

생성
2026년 5월 13일
최근 커밋
2026년 5월 13일
크기
5 KB
라이선스
없음

이 문서는 2026년 7월 26일 에 자동 분석으로 생성되었습니다.