Docker コンテナの自動更新は自分で仕掛けた罠です
Docker コンテナーを自動的に更新すると、あなたが望んでいた安心感のように聞こえるかもしれませんが、それは決してそうではありません。ホームラボで Docker コンテナの自動更新を試みましたが、何度も失敗に終わりました。ここでは何が起こったのか、そして現在ホームラボでどのように Docker を実行しているのかを説明します。
コンテナの自動更新は私が何年も望んでいたものです
Unraid ではワンクリックでアップデートできましたが、自動アップデートはできませんでした
初めて Docker を使い始めたとき、これまで使ってきた他のすべてのソフトウェアと同じで、自動更新が当然のことになるだろうと想像していました。
私の最初の Docker 体験は Unraid でした。 ほとんど そうやって。デフォルトでは、Unraid は単に個々のコンテナを更新するボタンと、すべてのコンテナを一度に更新するボタンを提供します。コンテナを自動的に更新するコミュニティ プラグインがありますが、私が始めた数年前はそれほど人気がありませんでした。
私はソフトウェアを常に最新の状態に保ちたいだけだったので、これは少々面倒でしたが、それが常に最善であるとは限らないことに気付きませんでした。
コンテナを自動的に更新するのは賢い選択のように思えますよね?
1 つの悪いアップデートがホームラボ全体を破壊する可能性があります
何年もの間、更新されたソフトウェアは安全なソフトウェアであり、それが Docker コンテナにも適用されるとばかり思っていました。そしてそれは可能ですが、注意点があります。
ご存知のとおり、Docker コンテナーは通常のソフトウェアとはまったく異なる機能を果たします。コンテナーは基本的に一種の小さな仮想マシンであり、構成やその他の機能のためにストレージ上のファイルを参照します。
ただし、Docker について最初は気づかなかったのは、多くのコンテナーが非常に頻繁に更新されるということです。場合によっては1日に複数回も。すべてのコンテナがこのようなわけではありませんが、多くのコンテナは、 多くの 自己ホスト型ツールです。
Unraid を使用している間、コンテナーに利用可能なアップデートがあるのを見つけたら、単純に「すべてアップデート」をクリックしていました。しかしある日、それはうまくいきませんでした。
ご存知のとおり、私は多くの Docker コンテナを実行しています。ある時点で、この値は 50 をはるかに超えており、VPN コンテナーの不適切な更新により、VPN コンテナーに依存していた他のサービスのいくつかがダウンしました。
実際に何が起こったのかを理解するまでに時間がかかり、その後、ロールバックする方法を理解する必要がありました。最初にそれが起こったときは少し緊張しましたが、最終的には理解できました。
ご存知のとおり、そのコンテナには不適切なアップデートが同梱されており、そのアップデートにより将来のどこかで互換性が損なわれただけです。何のことかわからないままアップデートしてしまい、その代償を払ってしまいました。
ありがたいことに、ランダムに自動更新されませんでした。ご存知のとおり、私は最終的に Unraid をやめて自動アップデートを設定しましたが、結果はさらに悪化しました。
私の家族は、家にある多くのスマート デバイスに電力を供給するために Home Assistant に依存しています。私はこれらのデバイスをすべて Home Assistant 経由で HomeKit に取り込み、Siri オートメーションを使用できるようにしています。
これらの自動化の 1 つは単に「おやすみ」と呼ばれるもので、夜の間家を閉めます。すべての照明を消し、主寝室の特定の電力レベルでファンをオンにし、ドアをロックし、その他いくつかのことを行います。
この自動化はホーム アシスタントに大きく依存しており、ホーム アシスタントが機能しない場合、携帯電話のスマート ホーム ギアに簡単にアクセスできなくなります (すべてホーム アシスタントによって認証されるだけなので)。
さて、ある夜、妻と私が就寝したとき、家の中は基本的に何も遮断されませんでした。いくつかのことがきっかけになりましたが、多くはありませんでした。私はすでに疲れていて、夜も遅かったので、家の電気がきちんと閉まらなかったことにイライラしていました。
ホーム アシスタントはサーバー上で自動更新され、一部の統合を破壊する悪い更新だったことが判明しました。 1 日ほどで修正プログラムがリリースされ、再び動作するようになりましたが、自動更新により、私がそれが起こったことに気付かずに家全体が完全に混乱してしまいました。
実際のメンテナンスを行う準備ができた場合にのみ更新してください
何かがいつ更新されるのか、そして失敗した場合はロールバックする方法を常に知っておく必要があります。
最近は何も自動更新していません。エルメスの代理店にやってもらうか、手作業でやります。エルメスは対応が上手で、アップデート前にすべてのバックアップを取ってくれるので、問題があった場合でも簡単に復元できます。
コンテナを手動で更新する場合もほぼ同じです。必要に応じてコンテナーがその時点を超えて更新されないように Docker で特定のバージョンを固定する方法と、必要に応じて不良コンテナーのトラブルシューティングを行う方法を理解しました。
何も自動に設定していない アップデート けれど。エルメス (私はフロド・バギンズと呼んでいます) は私のホームラボを監視しており、更新が必要なコンテナからハードドライブの状態に至るまで、その中で何が起こっているのかを毎日更新してくれます。
したがって、私は現在、アップデートがあるときに自動的に通知するシステムを持っていますが、私の知識や承認なしにアップデートを自動的に適用するシステムは持っていません。一度騙してください…
Docker はホームラボを稼働させますが、ダウンさせることもあります
私のホームラボ全体が (いくつかの仮想マシンの外で) Docker 上で実行されているため、Docker で何かが発生すると、ホームラボのあらゆる領域に影響します。
私は何度か Docker を壊したことがあるので、現在はコンテナ構成ファイルをオフサイトにプッシュする自動バックアップを毎晩実行しているので、何か問題が発生した場合でも、そのコンテナの最大 1 日前のコピーをいつでも復元できます。
関連情報は以下のリンクからご確認いただけます