Dockerfile ジェネレーター

Node.js、Python、Go、Java、.NET、Rust、静的サイト向けに本番対応の Dockerfile を生成。マルチステージビルド、非 root ユーザー、対応する .dockerignore を含みます。

Dockerfile
.dockerignore

本番ではイメージのバージョンやダイジェストを固定し、セキュリティ更新を取り込むため定期的に再ビルドしてください。

関連ツール

すべて表示

Dockerfile ジェネレーターとは?

Node.js、Python、Go、Java(Maven)、.NET(ASP.NET Core)、Rust、Nginx で配信する静的サイト 向けに、現在のベストプラクティスに沿った Dockerfile を作成します。イメージを小さくするマルチステージビルド、非 root ユーザーでの実行、ランタイムのバージョン、ポート、起動コマンドなどのオプションがあり、対応する .dockerignore も生成されます。

Dockerfile ジェネレーターの使い方

  1. 言語 / スタック を選びます。
  2. ランタイムのバージョン(イメージタグ)、ポート、起動ファイル、モジュール、JAR、バイナリの名前を設定します。
  3. 特別な理由がなければ、マルチステージビルド(イメージを小さく) と 非 root ユーザーで実行 にチェックを入れたままにします。
  4. 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 などのファイルをビルドコンテキストから除外するため、ビルドが速くなり、シークレットがイメージに入らなくなります。

他のカテゴリを見る