Dockerfile 入門|書き方・ベストプラクティス

はじめに

Docker を使った開発で必ず登場するのが Dockerfile です。
Dockerfile は「Docker イメージの設計図」であり、アプリケーションを 再現性高く・自動的に ビルドするための重要なファイルです。

本記事では、

  • Dockerfile とは何か
  • 基本構文と役割
  • よく使う命令一覧
  • 実践的な Dockerfile ハンズオン
  • 本番運用を見据えたベストプラクティス

までを 初心者にもわかりやすく 解説します。


Dockerfile とは?

Dockerfile とは、Docker イメージを作成する手順をコードとして記述したファイルです。

Dockerfile → docker build → Docker Image → docker run → Container

Dockerfile を使うメリット

  • 環境構築を自動化できる
  • 誰が実行しても同じ環境を再現できる
  • CI/CD と相性が良い
  • 本番・検証・開発環境の差分を減らせる

Dockerfile の基本構文

Dockerfile は 上から順に実行されます。
まずは最低限覚えておきたい命令から見ていきましょう。


よく使う Dockerfile 命令一覧

FROM(必須)

FROM node:20
  • ベースとなるイメージを指定
  • 必ず最初に書く

WORKDIR

WORKDIR /app
  • 作業ディレクトリを指定
  • cd のような役割

COPY

COPY . .
  • ホストのファイルをコンテナにコピー
  • COPY <src> <dest>

RUN

RUN npm install
  • イメージビルド時に実行するコマンド
  • ライブラリのインストールなどに使用

CMD

CMD ["node", "index.js"]
  • コンテナ起動時に実行されるコマンド
  • 1つだけ指定可能

EXPOSE

EXPOSE 3000
  • コンテナが使用するポートを明示
  • 実際の公開は docker run -p で行う

Dockerfile ハンズオン(Node.js アプリ)

ここからは 実際に手を動かして Dockerfile を書いていきます。


ハンズオン①:簡単な Node.js アプリを作成

ディレクトリ構成

dockerfile-handson/
├─ Dockerfile
├─ package.json
└─ index.js

index.js

const http = require("http");

const server = http.createServer((req, res) => {
  res.end("Hello Dockerfile!");
});

server.listen(3000);

package.json

{
  "name": "dockerfile-handson",
  "version": "1.0.0",
  "scripts": {
    "start": "node index.js"
  }
}

ハンズオン②:Dockerfile を作成

Dockerfile(基本)

FROM node:20

WORKDIR /app

COPY package.json ./
RUN npm install

COPY . .

EXPOSE 3000

CMD ["npm", "start"]

Dockerfile の解説

内容
FROMNode.js 公式イメージ
WORKDIR作業ディレクトリ指定
COPYファイルコピー
RUN依存関係インストール
EXPOSE使用ポート
CMD起動コマンド

ハンズオン③:Docker イメージをビルド

docker build -t dockerfile-handson .

ハンズオン④:コンテナを起動

docker run -p 3000:3000 dockerfile-handson

ブラウザで以下にアクセス:

http://localhost:3000

Hello Dockerfile! が表示されれば成功です


Dockerfile のベストプラクティス

① レイヤーキャッシュを活用する

COPY package.json ./
RUN npm install
COPY . .
  • 依存関係の変更がない限り再インストールされない
  • ビルド高速化につながる

② 軽量なベースイメージを使う

FROM node:20-alpine
  • Alpine Linux ベースでサイズが小さい
  • 本番環境におすすめ

③ 不要なファイルを含めない(.dockerignore)

node_modules
.git
.env

④ CMD と ENTRYPOINT の使い分け

  • CMD:上書き可能(柔軟)
  • ENTRYPOINT:固定したい処理向け

Dockerfile と Docker Compose の違い

項目DockerfileDocker Compose
役割イメージ定義複数コンテナ管理
対象単体複数サービス
使用頻度常に使う複数構成時

Dockerfile は土台、Compose はオーケストレーション


よくあるエラーと対処法

ビルドが遅い

  • COPY の順序を見直す
  • .dockerignore を設定する

コンテナがすぐ終了する

  • CMD が正しく書かれているか確認
  • サーバープロセスが起動しているか確認

まとめ

Dockerfile は、

  • Docker を使った開発の 基礎中の基礎
  • 本番環境・CI/CD で必須のスキル
  • 小さく書いて改善していくのがコツ

です。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です