Dockerfile生成
Dockerfileは、詳細を思い出すまでは短く見えるファイルの一つです。レイヤー順はキャッシュに影響し、COPY package.jsonはRUN npm installの前に置き、コンパイル言語ではマルチステージビルドが有利です。このジェネレーターは、選択したスタック向けに、キャッシュのパターンが最初から正しいすぐ使えるDockerfileを書き出します。
Dockerfileの生成手順
-
1
スタックを選ぶ
Node.js、Python、PHP、Go、Rustから選択します。各テンプレートは言語に合ったベースイメージと正しい依存関係インストールコマンドを使用します。
-
2
作業ディレクトリとポートを設定
WORKDIRとアプリが待ち受けるポートを選びます。どちらも生成ファイルに書き込まれます。
-
3
Dockerfileを確認
EXPOSE行と起動コマンドがアプリに合っているか確認してください。GoとRustのテンプレートはマルチステージビルドを使用します。
-
4
Dockerfileをコピー
結果をコピーしてリポジトリのルートに貼り付け、イメージをビルドします。
マルチステージビルドの利点
素朴なDockerfileはコンパイラのツールチェーン全体を最終イメージにインストールします。マルチステージビルドでは、コンパイルを行う「builder」ステージと、コンパイル済み成果物だけを載せる最終ステージに分けられます:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
最終イメージからは開発依存関係、ソースファイル、ビルドキャッシュがすべて除かれ、イメージサイズが60〜80パーセント削減されることもよくあります。
ベースイメージの種類
テンプレートでは可能な限りslimまたはalpineイメージを使用します。ベースイメージを自分で調整する場合の主な選択肢は次のとおりです:
| 種類 | 一般的なサイズ | 選ぶタイミング |
|---|---|---|
| full | 300-900 MB | 開発用イメージ、珍しいシステム依存関係 |
| slim | 80-200 MB | ほとんどの言語で本番の標準 |
| alpine | 30-100 MB | 小さなイメージ、glibcとmuslの違いに注意 |
| distroless | 20-80 MB | 最大の安全性、シェルもパッケージマネージャーもなし |
レイヤーキャッシュのルール
Dockerは各行をキャッシュします。レイヤーが変わると、それより下はすべて再ビルドされます。変更頻度の低い順に並べると:
FROMのベースイメージ(めったに変わらない)。- システムパッケージ(
apt-get install)、変更はまれ。 - 依存関係マニフェスト(
package.json、requirements.txt、composer.json)。 - 依存関係のインストール手順。マニフェストが変わったときだけ実行される。
- ソースコードのコピー。最も頻繁に変わるレイヤーで、それ以降はコミットのたびに再ビルドされる。
- コンパイルと最終の
CMD。
この順序を崩すことが、CIビルドが遅くなる最も一般的な原因です。
セキュリティチェックリスト
- 非rootで実行する。 末尾付近に
USER appuser(またはUSER 1000)を置く。 - バージョンを固定する。
python:3.12.7-slimはpython:3.12より良く、python:latestよりはるかに良い。 /に頼らず明示的なWORKDIRを設定する。- ローカルファイルには
ADDではなくCOPYを使う。ADDには自動展開の副作用がある。 HEALTHCHECKを追加してオーケストレーターが停止したプロセスを検出できるようにする。- パッケージキャッシュは同じ
RUN行で掃除する。apt-get install ... && rm -rf /var/lib/apt/lists/*。
よくある質問
slimは多くのライブラリのプリコンパイル済みwheelと同様にglibcベースのままなので、より安全な既定値です。alpineはmuslを使うため、Python(pandas、numpy)やNode(node-gypのネイティブモジュール)で不可解な実行時バグを起こすことがあります。イメージサイズが重要で、スタックをテスト済みならalpineを選んでください。
はい、プロジェクトに追加してください。無いとDockerはリポジトリ全体をビルドコンテキストとしてデーモンに送ります。git履歴、node_modules、ローカルの.envファイル、テストなどです。遅く、キャッシュを無駄にし、秘密情報が漏れます。
できます。docker buildxを--platformオプション付きで使い、両方のアーキテクチャを一度にビルドしてください。テンプレートが使うベースイメージはarm64版も公開しています。
いいえ。選択したスタック、作業ディレクトリ、ポートはこのページでDockerfileを生成するためだけに使われ、保存も共有もされません。
関連ツール
ASCII表リファレンス
0から127までの完全なASCII表です。NUL、LF、DELなどの制御コードを含め、各文字の10進数、16進数、8進数、2進数、HTML数値文字参照を表示します。
HTML文字参照
HTMLエンティティの検索可能なリスト、その名称コードおよび数値コード、および特殊文字や記号のワンクリックコピー機能を提供します。
キーボードショートカット一覧
macOS、Windows、Linux向けに、VS Code、Chrome、GNU Readlineを使うBashの公式資料に基づく既定ショートカットを検索できます。
HTML フォーマッター
ブラウザ内で HTML を 2 または 4 スペースで整形します。HTML はアップロードも検証もされません。
カラーパレットジェネレーター
基準のHEXカラーから、モノクロマティック、類似色、補色、トライアド、テトラードのパレットを生成し、コピーしやすいCSS変数として書き出します。
変更ログジェネレーター
分類した項目から Keep a Changelog 形式の Markdown セクションを作成します。Added、Changed、Fixed、Removed の各カテゴリに項目を貼り付け、Markdown かプレーンテキストを選んで出力をコピーするだけです。
このツールは他の言語でも利用できます
- Dockerfile 생성기 [KO]
- Trình tạo Dockerfile [VI]
- Dockerfile-generator [NL]
- Dockerfile 生成器 [ZH]
- Dockerfile-Generator [DE]
- Dockerfile Generator [EN]
- Generator Dockerfile [ID]
- Dockerfile-generator [SV]
- Generator Dockerfile [PL]
- مولد ملفات Docker [AR]
- ตัวสร้าง Dockerfile [TH]
- Generador de Dockerfile [ES]
- Générateur de Dockerfile [FR]
- Gerador de Dockerfile [PT]
- Dockerfile Oluşturucu [TR]
- Generatore di Dockerfile [IT]
- Генератор Dockerfile [RU]