홈/엔지니어/Docker / 컨테이너/Dockerfile 최적화 — 이미지 크기와 빌드 …
Docker / 컨테이너중급ubuntumacoswindowsdockerdockerfilemultistage

Dockerfile 최적화 — 이미지 크기와 빌드 속도 줄이기

레이어 캐시 활용, 멀티스테이지 빌드, 불필요한 파일 제거로 이미지 크기를 절반 이하로 줄이는 기법을 설명합니다.

목차
  1. 개선 전 (1.2GB) vs 개선 후 (180MB)
  2. 핵심 최적화 원칙
  3. BuildKit 캐시 마운트
  4. 이미지 크기 분석

개선 전 (1.2GB) vs 개선 후 (180MB)

개선 전

Dockerfile
FROM node:20
WORKDIR /app
COPY . .
RUN npm install
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/server.js"]

개선 후 (멀티스테이지)

Dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

FROM node:20-alpine AS runner
WORKDIR /app

RUN addgroup -S appgroup && adduser -S appuser -G appgroup

COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules

USER appuser
EXPOSE 3000
CMD ["node", "dist/server.js"]

핵심 최적화 원칙

1. 레이어 캐시 순서

Dockerfile
COPY package*.json ./
RUN npm ci

COPY src/ ./src/

2. .dockerignore 필수

CODE
node_modules
.git
.env
*.log
dist
coverage

3. RUN 명령어 합치기

Dockerfile
RUN apt-get update && \
    apt-get install -y --no-install-recommends curl && \
    rm -rf /var/lib/apt/lists/*

4. alpine 기반 이미지

이미지크기
node:201.1GB
node:20-slim240MB
node:20-alpine140MB

BuildKit 캐시 마운트

Dockerfile
RUN --mount=type=cache,target=/root/.npm \
    npm ci
Bash
DOCKER_BUILDKIT=1 docker build .

이미지 크기 분석

Bash
docker history myapp:latest

docker run --rm -it \
  -v /var/run/docker.sock:/var/run/docker.sock \
  wagoodman/dive myapp:latest
#docker#dockerfile#multistage#alpine#최적화
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)Docker 공식 문서 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.