概要
Dockerすごい便利なんですが、油断して作業していると大量にデータが発生して、容量100%でサーバが動かなくなるまで気づかなくて死ぬというイベントが不定期に発生します。本記事では対策として以下の2つの方法について紹介します。
- 定期的にクリーニングする
- データの保存場所を余裕のあるディスクに移動する
クリーニング方法
Dockerイメージをクリーニング
Dockerイメージのビルドを繰り返しているとゴミイメージが大量に蓄積します。使用していないイメージなどをすっきり掃除しましょう。動作しているコンテナには影響を与えないようにいい感じに削除してくれます。
docker image prune -a -f
Dockerコンテナをクリーニング
コンテナの停止起動を繰り返していたり、実験をしていると使われていないコンテナが大量に溜まっていきますね。docker ps
だけでは見えないコンテナも隠れているのでお掃除しちゃいましょう。動作しているコンテナには影響を与えないようにいい感じに削除してくれます。
docker system prune -a -f
Dockerの一時ファイル保存場所を別の場所に移動する
Dockerの一時ファイルは/var/lib/docker
にデフォルトで保存されます。データには、イメージ、ボリューム、コンテナ内の一時ファイル、およびクラスタの状態などの永続化されたデータが格納されています。HDDなどの余裕のあるディスクに移動することでディスクを圧迫するようなイベントの頻度を下げることができます。
-
コンテナは動かしたままでOKです。まずは退避先にファイルの一次コピーを開始します。コマンド終了後に「コピー中に削除・追加されたファイルがあるでー」と言われますが、後でコピーし直すので無視でOKです。
sudo rsync -axPS /var/lib/docker/ /移動先のディレクトリ
-
sudo vi /etc/docker/daemon.json
で設定ファイルに以下の設定を追記します。ファイルがなければ作成してください。/etc/docker/daemon.json{ "data-root" : "/移動先のディレクトリ" }
-
Dockerデーモンを停止します。
sudo service docker stop
-
Dockerデーモンが停止したら2次コピーを開始します。すでにある一次コピーの差分コピーを行います。数分で終わるはずです。
sudo rsync -axPS /var/lib/docker/ /移動先のディレクトリ
-
この時点でデーモンを再開すると、
/移動先のディレクトリ
を参照してデーモンが開始しますが、元のディレクトリの場所を参照せずに動作していることを確認するためにディレクトリ名を変更しておきます。もし動作しなかった場合に備えて削除はまだ我慢です。sudo mv /var/lib/docker /var/lib/docker.bak
-
Dockerデーモンを開始し、コンテナが起動していることを確認します。
sudo service docker start
-
コンテナの動作やDockerコマンドの操作含め問題が起こっていないことを入念に確認してから、元のファイル場所を削除します。できれば数日間観察してほしいです。
sudo rm -rf /var/lib/docker.bak
参考