Docker | 2週間で実務レベルに到達するDocker学習:Dockerfile入門(最重要)(Day4)

Docker Docker
スポンサーリンク

Day4:Dockerfile入門(最重要ステップ)

Day4は、Docker学習の中でも“最重要ポイント”です。
なぜなら Dockerfile を理解すると「自分のアプリを自由にコンテナ化できる」ようになるから です。
ここから先は、既存のイメージを使うだけでなく、あなた自身が“コンテナを設計する側”に回ります。


Dockerfileとは何か(初心者がまず理解すべき本質)

アプリを動かすための「レシピ」

Dockerfileは、
「このアプリを動かすために必要な環境を、こうやって作ってください」
というレシピ(設計書)です。

料理に例えると、
材料(ベースイメージ)を用意し、
調理手順(RUN)を書き、
最後にどうやって提供するか(CMD)を指定する、
そんなイメージです。

Dockerfile → イメージ → コンテナ の流れ

Dockerfileはあくまで「設計書」。
これを docker build すると「イメージ(設計図の完成品)」ができ、
そのイメージから docker run すると「コンテナ(実行環境)」が生まれます。

この流れを理解すると、Dockerの世界が一気にクリアになります。


例題:Node.jsアプリをDocker化する流れ

ここでは、次のような簡単な Node.js アプリを想定します。

app.js
package.json

このアプリを Dockerfile を使ってコンテナ化します。


FROM:ベースとなる環境を選ぶ

FROM node:18 の意味

FROM node:18

これは
「Node.js 18 がインストールされた公式イメージを使う」
という宣言です。

初心者がよく誤解するのは、
「Node.js を自分でインストールする必要があるの?」
という点ですが、答えは NO です。

Dockerの世界では、
必要な環境はすでに誰かが作ってくれている
というのが大前提です。


WORKDIR:作業ディレクトリを決める

WORKDIR /app の意味

WORKDIR /app

これは
「このコンテナの中で作業する場所を /app にします」
という宣言です。

以降の COPY や RUN はすべてこの /app の中で実行されます。


COPY:アプリのコードをコンテナにコピーする

COPY . . の意味

COPY . .

これは
「ホスト側の現在のフォルダ(.)を、コンテナ内の作業ディレクトリ(.)にコピーする」
という意味です。

つまり、あなたの app.js や package.json がコンテナの /app にコピーされます。


RUN:コンテナ内でコマンドを実行する

RUN npm install の意味

RUN npm install

これは
「コンテナの中で npm install を実行して、依存パッケージをインストールする」
という処理です。

ここで重要なのは、
npm install はホストではなくコンテナの中で実行される
という点です。

つまり、ホスト側に Node.js がインストールされていなくても問題ありません。


CMD:コンテナ起動時に実行されるコマンド

CMD [“node”, “app.js”] の意味

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

これは
「コンテナが起動したら node app.js を実行してアプリを動かす」
という設定です。

RUN は「イメージを作るときに実行される」
CMD は「コンテナを起動したときに実行される」
この違いは非常に重要です。


Dockerfile 全体の流れを物語として理解する

Dockerfile を読むと、次のようなストーリーが見えてきます。

Node.js 18 が入った環境を用意して、
作業場所を /app にして、
アプリのコードをコピーして、
依存パッケージをインストールして、
最後にアプリを起動する。

この流れが理解できれば、どんな言語のアプリでも Docker 化できます。


実際にイメージを作ってコンテナを動かす

イメージをビルドする

docker build -t myapp .

これは
「このフォルダの Dockerfile を使って myapp という名前のイメージを作る」
という意味です。

コンテナを起動する

docker run -p 3000:3000 myapp

アプリが 3000 番ポートで動くなら、
ブラウザで http://localhost:3000 にアクセスできます。


Pythonアプリの場合の違い(初心者が知っておくと強い)

Pythonアプリの場合は、次のような Dockerfile になります。

FROM python:3.11
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "app.py"]

Node.js とほぼ同じ構造で、
npm install が pip install に変わるだけです。

つまり、
Dockerfile の構造はどの言語でもほぼ同じ
ということです。


Dockerfileを書くときの“実務的な思考”

1. ベースイメージは公式を使う

公式イメージはセキュリティ的に安全で、更新も早いです。

2. COPY の順番を工夫してキャッシュを活かす

実務では、
package.json → npm install → 残りのコード
の順に COPY することでビルド時間を短縮します。

3. CMD と RUN の違いを理解する

RUN は「イメージ作成時」
CMD は「コンテナ起動時」
この違いを理解すると、Dockerfileの設計が一気に上手くなります。


Day4のゴール:自分のコードをコンテナ化できる

ここまで理解できれば、
Node.js でも Python でも Go でも Java でも、
どんなアプリでも Docker 化できます。

Dockerfile は最初は難しく見えますが、
実は「決まった型」があるので、一度理解すると一気に応用できます。

タイトルとURLをコピーしました