普通、dockerで運用するときはMastodonのリポジトリをクローンしてきて、docker-compose.yml
のbuild
をコメントアウトすることで、リポジトリからコンテナイメージをpullするように変える。
ただこの場合、バージョンアップデートの際にgit stash && git fetch && git checkout <version> && git stash pop
するとこんな感じにconflictが発生する。(ここでは例示のため4.2.6から4.2.5にダウングレードしてるが)
そこで、docker-compose.yml
とは別にdocker-compose.override.yml
というのを置いておくと、特定のキーを上書きしてくれる機能を使う。
Merge Compose files | Docker Docs
最近まで、この上書き機能では特定のエントリをコメントアウトするような操作はできなかったが、docker-compose v2.18.0以降で!reset
というのを置いておくとできるようになった。
docker-compose.override.yml で 打ち消し定義 ができるようになった。
ので、sudo apt-get upgrade docker-compose-plugin
をやった上でこんなdocker-compose.override.yml
を作る。
(実際のファイルではpostgresの設定とかでもうちょっといろんなエントリが入っている。)
こうすれば、大概のマイナーな更新時はdocker compose pull&& docker compose down && docker compose up -d
1つでよくなる。(compose自体に更新が入ったり、.env.productionとかに変更があったり、rake:db migrate
する必要がある場合もあるので、基本はリリースノートを読んでから、必要に応じてgit pullすること!)
(そもそもきちんとリポジトリをmergeで更新していく運用の方がいいのかもしれないが)
注意点として、ハイフン付きのdocker-compose
コマンドはv1コンパチで動くので!reset
が効かずパースエラーになる。もう実質deprecatedになってるのでサブコマンドのdocker compose
で使うこと!(これに気づかず30分ぐらいハマった)