このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Docker超入門:Docker Composeでイメージを再ビルドする方法(キャッシュ無効化と--buildオプションの活用)


🚀 Docker Composeでイメージを再ビルドする方法(キャッシュ無効化と--buildオプションの活用)

 Dockerを使って開発を進めていると、「あれ?Dockerfileを修正したのに、変更が反映されていない…?」ということ、ありますよね。
これは Dockerのビルドキャッシュ が原因のことが多いです。キャッシュはビルドを高速化してくれる便利な仕組みなんですが、時には思わぬ“クセモノ”になることもあります。

 この記事では、そんなときに役立つ「イメージの再ビルド方法」と「キャッシュを無効にする方法」について、わかりやすく解説していきます!

🧱 まずはDockerのビルドの仕組みをおさらい

Dockerは、Dockerfileの各ステップをキャッシュとして保存します。
 同じステップを再実行するとき、内容に変更がなければ以前のキャッシュを再利用してくれるので、ビルド時間を大幅に短縮できます。

 でも、Dockerfileを少し変更したのに古いキャッシュが使われてしまうと、更新内容が反映されないことがあります。
そこで、「キャッシュを無効にして再ビルド」するわけですね!

⚙️ 既存のイメージを使う通常ビルド

まず基本動作から確認しましょう。

docker compose up -d

このコマンドは、既に存在しているイメージ を使ってコンテナを起動します。
 つまり、新しいイメージをビルドすることはありません。Dockerfileを変更しても、再ビルドはされない のです。

表で整理するとこんな感じです👇

コマンド動作内容備考
docker compose up -d既存のイメージを使ってコンテナを起動イメージの再ビルドは行わない。

🔁 イメージを明示的に再ビルドする方法

もしDockerfileを更新して、変更を反映させたい場合は 明示的に再ビルド する必要があります。
そのためのコマンドがこれです👇

① docker compose --build

Dockerfileの内容をもとに、イメージを新しく再ビルドします。

docker compose --build

これで変更内容が反映された新しいイメージが作成されます。

② docker compose up -d --build

こちらは、「再ビルド+起動」を一度にやってくれる便利コマンドです。

docker compose up -d --build

 1回の操作で、イメージの再ビルドからコンテナ起動まで全部やってくれるので、作業効率がアップします!

コマンド説明特徴
docker compose --build明示的にイメージを再ビルドコンテナは起動しない
docker compose up -d --buildイメージの再ビルドと起動を同時に実行一発で更新できる!

🚫 キャッシュを無効化して再ビルドする

「Dockerfileを修正したのに、まだ古い内容のまま…」
そんなときは、Dockerのキャッシュが効きすぎている可能性があります。

そういうときに使うのが --no-cache オプションです👇

docker compose --build --no-cache

このオプションをつけると、Dockerはキャッシュを一切使わずに、
すべてのステップを最初からやり直してビルド します。
時間は少しかかりますが、確実に変更を反映できるんです!

オプション説明効果
--no-cacheキャッシュを使わずに全ステップ再実行古いキャッシュの影響を完全に排除

🧹 不要なDockerオブジェクトを削除する

 再ビルドをスッキリ行いたいときは、不要なコンテナ・イメージ・ネットワークを整理しておくといいです。
そのために使うのがこのコマンド👇

docker system prune -a

実行すると、「本当に削除していい?」と聞かれるので、y と入力して進めましょう。

コマンド説明
docker system prune -a停止中のコンテナ、未使用ネットワーク、未使用イメージ、キャッシュを削除

注意点:
このコマンドはかなり強力で、今使っていないものを全部消してしまいます。
なので、削除しても問題ないことを確認してから実行しましょう。

 もしボリュームなどのDockerオブジェクトが残っていれば、Docker Desktopを使ってGUIで削除しておきましょう。
コマンド操作が苦手な方には、Docker Desktopの方が視覚的で分かりやすいです。

🧩 Flaskアプリを例に再ビルドを体験!

ここまで理解したら、実際にFlaskを使ったサンプルで試してみましょう。

作業用ディレクトリを作ろう

まず、Flask環境を構築するフォルダを作成します。

cd desktop/docker
mkdir flask2
cd flask2

実行結果

PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker> mkdir flask2

    Directory: C:\Users\joeac\Desktop\docker

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/10/12    12:28                flask2

PS C:\Users\joeac\Desktop\docker> cd flask2
PS C:\Users\joeac\Desktop\docker\flask2>

Flaskのバージョンアップ

Dockerfile を作成します。
VSCodeを起動します。

code Dockerfile

Dockerfileをこんなふうに修正して、Flaskのバージョンを上げてみます👇
「flask==3.0.2」→ flask==3.0.3

FROM python:3.12
WORKDIR /usr/src/app
RUN pip install flask==3.0.3
CMD ["flask", "run", "--host=0.0.0.0"]

アプリ用ディレクトリの作成

アプリのコードをまとめて管理できるように、「src」というディレクトリを作ります。

mkdir src

実行結果

PS C:\Users\joeac\Desktop\docker\flask2> mkdir src

    Directory: C:\Users\joeac\Desktop\docker\flask2

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/10/12    13:30                src

この「src」フォルダの中に、Flaskアプリを作っていきます。

app.pyの作成

次にFlaskアプリの本体ファイル「app.py」を作ります。
以下のコマンドでVSCodeを起動します。

code ./src/app.py

エディタが開いたら、以下のコードを入力して保存してください👇

from flask import Flask

# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)

# ルートURLに対する処理を定義
@app.route("/")
def hello():
    return "Hello World!"

# アプリケーションを実行
if __name__ == "__main__":
    app.run(debug=True)

compose.yaml の作成

次に、FlaskコンテナをDocker Composeで動かすためのcompose.yamlを作成します。

VSCodeで次のコマンドを実行します。

code compose.yaml

以下の内容を貼り付けて保存します👇

services:
  flaskweb2:
    build: .
    environment:
      FLASK_ENV: development
    ports:
      - "5000:5000"
    volumes:
      - ./src:/usr/src/app

変更を保存したら、起動しているコンテナを停止させて次のコマンドを実行!

docker compose up -d --build

これで、新しいFlask 3.0.3 のイメージがビルドされて、コンテナが再起動します。

実行結果

PS C:\Users\joeac\Desktop\docker\flask2> docker compose up -d --build
[+] Building 2.1s (9/9) FINISHED
(省略)
 ✔ flask2-flaskweb2              Built                                            0.0s
 ✔ Container flask2-flaskweb2-1  Started                                          0.5s
PS C:\Users\joeac\Desktop\docker\flask2>

バージョンを確認するには次のコマンド👇

docker compose exec flaskweb2 pip list

結果に Flask 3.0.3 と表示されれば、再ビルド成功です✨

実行結果

PS C:\Users\joeac\Desktop\docker\flask2> docker compose exec flaskweb2 pip list
Package      Version
------------ -------
blinker      1.9.0
click        8.3.0
Flask        3.0.3
itsdangerous 2.2.0
Jinja2       3.1.6
MarkupSafe   3.0.3
pip          25.0.1
Werkzeug     3.1.3

🏁 まとめ

Docker Composeの再ビルドを理解しておくと、開発の効率がグッと上がります。

  • docker compose --build:明示的にイメージを再ビルド
  • docker compose up -d --build:ビルドと起動を一気に実行
  • --no-cache:キャッシュを完全に無効化して確実に再構築

キャッシュの仕組みを理解して上手に使い分ければ、
「変更が反映されない!」というモヤモヤからスッキリ解放されますよ😊