マルチステージビルドと最適化されたレイヤー順序を用いて、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 は、依存関係が変更された場合ではなく、アプリケーションコードのみが変更された場合にのみ、キャッシュされたレイヤーを再利用します。
言語とベースイメージを選択し、必要に応じて多段階ビルドのオン/オフを切り替え、ビルドコマンドと開始コマンドを設定し、環境変数を追加します。このジェネレータは、ベストプラクティスに沿ったレイヤーの順序を強制し、セキュリティ上の理由からデフォルトでroot以外のユーザーを作成します。
多段階ビルドでは、ビルド環境と実行環境を分離することで、最終的なイメージのサイズを小さくすることができます。ビルダー段階ではアプリケーションをコンパイルし、コンパイルされたアーティファクトのみが「リーンランタイム」段階にコピーされます。これは特にGoやJavaのアプリケーションにおいて効果的です。