Dockerイメージの格納先を(恒久的に)変更する

夏ですね。響け!ユーフォニアムの事を考えて熱波をやり過ごしていますが人間限界があります。

Dockerに/varを圧縮され気がついたらもう200 MiBしか残っていない、そんな経験はありませんか。僕は/varを/とは別で切ってraiserfs載せているので頻繁に起きます。 docker.serviceを触って格納先を/以下の/opt/dockerに変更する方法がありますが、これではパッケージマネージャがdocker.serviceを更新する度にリセットされてしまいます。

qiita.com

解決策*1

systemctl stop docker.service
mkdir -p /opt/docker/
rm -R /var/lib/docker/
mkdir /etc/systemd/system/docker.service.d/
touch /etc/systemd/system/docker.service.d/override.conf

内容を移し替え、ファイルを作成し、次のように編集します。これでイメージとか全部消えるので注意。

[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// -g /opt/docker

そして、

systemd daemon-reload

更新すれば終わりです。ExecStart=が無いとdocker.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.と言われます。 systemdにはドロップインファイルというユーザーが独自にserviceの一部を書き換えるための機能が提供されており、これはパッケージ管理システムの外にあるので恒久的な変更が可能です。 systemctl editを使ってもいいです。今まで知らなかった。

*1:けしずみ(@ray45422)さんに教えていただきました。ありがとうございます。