【初心者でも理解できる】Dockerfileとは?書き方・使い方・メリットを実体験で徹底解説
プログラマーやSEとして働いていると、「Docker」という言葉を耳にする機会は非常に多いのではないでしょうか。その中でも特に重要な存在が「Dockerfile」です。
しかし、いざ触ってみようとすると「難しそう」「何を書けばいいのかわからない」と感じる方も多いはずです。
この記事では、Dockerfileについて初心者にもわかりやすく丁寧に解説しつつ、実際の体験談を交えて「どう使うのか」「何が便利なのか」までしっかり説明していきます。
Dockerfileとは?簡単にいうと何か
Dockerfileとは、一言でいうと「Dockerイメージを作るための設計図」です。
通常、アプリケーションを動かすためには、以下のような準備が必要です。
- OSの用意
- 言語(Python、Node.jsなど)のインストール
- ライブラリのインストール
- 環境変数の設定
- アプリの配置
これらを手作業で毎回やるのは大変ですよね。
Dockerfileを使うことで、この一連の作業を「コードとして記述」できるようになります。
つまり、誰でも同じ環境を一瞬で再現できるのが最大の特徴です。
Dockerfileの基本構文をわかりやすく解説
Dockerfileはシンプルなテキストファイルで、以下のように書きます。
FROM node:18
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
CMD ["node", "index.js"]
それぞれの意味を説明します。
FROM
ベースとなるイメージを指定します。これは「土台」となる部分です。
WORKDIR
作業ディレクトリを指定します。
COPY
ローカルのファイルをコンテナ内にコピーします。
RUN
コマンドを実行します。パッケージのインストールなどに使います。
CMD
コンテナ起動時に実行するコマンドを指定します。
最初は覚えることが多く感じますが、基本はこの5つで十分です。
Dockerfileの使い方【実体験】
ここからは、実際に私がDockerfileを使い始めた頃の話をします。
当時、私はチーム開発でNode.jsのプロジェクトに参加していました。しかし、メンバーごとに環境が違い、以下のような問題が発生していました。
- 「自分の環境では動くのに他の人は動かない」
- Nodeのバージョン違いでエラーが出る
- 環境構築に1日かかる新人がいる
正直、開発どころではありませんでした。
そこで導入されたのがDockerとDockerfileです。
Dockerfileに環境構築の手順をすべて書き、以下のコマンドを実行するだけで環境が完成するようになりました。
docker build -t my-app .
docker run my-app
これにより、チーム全員が同じ環境で開発できるようになったのです。
特に衝撃だったのは、新人の環境構築時間が「1日 → 10分」に短縮されたことでした。
Dockerfileを使うメリット
① 環境の再現性が高い
Dockerfileがあれば、誰でも同じ環境を作れます。
「動かない問題」がほぼなくなるため、開発効率が大幅に向上します。
② チーム開発がスムーズになる
環境差異によるトラブルが減るため、コミュニケーションコストも下がります。
③ 本番環境との差がなくなる
開発環境と本番環境を同じDockerfileから作れるため、「本番だけ動かない」という事故を防げます。
④ インフラ知識が身につく
Dockerfileを書くことで、OS・ミドルウェア・ネットワークの理解が深まります。
Dockerfileを知ることで得られる具体的な効果
私自身の経験として、Dockerfileを使いこなせるようになってから以下の変化がありました。
- 環境構築の時間がほぼゼロになった
- トラブル対応が減った
- CI/CDへの理解が進んだ
- 転職活動で評価された
特に面接では「Docker使えます」と言えるだけで、インフラ理解があるエンジニアとして評価されやすくなります。
よくあるつまずきポイント
キャッシュの理解不足
Dockerはレイヤー構造になっており、キャッシュが効きます。
順番を工夫しないと、毎回ビルドが遅くなるので注意が必要です。
ファイルコピーのミス
COPYのパスが間違っているとエラーになります。
不要なファイルが含まれる
.dockerignoreを使わないと、node_modulesなどが含まれてしまい、ビルドが遅くなります。
応用編:さらに便利になるDockerfileの書き方
マルチステージビルド
不要なファイルを削減し、軽量なイメージを作る方法です。
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
FROM node:18-slim
WORKDIR /app
COPY --from=builder /app/dist .
CMD ["node", "index.js"]
これにより、ビルド用と実行用を分けることができます。
環境変数の活用
ENV NODE_ENV=production
設定を柔軟に変えられるようになります。
docker-composeとの連携
複数コンテナを扱う場合はdocker-composeと組み合わせるとさらに便利です。
Dockerfileは今後必須スキルになる理由
クラウドネイティブ時代において、Dockerは標準技術となりつつあります。
特に以下の分野では必須スキルです。
- Web開発
- マイクロサービス
- CI/CD
- Kubernetes
Dockerfileを書けるだけで、対応できる業務の幅が大きく広がります。
まとめ
Dockerfileは一見難しそうに見えますが、実はとてもシンプルで強力なツールです。
ポイントをまとめると以下の通りです。
- Dockerfileは環境構築の設計図
- 誰でも同じ環境を再現できる
- チーム開発が圧倒的に楽になる
- インフラ理解が深まる
- エンジニアとしての市場価値が上がる
最初は小さなプロジェクトで試してみるのがおすすめです。
一度使い始めると、「なぜ今まで使っていなかったのか」と感じるはずです。
ぜひDockerfileを活用して、開発効率を一段階引き上げてみてください。
