サーバー ソフトウェア 公開日 2026.04.14 更新日 2026.05.14

Dockerfileとは?何を書くもの?最初に読むべき命令を初心者向けに整理

Dockerfile とは何かを、なぜ必要なのか、何を書くファイルなのか、FROM・RUN・COPY・WORKDIR・CMD の基本命令と読み方まで含めて初心者向けに整理した記事です。

先に要点

  • Dockerfile は、Docker で使う コンテナイメージの作り方を書くファイルです。
  • 最初に押さえたい命令は `FROM` `RUN` `COPY` `WORKDIR` `CMD` の5つです。
  • 初心者は全部の命令を覚える必要はなく、`何を土台にして、何を入れて、どこで動かし、最後に何を実行するか` が読めればかなり十分です。
  • 実務では、Dockerfile を読む力があると、開発環境本番環境の再現方法がかなり見えやすくなります。

Docker は少し分かってきたけど、Dockerfile になると急に読めない という人は多いです。
特に、英単語が並んでいるだけに見えて、どこから見ればいいのか分からなくなりやすいです。

でも Dockerfile は、全部を一気に理解しなくても大丈夫です。
最初は このコンテナをどうやって作るかを書いた手順書 と考えるとかなり入りやすいです。

この記事では、2026年4月14日時点で Docker Docs の Dockerfile overviewDockerfile reference を確認しながら、Dockerfile とは何か、何を書くものか、最初にどの命令から読めばよいかを初心者向けに整理します。
DockerDocker 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

これがあると、後続の RUNCMD/app を基準に動きます。
Docker Docs でも、RUN CMD COPY などの後続命令に影響する重要な命令として説明されています。

5. CMD

CMD は、コンテナ起動時にデフォルトで実行するコマンドを指定する命令です。

CMD ["node", "server.js"]

ここを見ると、このコンテナは最終的に何を動かしたいのか が分かります。
RUN と混ざりやすいですが、ざっくり言えば

  • RUN: 作るときに実行
  • CMD: 起動するときに実行

です。


まずはこう読むと分かりやすい

Dockerfile を上から順に読むだけでもいいのですが、初心者は次の順で見るとかなり入りやすいです。

  1. FROM で土台を確認する
  2. WORKDIR で作業場所を見る
  3. COPY で何を持ち込むかを見る
  4. RUN で何を追加しているかを見る
  5. CMD で最後に何を動かすかを見る

この順だと、何の環境で、どこに、何を置いて、どう組み立てて、何を起動するか が自然に追えます。


最小の例で見るとこうなる

FROM node:22-alpine

WORKDIR /app

COPY package.json package-lock.json ./
RUN npm ci

COPY . .

CMD ["npm", "start"]

この例を日本語で読むと、だいたいこうです。

  1. Node.js 22 の軽量イメージを土台にする
  2. 作業ディレクトリを /app にする
  3. 依存定義ファイルを先にコピーする
  4. npm ci で依存を入れる
  5. 残りのソースコードをコピーする
  6. 起動時に npm start を実行する

このレベルで読めれば、初心者としてはかなり十分です。


実務で何が大事になるのか

ベースイメージ選び

FROM で何を使うかはかなり大事です。
重すぎるイメージを使うとビルドも配布も遅くなりやすいですし、古いイメージを放置するとセキュリティ面も気になります。

COPY の順番

実務では、Docker のビルドキャッシュも効率にかなり影響します。
依存ファイルだけ先に COPY してからインストールし、その後にソース全体を COPY する書き方はよく見ます。

これは、ソースコードを少し変えただけで毎回全部の依存インストールが走るのを避けやすいからです。

CMD だけでは足りないこともある

アプリによっては ENTRYPOINTHEALTHCHECK も出てきます。
ただ、最初の段階ではそこまで広げなくても大丈夫です。

実務での使用例

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、MavenGo ビルダーなど)が本番イメージに不要なときに使います。FROM x AS builder でビルド、最終 FROM で成果物だけコピー、という流れでイメージが大幅に小さくなります。

Q. .dockerignore は何を書けば良いですか?

A. node_modules.git.envtmp/*.log など、コンテナに含めたくないファイル を書きます。これだけでビルドが速くなり、機密情報の混入も防げます。

Q. ベースイメージは何を選べば良いですか?

A. 公式の Alpine ベース(node:20-alpinepython:3.12-alpine)は小さくて軽量ですが、glibc 非互換でハマることがあります。安定性重視なら slim、互換性重視なら通常版(Debian ベース)が無難です。

Q. キャッシュを活かすコツは?

A. 変更が少ない命令を先に書きます。COPY package.jsonRUN npm installCOPY . の順なら、ソース変更時に npm install をスキップできます。逆順だと毎回 npm install が走ります。

Q. Dockerfile から作ったイメージをチームで共有するには?

A. Docker HubGitHub Container RegistryAWS ECR、GCP Artifact Registry などのコンテナレジストリに push して、docker pull で配布します。CI/CD パイプラインで自動 push する構成が一般的です。


まとめ

Dockerfile は、コンテナイメージの作り方を書くファイルです。
最初は FROM RUN COPY WORKDIR CMD の5つが読めればかなり十分で、全部を覚えようとしなくて大丈夫です。

大事なのは、何を土台にして、何を入れて、どこで動かし、最後に何を起動するか を追えることです。
ここが読めるようになると、Docker の構成が一気に怖くなくなります。

続けて読むなら、Dockerとは?コンテナで何がうれしい?初心者向けに仕組み・メリット・使いどころを解説Docker Composeとは?複数コンテナをまとめて動かす基本を初心者向けに解説 がかなりつながりやすいです。


参考リンク

あとで見返すならここで保存

読み終わったあとに残しておきたい記事は、お気に入りからまとめて辿れます。