先に要点
- Dockerfile は、Docker で使う コンテナイメージの作り方を書くファイルです。
- 最初に押さえたい命令は `FROM` `RUN` `COPY` `WORKDIR` `CMD` の5つです。
- 初心者は全部の命令を覚える必要はなく、`何を土台にして、何を入れて、どこで動かし、最後に何を実行するか` が読めればかなり十分です。
- 実務では、Dockerfile を読む力があると、開発環境や本番環境の再現方法がかなり見えやすくなります。
Docker は少し分かってきたけど、Dockerfile になると急に読めない という人は多いです。
特に、英単語が並んでいるだけに見えて、どこから見ればいいのか分からなくなりやすいです。
でも Dockerfile は、全部を一気に理解しなくても大丈夫です。
最初は このコンテナをどうやって作るかを書いた手順書 と考えるとかなり入りやすいです。
この記事では、2026年4月14日時点で Docker Docs の Dockerfile overview と Dockerfile reference を確認しながら、Dockerfile とは何か、何を書くものか、最初にどの命令から読めばよいかを初心者向けに整理します。
Docker や Docker Compose の全体像から先に見たいなら、Dockerとは?コンテナで何がうれしい?初心者向けに仕組み・メリット・使いどころを解説 と Docker Composeとは?複数コンテナをまとめて動かす基本を初心者向けに解説 もつながりやすいです。
Dockerfileとは何か
Dockerfile は、コンテナイメージをどう作るかを書くファイルです。
かなりざっくり言うと、この環境をどう組み立てて、最後に何を動かすか を順番に書くメモです。
たとえば、アプリを動かすには
- ベースになるOSやランタイム
- 必要なパッケージ
- ソースコード
- 起動コマンド
が必要です。
Dockerfile は、それを一段ずつ積み上げていく形で書きます。
そのため、Dockerfile が読めるようになると、このコンテナは何を前提にしているのか がかなり見えやすくなります。
開発環境、CI、本番イメージの理解にもつながるので、実務でも地味に効きます。
何を書くものなのか
Dockerfile には、主に次のことを書きます。
要するに、コンテナの中身 と 起動時のふるまい を決めるファイルです。
Docker Docs でも、Dockerfile はイメージを組み立てるための instructions を書くテキストファイルとして説明されています。
初心者向けには、コンテナのレシピ という説明もかなり近いです。
最初に読むべき命令はこの5つ
Dockerfile には他にも命令がありますが、最初は次の5つで十分です。
1. FROM
FROM は、どのイメージを土台にするかを決める命令です。
FROM node:22-alpine
この場合は、Node.js 22 が入った軽量イメージを土台にしています。
最初にここを見ると、このコンテナは何の環境から始まるのか が分かります。
実務でも、古いバージョンを使っていないか、軽量イメージか、公式イメージか、といった確認でまず見られやすいです。
2. RUN
RUN は、イメージ作成中にコマンドを実行する命令です。
RUN apt-get update && apt-get install -y curl
これは、コンテナが起動した後に毎回走るのではなく、イメージを作るときに実行されます。
ここを誤解しやすいので、作成時の処理 と覚えておくと分かりやすいです。
3. COPY
COPY は、ローカルのファイルをコンテナ側へコピーする命令です。
COPY . /app
アプリのソースコードや設定ファイルを、コンテナの中へ持っていくときによく使います。
初心者は ローカルとコンテナは別の場所 だと意識しておくと、COPY の意味がつかみやすいです。
4. WORKDIR
WORKDIR は、その後の作業ディレクトリを決める命令です。
WORKDIR /app
これがあると、後続の RUN や CMD が /app を基準に動きます。
Docker Docs でも、RUN CMD COPY などの後続命令に影響する重要な命令として説明されています。
5. CMD
CMD は、コンテナ起動時にデフォルトで実行するコマンドを指定する命令です。
CMD ["node", "server.js"]
ここを見ると、このコンテナは最終的に何を動かしたいのか が分かります。
RUN と混ざりやすいですが、ざっくり言えば
- RUN: 作るときに実行
- CMD: 起動するときに実行
です。
まずはこう読むと分かりやすい
Dockerfile を上から順に読むだけでもいいのですが、初心者は次の順で見るとかなり入りやすいです。
FROMで土台を確認するWORKDIRで作業場所を見るCOPYで何を持ち込むかを見るRUNで何を追加しているかを見るCMDで最後に何を動かすかを見る
この順だと、何の環境で、どこに、何を置いて、どう組み立てて、何を起動するか が自然に追えます。
最小の例で見るとこうなる
FROM node:22-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
CMD ["npm", "start"]
この例を日本語で読むと、だいたいこうです。
- Node.js 22 の軽量イメージを土台にする
- 作業ディレクトリを
/appにする - 依存定義ファイルを先にコピーする
npm ciで依存を入れる- 残りのソースコードをコピーする
- 起動時に
npm startを実行する
このレベルで読めれば、初心者としてはかなり十分です。
実務で何が大事になるのか
ベースイメージ選び
FROM で何を使うかはかなり大事です。
重すぎるイメージを使うとビルドも配布も遅くなりやすいですし、古いイメージを放置するとセキュリティ面も気になります。
COPY の順番
実務では、Docker のビルドキャッシュも効率にかなり影響します。
依存ファイルだけ先に COPY してからインストールし、その後にソース全体を COPY する書き方はよく見ます。
これは、ソースコードを少し変えただけで毎回全部の依存インストールが走るのを避けやすいからです。
CMD だけでは足りないこともある
アプリによっては ENTRYPOINT や HEALTHCHECK も出てきます。
ただ、最初の段階ではそこまで広げなくても大丈夫です。
Laravel や Node.js の案件では、ローカル開発用 Dockerfile と本番イメージ用 Dockerfile を分けることもあります。開発用はツール込みで少し厚め、本番用は必要最小限にして軽く保つ、という考え方はかなり現実的です。
初心者がよく混乱する点
Dockerfile はコンテナそのものではない
Dockerfile はあくまで 作り方 です。
実際に動くのは、その Dockerfile から作られたイメージとコンテナです。
RUN と CMD が混ざる
ここは本当に多いです。
最初は 作るときの RUN、起動時の CMD で分けて覚えるだけで十分です。
COPY すればローカルと完全に同期されると思ってしまう
COPY は、ビルド時点のファイルを持っていく命令です。 ローカル編集をリアルタイムで反映する話とは別なので、開発中のマウントや Docker Compose の設定とは分けて考えた方が分かりやすいです。
Dockerfileに関するよくある質問
Q. COPY と ADD はどう使い分けますか?
A. ファイルをコピーするだけなら COPY を使うのが安全です。ADD は tar 展開や URL ダウンロードもできてしまうため、意図しない挙動の原因になります。基本は COPY、特殊用途のみ ADD です。
Q. RUN を何個も書くと遅くなるのですか?
A. RUN ごとにレイヤーが増えるため、イメージサイズが膨らみます。よく一緒に動かすコマンドは && で連結して1つの RUN にまとめると、イメージが軽くなりキャッシュも効きやすくなります。
Q. マルチステージビルドはいつ使いますか?
A. ビルド用ツール(Node.js、Maven、Go ビルダーなど)が本番イメージに不要なときに使います。FROM x AS builder でビルド、最終 FROM で成果物だけコピー、という流れでイメージが大幅に小さくなります。
Q. .dockerignore は何を書けば良いですか?
A. node_modules、.git、.env、tmp/、*.log など、コンテナに含めたくないファイル を書きます。これだけでビルドが速くなり、機密情報の混入も防げます。
Q. ベースイメージは何を選べば良いですか?
A. 公式の Alpine ベース(node:20-alpine、python:3.12-alpine)は小さくて軽量ですが、glibc 非互換でハマることがあります。安定性重視なら slim、互換性重視なら通常版(Debian ベース)が無難です。
Q. キャッシュを活かすコツは?
A. 変更が少ない命令を先に書きます。COPY package.json → RUN npm install → COPY . の順なら、ソース変更時に npm install をスキップできます。逆順だと毎回 npm install が走ります。
Q. Dockerfile から作ったイメージをチームで共有するには?
A. Docker Hub、GitHub Container Registry、AWS ECR、GCP Artifact Registry などのコンテナレジストリに push して、docker pull で配布します。CI/CD パイプラインで自動 push する構成が一般的です。
まとめ
Dockerfile は、コンテナイメージの作り方を書くファイルです。
最初は FROM RUN COPY WORKDIR CMD の5つが読めればかなり十分で、全部を覚えようとしなくて大丈夫です。
大事なのは、何を土台にして、何を入れて、どこで動かし、最後に何を起動するか を追えることです。
ここが読めるようになると、Docker の構成が一気に怖くなくなります。
続けて読むなら、Dockerとは?コンテナで何がうれしい?初心者向けに仕組み・メリット・使いどころを解説 と Docker Composeとは?複数コンテナをまとめて動かす基本を初心者向けに解説 がかなりつながりやすいです。
参考リンク
- Docker Docs: Dockerfile overview
- Docker Docs: Dockerfile reference
- Docker Docs: Using the build cache