LoginSignup
12
4

More than 5 years have passed since last update.

定期的にローカル環境のDockerリソースを掃除する

Last updated at Posted at 2018-12-03

DMM.com Advent Calendar 2018 4日目の記事です。

はじめに

複数のプロジェクトや自身のテスト用docker環境をローカルで構築しているとコンフリクトが起こったり、Dockerの調子が悪くて一回まっさらにしたいなーと思うことがままありました

今までは下のようなaliasを用意してポチポチ削除していましたが正直めんどい...

drma='docker rm -f $(docker ps -aq)'
drmia='docker rmi $(docker images -q)'

etc...

なので定期的に掃除するようにしましたのでその共有
(よくわからずにDocker環境を構築して、停止時に削除しきれていない、削除できない人が社内に結構いたのでそういう人にもおすすめ)

定期的にローカル環境のDockerリソースを掃除する

docker-cleanをインストールする

Docker環境の削除を上記のようなaliasを用意してもいいのですが、ちょいめんどいので docker-cleanという便利ツールがあったのでそちらを使います

$ brew update
$ brew install docker-clean

docker-clean allでcontainer、image、network、volumeすべてを削除できるので素敵です

定期実行設定

Macではcrontabではなくてlaunchdというツールを使うのが定番らしいのでこちらを利用します

# 下記docker-clean.plistを参照ください
$ vim ~/Library/LaunchAgents/docker-clean.plist
# 下の方に `docker-clean.plist`があるのでコピペ

$ plutil -lint ~/Library/LaunchAgents/docker-clean.plist # 静的解析
$ launchctl load ~/Library/LaunchAgents/docker-clean.plist # launchd適用
$ launchctl list | grep docker-clean # 確認
-       0       docker-clean

日曜日の0時0分にdocker-clean allコマンドを走らせるように定義しました

docker-clean.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

  <key>Label</key>
  <string>docker-clean</string>

  <key>EnvironmentVariables</key>
  <dict>
    <key>PATH</key>
    <string>/usr/bin:/usr/local/bin</string>
  </dict>

  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/docker-clean</string>
    <string>all</string>
  </array>

  <key>StartCalendarInterval</key>
  <array>
    <dict>
        <key>Weekday</key>
        <integer>0</integer>
        <key>Hour</key>
        <integer>0</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
  </array>

  <key>StandardOutPath</key>
  <string>/dev/null</string>
  <key>StandardErrorPath</key>
  <string>/dev/null</string>

</dict>
</plist>

注意点/補足

  • EnvironmentVariables こちらはdocker-clean内で使っているdockerやawkコマンドなどのパス解決のために追加してます
  • ProgramArgumentsでは相対パスは使えないので、絶対パスを使います
  • launchctl unload ~/Library/LaunchAgents/docker-clean.plistをおこなうと適用済みの設定を外すことができる
  • docker-clean allじゃなくてdocker-clean runでもいいかも(お好みで

自分はdotfilesで管理することにしてる
https://github.com/mafuyuk/dotfiles/blob/master/dotfilesLink.sh#L26

まとめ

  • Dockerリソースの一括削除ができるようになりました
  • しかも定期実行で!
  • これで月曜日はスッキリした気分で出社できるようになりました

絶対に起動しておきたいコンテナがあるのなら月曜の早朝にdocker-compose up -dを定期実行してもいいかもですねー(自分はしない

参考リンク

12
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
4