いくつかの Docker コンテナを作成してこのイメージをデプロイしました。
これらのコンテナは、MySQL 5.6.22 がリリースされるまでしばらく実行されていました。mysql:5.6 の公式イメージは新しいリリースで更新されますが、私のコンテナはまだ 5.6.21 を実行しています。
イメージの変更 (MySQL ディストリビューションのアップグレードなど) を既存のすべてのコンテナに伝播するにはどうすればよいでしょうか? これを実行する適切な Docker の方法は何ですか?
ベストアンサー1
回答を評価し、トピックを研究した後、要約したいと思います。
Docker でコンテナをアップグレードする方法は次のようになります。
アプリケーション コンテナーにはアプリケーション データを保存しないでください。こうすることで、次のようなコマンドを実行して、いつでもアプリケーション コンテナーを新しいバージョンに置き換えることができます。
docker pull mysql
docker stop my-mysql-container
docker rm my-mysql-container
docker run --name=my-mysql-container --restart=always \
-e MYSQL_ROOT_PASSWORD=mypwd -v /my/data/dir:/var/lib/mysql -d mysql
データはホスト(ボリュームとしてマウントされたディレクトリ)または特別なデータ専用コンテナに保存できます。詳細はこちら
- ボリュームについて(Docker ドキュメント)
- 小さなドッカーピースを緩く結合(トム・オファーマン)
- Docker で永続ストレージ (例: データベース) を扱う方法(Stack Overflow の質問)
コンテナ内でアプリケーションをアップグレードする (例: yum/apt-get upgrade を使用) ことは、アンチパターンと見なされます。アプリケーション コンテナは不変であるはずであり、再現可能な動作を保証する必要があります。一部の公式アプリケーション イメージ (特に mysql:5.6) は、自己更新するように設計されていません (apt-get upgrade は機能しません)。
さまざまなアプローチを見ることができるよう、回答を寄せてくださった皆様に感謝申し上げます。