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
コマンドを走らせるように定義しました
<?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
を定期実行してもいいかもですねー(自分はしない