このページで解説している内容は、以下の 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 --build1回の操作で、イメージの再ビルドからコンテナ起動まで全部やってくれるので、作業効率がアップします!
| コマンド | 説明 | 特徴 |
|---|---|---|
| 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 DockerfileDockerfileをこんなふうに修正して、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:キャッシュを完全に無効化して確実に再構築
キャッシュの仕組みを理解して上手に使い分ければ、
「変更が反映されない!」というモヤモヤからスッキリ解放されますよ😊
