Dockerfile ジェネレーター
Node.js、Python、Go、Java、.NET、Rust、静的サイト向けに本番対応の Dockerfile を生成。マルチステージビルド、非 root ユーザー、対応する .dockerignore を含みます。
本番ではイメージのバージョンやダイジェストを固定し、セキュリティ更新を取り込むため定期的に再ビルドしてください。
関連ツール
すべて表示Dockerfile ジェネレーターとは?
Node.js、Python、Go、Java(Maven)、.NET(ASP.NET Core)、Rust、Nginx で配信する静的サイト 向けに、現在のベストプラクティスに沿った Dockerfile を作成します。イメージを小さくするマルチステージビルド、非 root ユーザーでの実行、ランタイムのバージョン、ポート、起動コマンドなどのオプションがあり、対応する .dockerignore も生成されます。
Dockerfile ジェネレーターの使い方
- 言語 / スタック を選びます。
- ランタイムのバージョン(イメージタグ)、ポート、起動ファイル、モジュール、JAR、バイナリの名前を設定します。
- 特別な理由がなければ、マルチステージビルド(イメージを小さく) と 非 root ユーザーで実行 にチェックを入れたままにします。
- Dockerfile と .dockerignore をプロジェクトのルートにダウンロードし、
docker build -t myapp .を実行します。
例
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
# syntax=docker/dockerfile:1 # ---- dependencies (production only) ---- FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev # ---- build ---- FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build # ---- runtime ---- FROM node:22-alpine ENV NODE_ENV=production WORKDIR /app COPY --from=deps --chown=node:node /app/node_modules ./node_modules COPY --from=build --chown=node:node /app/dist ./dist COPY --chown=node:node package.json ./ # The official Node images ship an unprivileged "node" user USER node EXPOSE 3000 CMD ["node", "dist/index.js"]
Dockerfile ジェネレーターを使うべき場面
一般的な Web サービスや API を、適切な既定値ですばやくコンテナ化するときに使います。生成されたファイルは、自分のプロジェクトに合わせて見直してください。ビルドコマンド、出力フォルダー、エントリポイントは異なり、ネイティブの依存関係には追加のシステムパッケージが必要な場合があります。再現可能な本番ビルドのために、イメージの正確なバージョンやダイジェストを固定してください。
Dockerfile ジェネレーターの仕組み
各スタックには、その公式イメージ向けに書かれたテンプレートがあります。マルチステージビルドは、フル SDK イメージでインストールとコンパイルを行い、結果だけを軽量なランタイムにコピーします。Node は別のステージで npm ci --omit=dev により本番の依存関係をインストールし、Python は virtualenv を作って python:<ver>-slim にコピーし、Go は静的バイナリ(CGO_ENABLED=0、-trimpath -ldflags="-s -w")を distroless/static:nonroot にコンパイルし、Java は JAR を JRE のみの Temurin イメージにコピーし、.NET は aspnet ランタイムイメージに発行して組み込みの $APP_UID ユーザーを使い、Rust はリリースバイナリを debian:bookworm-slim にコピーします。非 root モードは、イメージ自体の非特権ユーザー(node、nonroot、app)を使うか、UID 10001 のユーザーを作成します。依存関係のマニフェストはソースより先にコピーされるため、コードだけが変わった場合は、Docker のレイヤーキャッシュにより再インストールが省かれます。
一般的な使用例
- デプロイ用に Node.js や Python の API をコンテナ化する
- distroless のランタイムで Go サービスのイメージを小さくする
- 非 root の Nginx で React/Vue/Astro のビルドを配信する
- Dockerfile のベストプラクティスを教える、またはレビューする
セキュリティ注意事項
.env ファイルや認証情報をイメージに COPY しないでください。シークレットは、実行時または BuildKit のシークレットマウントで渡してください。
よくある質問
なぜマルチステージビルドを使うのですか?
コンパイラ、開発用の依存関係、ソースファイルがビルドステージに残るため、最終的なイメージは小さくなり、起動が速くなり、脆弱性を含みうるパッケージも減ります。
なぜ非 root ユーザーで実行するのですか?
アプリケーションが侵害されても、攻撃者はコンテナ内で root を得られないため、被害が限定され、一部のコンテナ脱出の手法も防げます。
.dockerignore は何をしますか?
node_modules、.git、.env などのファイルをビルドコンテキストから除外するため、ビルドが速くなり、シークレットがイメージに入らなくなります。