다단계 빌드 및 최적화된 레이어 순서를 통해 Node.js, Python, Go, Java 및 Nginx용 프로덕션 환경에 바로 적용 가능한 Dockerfile을 생성합니다.
# Build stage FROM node:20-alpine AS builder WORKDIR /app # Copy dependency manifests first to leverage Docker layer cache COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Production stage FROM node:20-alpine WORKDIR /app RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser COPY --from=builder /app/dist ./dist COPY --from=builder /app/node_modules ./node_modules ENV NODE_ENV=production EXPOSE 3000 CMD ["node", "dist/index.js"]
.git .gitignore *.md .env .env.* .DS_Store Thumbs.db node_modules npm-debug.log* .npm dist build coverage .nyc_output .eslintcache
Dockerfile은 컨테이너 이미지를 빌드하는 방법을 정의하는 텍스트 파일입니다. 명령어의 순서는 캐시 효율성에 중요한 역할을 합니다. 즉, 소스 코드가 복사되기 전에 종속성이 설치되므로, Docker는 종속성이 변경될 때가 아니라 애플리케이션 코드만 변경될 때 캐시된 레이어를 재사용합니다.
언어와 기본 이미지를 선택하고, 필요에 따라 다단계 빌드를 활성화하거나 비활성화하며, 빌드 및 시작 명령어를 설정하고, 환경 변수를 추가하세요. 이 생성기는 모범 사례에 따른 레이어 순서를 준수하도록 강제하며, 보안을 위해 기본적으로 루트 사용자가 아닌 일반 사용자를 생성합니다.
다단계 빌드는 빌드 환경과 런타임 환경을 분리함으로써 더 작은 크기의 최종 이미지를 생성합니다. 빌더 단계에서 애플리케이션을 컴파일하고, 컴파일된 아티팩트만 린 런타임 단계로 복사됩니다. 이는 특히 Go 및 Java 애플리케이션에 효과적입니다.