はじめに
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 の解説
| 行 | 内容 |
|---|---|
| FROM | Node.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 の違い
| 項目 | Dockerfile | Docker Compose |
|---|---|---|
| 役割 | イメージ定義 | 複数コンテナ管理 |
| 対象 | 単体 | 複数サービス |
| 使用頻度 | 常に使う | 複数構成時 |
Dockerfile は土台、Compose はオーケストレーション
よくあるエラーと対処法
ビルドが遅い
- COPY の順序を見直す
- .dockerignore を設定する
コンテナがすぐ終了する
- CMD が正しく書かれているか確認
- サーバープロセスが起動しているか確認
まとめ
Dockerfile は、
- Docker を使った開発の 基礎中の基礎
- 本番環境・CI/CD で必須のスキル
- 小さく書いて改善していくのがコツ
です。
コメントを残す