Dockerfileを何回変更しても内容が更新されない事象の原因はもしかしてキャッシュかも【Docker】
DockerやDocker ComposeでDockerfileを変更したのに全然内容が変わらない!というのは、Dockerを長らく使っている方なら一度はハマったことがあるはず・・・。
にもかかわらず、検索しても「Dockerfileの内容がおかしいのでは?」とか「ちゃんとapt-get updateして」みたいな記事しか出てこず、さらにハマる負のスパイラル。
恐らくそれ、キャッシュの問題なので以下を試してみてください。
実行内容
Build Cache確認
ちゃんとdocker rmi
までして、イメージも削除しているのに・・・という方、以下のコマンドを実行して、キャッシュ(Build Cache)が残っていれば、ほぼソレが原因で確定です。
docker system df
キャッシュを使わずにビルドする
キャッシュを使わずにビルドするには、以下のコマンドを打ちます。
Docker
docker build . --no-cache
Docker Compose
docker-compose build --no-cache
ビルドせずにキャッシュを削除する
ビルドせず、単にキャッシュ削除するだけならこちら。
docker builder prune
かなり強力なコマンドなので注意しながら実行してください。(他のイメージのキャッシュもすべて削除されます。)
おまけ
以下は、Docker豆知識です。
キャッシュ・バスティング(cache busting)
Dockerfile内で1行ごとにRUNを実行していると、サイズが大きくなる上に、キャッシュが蓄積されるので、毎度一からダウンロードされてしまうデメリットはありますが、以下の方法が良いと思います。
RUN apt-get update && apt-get install -y \
XXX \
YYY \
ZZZ
また、apt-get upgrade
は非推奨ですので、あわせて注意してください。
Dockerイメージサイズを小さくする
RUN apt-get update && apt-get install -y \
XXX \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
もはや本題とは関係がありませんが、こんなのもありますという紹介。
Debianパッケージファイルの削除と、apt-get update
で取得したリポジトリのパッケージリストの削除を行うことで、Dockerイメージファイルを小さくできます。
よければ使ってみてください。
【Reference】
https://docs.docker.jp/develop/develop-images/dockerfile_best-practices.html
https://dev.classmethod.jp/articles/apt-get-magic-spell-in-docker
ディスカッション
コメント一覧
まだ、コメントがありません