Dockerfile Gen
Container Architecture & Cloud-Native Security

マルチステージDockerfileジェネレーター(Node、Go、Python、Rust)

Node.js、Golang、Python、Rust、Java向けの高セキュアで軽量なマルチステージ Dockerfile を生成。非rootユーザー設計とBuildKitキャッシュ最適化を完全網羅。

Zero Build Telemetry
CIS Docker Compliant
クイックプリセット
アプリ&ランタイム構成
セキュリティ強化設定
# =========================================================================# Multi-Stage Dockerfile: Next.js Standalone (Hardened & Layer-Cached)# Generated by ToolsAA Multi-Stage Dockerfile Generator# =========================================================================# syntax=docker/dockerfile:1.6
# -------------------------------------------------------------------------# Stage 1: Dependencies Resolution# -------------------------------------------------------------------------FROM node:22-alpine AS depsWORKDIR /app
# Install libc6-compat if Alpine (required for some Node native extensions)RUN apk add --no-cache libc6-compat
# Install package manager lockfiles first to leverage layer cachingCOPY package.json package-lock.json* yarn.lock* pnpm-lock.yaml* bun.lockb* ./RUN --mount=type=cache,target=/root/.npm \    if [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm install --frozen-lockfile; \    elif [ -f yarn.lock ]; then yarn --frozen-lockfile; \    elif [ -f bun.lockb ]; then npm install -g bun && bun install --frozen-lockfile; \    else npm ci; fi
# -------------------------------------------------------------------------# Stage 2: Application Builder# -------------------------------------------------------------------------FROM node:22-alpine AS builderWORKDIR /app
COPY --from=deps /app/node_modules ./node_modulesCOPY . .
# Disable Next.js telemetry during compilationENV NEXT_TELEMETRY_DISABLED=1ENV NODE_ENV=production
RUN --mount=type=cache,target=/app/.next/cache \    if [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm run build; \    elif [ -f yarn.lock ]; then yarn build; \    else npm run build; fi
# -------------------------------------------------------------------------# Stage 3: Production Minimal Runner# -------------------------------------------------------------------------FROM node:22-alpine AS runnerWORKDIR /app
ENV NODE_ENV=production \    PORT=3000 \    NEXT_TELEMETRY_DISABLED=1ENV NODE_ENV=productionENV PORT=3000ENV HOSTNAME="0.0.0.0"
# Security: Create unprivileged system group and userRUN addgroup -g 10001 -S nodejs && \    adduser -u 10001 -S -G nodejs nextjs# Copy public static assets and standalone bundleCOPY --from=builder /app/public ./publicCOPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \  CMD wget --no-verbose --tries=1 --spider http://127.0.0.1:3000/api/health || exit 1EXPOSE 3000
USER nextjsCMD ["node", "server.js"]
推定最終イメージサイズ-82%
~110 MB

Pruned compilation tools and devDependencies from runner stage.

セキュリティ強化レーティングGrade A+
95 / 100 CIS

UID 10001 unprivileged non-root execution with dropped capabilities.

ビルドステージ効率BuildKit Active
3 Separated Layers

Sub-second rebuilds via lockfile pre-caching and BuildKit mounts.

マルチステージ層最適化

コンパイル依存関係とキャッシュを本番ランナー環境から完全に分離し、最終イメージサイズを最大92%削減します。

CISベンチマークセキュリティ防御

非rootユーザー(UID 10001)を構成し、Linux権限を削除して、ビルドツールチェーンを本番環境から排除します。

サーバー送信ゼロの完全プライバシー

すべてのマニフェストとスクリプトはブラウザのメモリ内のみで処理され、外部サーバーへの通信は一切ありません。

技術リファレンス&アーキテクチャガイド

マルチステージ Dockerfile ジェネレーター (Node, Go, Python, Rust) — リファレンスガイド

Node.js、Golang、Python、Rust、Java向けの高セキュアで軽量なマルチステージ Dockerfile を生成。非rootユーザー設計とBuildKitキャッシュ最適化を完全網羅。

主要パラメータ&設定項目

runtimestring

対象アプリケーションのランタイムおよび言語環境(例: node, golang, python, rust, java)。

初期値: node
baseImagestring

最終ステージで採用するベースOSまたは軽量ランタイム(例: alpine, debian-slim, distroless, scratch)。

初期値: alpine
nonRootUserboolean

最小権限の原則に基づき、非特権UID/GID(10001)を作成してUSER命令で実行権限を切り替えます。

初期値: true
cacheMountsboolean

パッケージマネージャー(npm, pip, cargo, go)向けにBuildKitキャッシュマウント(--mount=type=cache)を付与し、反復ビルドを高速化します。

初期値: true
portnumber

EXPOSE命令を通じてコンテナ外部へ公開するアプリケーションのリッスンポート番号。

初期値: 3000

プロの活用テクニック&推奨設定

マニフェスト先行コピーによるレイヤーキャッシュの最大化

ソースコード全体をコピーする前に、依存定義ファイル(package.json, go.mod, Cargo.toml, requirements.txt)のみを先行してCOPYし依存解決を行います。ソースコードの頻繁な変更時でも依存パッケージのダウンロードをスキップできます。

GoやRustなどの静的コンパイル言語

GoやRustなどの静的コンパイル言語では、最終ステージに 'scratch' または 'gcr.io/distroless/static' を採用してください。シェルやパッケージマネージャーを完全排除することで、イメージサイズを25MB以下に抑え、攻撃対象領域を極小化できます。

BuildKitキャッシュマウントとシークレットの安全な注入

'RUN --mount=type=cache,target=...' を利用することで、パッケージマネージャーのキャッシュをレイヤーに含めずにビルド間のみで保持できます。また、認証情報はARGではなく '--mount=type=secret' で安全に渡してください。

明示的な数値UID/GIDによる非root権限の標準化

非rootユーザー作成時は必ず数値UID/GID(例: addgroup -g 10001 -S appgroup && adduser -u 10001 -S appuser -G appgroup)を指定してください。KubernetesのRunAsNonRootポリシーやセキュリティコンテキストで安定した運用が可能になります。

よくあるトラブルと解決策

コンテナ起動時やログ出力時に 'Permission denied (EACCES)' エラーが発生して異常終了する。

非rootユーザーに作業ディレクトリやテンポラリ領域への書き込み権限が不足しています。Dockerfile内で 'USER appuser' を宣言する前に、'RUN chown -R appuser:appgroup /app /tmp' を実行してディレクトリ所有権を付与してください。

AlpineまたはScratch上でGo/Rustバイナリを実行すると 'exec: no such file or directory' と表示される。

バイナリがホストのglibcに動的リンクされていることが原因です。Goの場合は 'CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w"' で静的ビルドを行い、Rustの場合は 'x86_64-unknown-linux-musl' ターゲットでビルドしてください。

BuildKitのキャッシュマウント構文(--mount=type=cache)でビルド構文エラーが発生する。

Dockerfileの先頭行に '# syntax=docker/dockerfile:1' を追記してください。また、環境変数 'export DOCKER_BUILDKIT=1' を有効化するか、'docker buildx build' コマンドを使用してビルドを実行してください。

よくある質問 (FAQ)

シングルステージと比較したマルチステージビルドの本質的な利点は何ですか?▼

コンパイラ、SDK、ビルドツール群を含む重量級のビルド環境と、実行に必要なバイナリのみを配置する本番環境を完全に分離できる点です。中間ファイルを本番イメージから排除することで、サイズを80〜95%削減し、セキュリティ脆弱性の混入を根本から防ぎます。

Alpine LinuxとDistroless/Scratchはどのように使い分けるべきですか?▼

GoやRustなどの静的リンクバイナリで最大レベルのセキュリティを求める場合はDistrolessやScratchを選択します。一方、運用時のシェルログイン調査や、musl libcに依存する動的ライブラリが必要な場合はAlpineを選択するのが最適です。

BuildKitキャッシュマウントは従来のDockerレイヤーキャッシュとどう違いますか?▼

従来のレイヤーキャッシュは前のレイヤーが1行でも変化するとそれ以降のキャッシュがすべて無効化されます。BuildKitキャッシュマウントはホスト上のキャッシュディレクトリをRUN実行時のみ直接マウントするため、コード変更後もパッケージダウンロードを高速に再利用できます。

なぜ本番コンテナを非root(non-root)ユーザーで実行することが必須なのですか?▼

コンテナはホストOSのカーネルを共有しているため、万が一コンテナブレイクアウト脆弱性が発生した場合、root権限(UID 0)で動作しているとホスト全体の乗っ取りにつながる危険性があります。非特権ユーザーで実行することで権限昇格を防ぎ、安全基準に適合させます。

関連するおすすめ開発ツール

すべてのツール →
SQL DDL から Kysely TypeScript 型定義生成ツール開発ツール

PostgreSQL、MySQL、SQLiteのSQL DDLスキーマを解析し、完全な型安全性を備えたKysely向けTypeScript型定義とインターフェースを生成するための開発者向けリファレンス。

ツールを開く→
SQL DDL から MikroORM TypeScript エンティティ変換ジェネレーター開発ツール

SQL CREATE TABLE 定義を解析し、@Entity、@PrimaryKey、@Property、@Index、およびリレーション装飾子を備えた MikroORM エンティティクラスに変換します。

ツールを開く→
JSONからMongooseスキーマ&TypeScriptモデル生成ツール開発ツール

JSONペイロードからMongoDB Mongooseスキーマ、TypeScript型定義(Document・DTO)、ネストされたサブドキュメント、タイムスタンプを推論・自動生成します。

ツールを開く→
JSON to Yup バリデーションスキーマ生成ツール開発ツール

JSONサンプルを型安全なYupオブジェクト検証スキーマに変換し、yup.string()、yup.number()、yup.array()、必須ルールを自動生成します。

ツールを開く→
JSON から Joi オブジェクト検証スキーマ自動生成ガイド開発ツール

サンプル JSON データ構造から Joi.object()、Joi.string()、Joi.number()、Joi.array() などの制約を備えた Joi バリデーションスキーマを瞬時に自動生成します。

ツールを開く→
JSON から Apache Avro スキーマ (.avsc) 変換ツール開発ツール

JSONペイロードから、名前空間、プリミティブ型、論理型、null許容共用体型、スキーマ進化ルールを備えた本番仕様のApache Avroスキーマ(.avsc)定義を生成します。

ツールを開く→