Dockerでコンテナを立ち上げっぱなしにしていると
どうも/var/lib/docker/overlay2が肥大化してサーバのストレージを使い潰してしまう
自分の例では
Docker内でseleniumを立ち上げて定期的にブラウザ処理をしCSVダウンロードをする
という処理をしていた。
(多分seleniumのキャッシュでストレージを使い潰していたのかもしれない)
いろいろ方策考えたけど、うまく行かなかったので・・(解決策がほしかった人、この先はあまり有益じゃないかも)
結局。定期的にコンテナを立ち上げ直すってところで自分的には落ち着いた・・
処理的に利用していない時間帯はあるので、その時間帯をメンテナンスウインドウとして利用すれば
システムに影響が出ない。
自分はdocker-composeを利用していたので
/usr/local/bin/docker-compose down
/usr/local/bin/docker-compose up
をcronで朝方5時に仕込んだ。
docker-composeで複数のコンテナを立ち上げている場合は
/usr/local/bin/docker-compose rm -fsv サービス名
でdocker-compose内の全部を止めること無く一部のコンテナを止めることができた。
立ち上げるときは
/usr/local/bin/docker-compose up -d サービス名
とする。
あとは、正常に立ち上がらなかった場合に備えて
dockerコマンドで該当のコンテナが立ち上がってるかを確認し、
立ち上がっていなかったらslackに通知するようにした
例えば、3つのコンテナが立ち上がってる前提だったら
こんなワンライナーをcrontabに仕込んでみた。
CONTAINER_CNT=`docker ps | grep -v 'CONTAINER'|wc -l` ; echo "${CONTAINER_CNT}" ; if [ 3 -eq $CONTAINER_CNT ]; then echo "OK"; else echo "ng"; wget "https://slack.com/api/chat.postMessage?token=xoxp-111111-2222222&channel=\%23チャンネル名&text=メッセージ_COUNT:${CONTAINER_CNT}&as_user=false&username=servercheckerror" -O /tmp/docker_container_count_ng.log ; fi
これで、コンテナ数が3でなかったらslackに通知が飛ぶ、
飛んできたら対処すればいい。
イマイチいい方法じゃないし、/var/lib/docker/overlay2肥大化の根本的解決じゃないけど、
ここ数日問題なく動作してるのをみると、我ながら・・と思ってるし
ストレージを使い潰しは乗り切ることはできた。
/var/lib/docker/overlay2の肥大化は引き続き調査してみようと思ってる。