※当サイトの記事には、広告・プロモーションが含まれます。

Docker ComposeでDockerfileの変更後はdocker-compose build --no-cacheが必要らしい

gigazine.net

クラウドの基盤の物理ハードウェアに、普及してる高速なSSDが本当に採用されてるのかが分からんので、何とも言えませんな。

基盤の物理ハードウェアの方にガタが来てるとかは無いんかね?

物理ハードウェアのスペックの刷新が追い付いていないと、サービスとして提供している仮想マシンVM:Virtual Machine)の性能も頭打ちになりそうな気がするんだけど、ハードウェアのようなlow-levelな領域に疎いから分からん...

Docker ComposeでDockerfileの変更後はdocker-compose build --no-cacheが必要らしい

Compose file(デフォルトだと、docker-compose.yml)の変更などは、

docker-compose [option] up -d

とかで、コンテナ再作成・起動で反映されるんだけども、Dockerfileの変更については、Dockerイメージの方に影響するので、上記コマンドでは反映されないという...

zenn.dev

⇧ 上記サイト様と同じ罠にハマるという...

おそらく、Compose file(デフォルトだと、docker-compose.yml)にDockerfileではなく、Dockerイメージを指定していて、Dockerイメージを変更した場合なんかも、同様な事象に陥るかと。

そして、

stackoverflow.com

⇧ Dockerのドキュメントに対して、海外の方でもご立腹の方がおられるようです。

ドキュメントが酷いと感じていたのは、自分だけでは無いと知ることができた謎の安心感はありますが(偏見の塊ですが...)、話を元に戻して、「docker-compose up」は残念ながらDockerイメージの更新には無力でしたと。

なので、何個かのコマンドを実行する必要があるのですが、

stackoverflow.com

⇧ stackoverflowにあるように、ワンライナーでもいけるっぽい。

docker-compose down && docker-compose build --no-cache && docker-compose up -d    

⇧ という感じですかね。

プロジェクト名を明示してる場合なんかは、

docker-compose -p [プロジェクト名] down && docker-compose -p [プロジェクト名] build --no-cache && docker-compose -p [プロジェクト名] up -d    

Compose fileを指定する場合は、

docker-compose -f [Compose file] down && docker-compose -f [Compose file] build --no-cache && docker-compose -f [Compose file] up -d    

⇧ みたいな感じになるってことなんかな。

Compose fileを指定する場合は、Compose fileの配置されているディレクトリに移動して、Compose fileがあるかどうかの確認はした方が良さそうね。

ちなみに、

docs.docker.jp

⇧ コマンドが大きく分けて、

  1. Docker CLI (docker)
  2. Docker Compose CLI
  3. デーモン CLI (dockerd)

の3つに分かれてるらしく、

docs.docker.jp

docs.docker.jp

docs.docker.jp

⇧ 上記のページがそれぞれの詳細になっているようなのだけど、いまいち、

  • Docker CLI (docker)
    docker compose
  • Docker Compose CLI
    docker-compose

の使い分けが分からない...

何やら、

stackoverflow.com

forums.docker.com

⇧ 同じように思っている方はおられたようです。

docs.docker.com

⇧ なるほど、docker-composeの方は2023年7月をもって、新しいリリースが中止されたらしい。

まとめると、

  • Docker CLI (docker)
    docker compose ← Compose v2(go言語で構築)
  • Docker Compose CLI
    docker-compose ← Compose v1(pythonで構築)

ということらしく、これからは、docker composeの方を使っていってね、ということみたいね。

で、更なる謎が、

github.com

⇧ Docker Composeの説明では、

  • Compose v1
  • Compose v2

と、バージョンは、v1とv2の2つのよう思えるんだけど、

docs.docker.jp

docs.docker.jp

⇧ Compose fileについては、バージョンが、カオスなことになっている...

redj.hatenablog.com

Compose Specificationでのversionの取り扱いについては、以下で言及がある。

github.com

上掲のサイトより引用する。

Top-level version property is defined by the specification for backward compatibility but is only informative.

A Compose implementation SHOULD NOT use this version to select an exact schema to validate the Compose file, but prefer the most recent schema at the time it has been designed.

日本語訳すると以下。

この仕様で定義しているトップレベルのversionプロパティは、後方互換性のために残してあるだけで、参考情報にすぎません。

Composeの実装は、Composeファイルの妥当性検証用の正確なスキーマを選択する目的でversionを利用すべきではなく(SHOULD NOT)、Composeの実装を設計した時点での最新のスキーマを選択すべきです。

つまり、version後方互換性のための飾りで、Docker ComposeはCompose Specificationに則ったスキーマを利用する、ということである。

Composeファイルでのversion指定は意味なし - Jaybanuan's Blog

⇧ なるほど、なかなか酷いことになっていますな...

Compose fileに設定できる項目とその内容の一覧が把握し辛いですな...

docs.docker.com

docs.docker.com

docs.docker.com

⇧ このあたりを参考に頑張ってCompose fileを完成させるしかないのか...、苦行ですな...

そもそも、

⇧「Version 1」については、ドキュメントで選択肢すらも無い状態なんだが...

「Version 1」が非推奨とアナウンスしてるの分かるんだが、ドキュメントは辿れるようにしておいて欲しい...

毎度モヤモヤ感が半端ない...

今回はこのへんで。