0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

しつこい docker ビルドのキャッシュをクリアする方法

Posted at

概要

docker ビルドをした際に「更新したはずのファイルがコンテナ上に反映されない」と苦しむことがあります。これは Dockerfile の COPYADD などでホストマシンのファイルをコンテナ上にコピーする際に、docker のビルドキャッシュが効いてしまって更新が反映されない現象です。

通常は docker compose build --no-cache でビルドし直せばいいのですが、これだけでは消えてくれないやっかいな場合があります。

docker のビルドキャッシュについて

docker はビルドの各ステップをキャッシュしており、Dockerfile の命令に変更がない場合、キャッシュされたレイヤーを再利用します。これによりビルド時間を短縮できる一方で、ファイルの内容が変更されていても、Dockerfile の命令自体が変わらないとキャッシュが再利用され、変更が反映されないことがあります。

docker のビルドキャッシュをクリアする方法

自分は以下の手順でやっています。

# まず docker コンテナを落とす
docker compose down
# docker のビルドキャッシュを消す
docker builder prune --all
# 念のため --no-cache でビルドしなおす
docker compose build --no-cache
# docker コンテナを立ち上げる
docker compose up -d

最強の魔法

上記の方法でビルドキャッシュは消せるはずですが、その他のキャッシュが効いて上手く反映されないこともあるかもしれません。「もう面倒臭いから全てのキャッシュを吹き飛ばしたい!」という方は以下を唱えてください。

docker system prune -a

これは以下のものを削除するので注意してください。

  • 停止しているコンテナ
  • どのコンテナも使用していないネットワーク
  • 使われていないイメージ
  • ビルドキャッシュ
  • 使われていないボリューム

自分はイライラしてたまにこのコマンドを実行するのですが 5GB くらいスペースが空くので気持ちが良いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?