web100tips’s blog

webエンジニアが知っておくべきこと100を1日1投稿します

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環境を構築できます。