うちには 2013 年末ごろからずっと docker コンテナを運用し続けていた物理ホストがあったのだけど、最近
$ docker ps
とかしても結果が戻ってくるのに 20 秒ぐらいかかるし、コンテナの起動とかにも同じくらい時間がかかる
$ /etc/init.d/docker restart
などとしようもんならコンテナが使用可能になるまで 3 時間ぐらいかかってた。とはいえそう頻繁にコンテナを手動で起動したり終了したりするホストではないし、 docker のデーモン自体を再起動するとかは本当に稀なのでずっと放置してたんだけど、さすがに放置できなくなってきた。
$ docker ps --all | wc -l
とすると 103781 とかなってて、ゴミコンテナやイメージが大量にありすぎるのが諸悪の根源なのではないかという予想を立てた。
そこでこのようなスクリプトでコンテナを掃除してみた。およそ 6 時間ぐらいかかって掃除が終わると、 docker ps は一瞬で結果が返ってくるし、デーモンごと再起動しても一瞬で使えるようになりました。
一般的に docker を使うような環境だと、ホストは AWS などで、ホストも頻繁に捨ててしまうみたいな運用が多いのかなという気がしているし、また 20 ヶ月以上に渡って単一のホストで運用し続けてるようなケースもまだ多くないのではないかと想像している。
なのでこのような問題に直面することはまだまだ一般的ではないのかなとは思うんですが、気づかないうちにコンテナの残りかすたちがたまりまくってパフォーマンスがめっちゃ劣化するみたいのはそのうちいろんな人のところで発生してくると思うので、日常的に cron で掃除させるようにしておいたほうがよいです。