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

Docker Docker
スポンサーリンク

Day4:DockerfilDay4:Dockerfile入門(最重要)後半

テーマ:本番運用を意識した“壊れにくく・軽量で・安全な Dockerfile”を作れるようになる

後半では、前半・中盤で学んだ
Dockerfile の基本構造・キャッシュ・最適化
をさらに深掘りし、実務で必須となる

  • イメージの軽量化
  • マルチステージビルド
  • セキュリティ
  • 再現性の高い構成

を理解していきます。

ここを理解すると、あなたは
「本番で使える Dockerfile を自分で設計できるエンジニア」
になります。


イメージを“軽量化”する重要性

軽いイメージは速い・安全・安い

Docker イメージが軽いと:

  • ビルドが速い
  • デプロイが速い
  • セキュリティリスクが減る
  • ストレージコストが下がる

実務では 軽量化は必須 です。

Node.js の軽量イメージ例

FROM node:18-slim
Dockerfile

Python の軽量イメージ例

FROM python:3.11-slim
Dockerfile

“slim” は不要なツールを削った軽量版です。


マルチステージビルドを深掘りする

マルチステージとは?

ビルド用の環境
本番用の環境
を分けることで、最終イメージを軽量化する技術です。

Node.js の例

FROM node:18 AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM node:18-slim
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "dist/app.js"]
Dockerfile

何が起きているか

  1. build ステージ
    • npm install
    • ビルド(npm run build)
    • 重いツールが入っている
  2. 本番ステージ
    • build の成果物だけコピー
    • node:18-slim で軽量化
    • 不要なファイルが一切ない

結果:
本番イメージが劇的に軽くなる。


セキュリティを強化する Dockerfile の書き方

root で動かさない

コンテナ内で root 権限を使うのは危険です。

RUN useradd -m appuser
USER appuser
Dockerfile

これでコンテナ内の実行ユーザーが一般ユーザーになります。

不要なファイルを COPY しない

.dockerignore を必ず使う。

node_modules
.git
.env

特に .env を COPY すると
パスワードがイメージに埋め込まれる
という重大事故になります。


実務で必須の“再現性の高い Dockerfile”

バージョンを固定する

悪い例:

FROM node:latest
Dockerfile

良い例:

FROM node:18.17.1
Dockerfile

理由:
“latest” は日によって内容が変わるため、
昨日動いたのに今日動かない
という事故が起きます。


本番レベルの Dockerfile(Node.js)

FROM node:18 AS build
WORKDIR /app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

FROM node:18-slim
WORKDIR /app

COPY --from=build /app/dist ./dist

RUN useradd -m appuser
USER appuser

CMD ["node", "dist/app.js"]
Dockerfile

この Dockerfile の強み

  • マルチステージで軽量
  • npm ci で再現性の高い依存関係
  • root を使わない安全設計
  • dist のみをコピーして不要物を排除

本番レベルの Dockerfile(Python)

FROM python:3.11 AS build
WORKDIR /app

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

FROM python:3.11-slim
WORKDIR /app

COPY --from=build /app .

RUN useradd -m appuser
USER appuser

CMD ["python", "app.py"]
Dockerfile

この Dockerfile の強み

  • slim で軽量
  • no-cache-dir で無駄なキャッシュを残さない
  • root を使わない
  • 再現性の高い依存関係

後半まとめ

あなたがここまで理解できていれば、Day4 のゴールは完全達成です。

  • イメージ軽量化は実務で必須
  • マルチステージビルドで本番イメージを最適化できる
  • root を使わないことでセキュリティが向上
  • .dockerignore は必須
  • バージョン固定で再現性が高まる
  • Node.js / Python の本番レベル Dockerfile を書ける
Docker
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました