Dockerfile完全ガイド:基本構文からベストプラクティスまで徹底解説
Dockerfileの基本構文とその使い方完全ガイド
Dockerfileは、Dockerイメージを定義するための設定ファイルです。この記事では、Dockerfileの基本構文を丁寧に解説し、各ディレクティブの使い方や注意点、実践的な活用例、そして周辺知識についても網羅的に紹介します。
目次
- Dockerfileとは?
- 基本構文と命令一覧
- 各ディレクティブの詳細
- Dockerfileのベストプラクティス
- マルチステージビルド
- よくあるミスと対策
- 実践例:Node.jsアプリのDockerfile
- 関連ツールと周辺知識
Dockerfileとは?
Dockerfileはテキスト形式のファイルで、Dockerイメージを構築する手順を記述します。例えば、ベースイメージの指定や、ファイルのコピー、パッケージのインストール、環境変数の設定などを行います。
基本構文と命令一覧
- FROM: ベースとなるイメージを指定
- RUN: コマンドの実行
- COPY: ファイル/ディレクトリのコピー
- ADD: COPYに似ているが、URLやアーカイブの展開も可
- CMD: コンテナ起動時に実行するデフォルトコマンド
- ENTRYPOINT: CMDより優先される起動コマンド
- WORKDIR: 作業ディレクトリの指定
- ENV: 環境変数の設定
- EXPOSE: ポートの公開
- VOLUME: ボリュームの指定
- ARG: ビルド時に使う引数の指定
- LABEL: メタデータの追加
各ディレクティブの詳細
FROM
FROM node:18
最初に指定する必要があり、公式のイメージや自作イメージをベースにします。
RUN
RUN apt-get update && apt-get install -y git
ビルド時に一度だけ実行され、イメージに反映されます。
COPY / ADD
COPY . /app
ホストのファイルをコンテナにコピーします。ADDはtarファイルの展開などが可能です。
CMD / ENTRYPOINT
CMD ["node", "index.js"]
CMDは起動時のデフォルトコマンドで、ENTRYPOINTはCMDを引数として使う場合に有効です。
Dockerfileのベストプラクティス
- 不要なレイヤーを避ける
- キャッシュを意識した命令順にする
- バージョンを明示する
- 最小限のイメージを選ぶ(例:alpine)
マルチステージビルド
ビルド用のステージと実行用のステージを分けて、最終イメージを軽量化するテクニックです。
FROM node:18 AS build
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
よくあるミスと対策
- CMDとENTRYPOINTの誤用
- キャッシュに頼りすぎる
- 不要ファイルのCOPY
実践例:Node.jsアプリのDockerfile
FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
関連ツールと周辺知識
- Docker Compose: 複数コンテナの構成管理
- イメージの最適化ツール: dive, hadolint
- セキュリティ: ベースイメージの脆弱性チェック
まとめ
Dockerfileは開発・運用効率を高める強力なツールです。基本構文を理解し、ベストプラクティスやマルチステージビルドを取り入れることで、より安全かつ高性能なDocker環境を構築できます。