Dockerのデータ保存場所を変更する

公開日時
更新日時

RaspberryPi4にDocker環境を構築してアプリケーションをいくつか動かしているが、デフォルトの設定だと/var/lib/docker以下にコンテナイメージやデータが保存されるため、SDカードの書き込みが増えて壊れやすくなるのではないかと心配になった。

以前RaspberryPi4にHDDを接続したものの活用していなかったので、これを機にHDDにDocker関連のデータを移動することにした。

まずはDockerを停止させる。

sudo service docker stop

/etc/docker/daemon.json にデータの保存先パスを記載して保存する。

{
  "data-root": "/mnt/hdd1/docker"
}

Docker再起動。

sudo service docker start

これでデータの保存先が変更できた。

ただ、 /var/lib/docker を移動させずに再起動したので、イメージが全て消えてしまった。

そこで、各アプリケーションで docker-compose build を再実行して、イメージの取得とビルドをやり直して無事に立ち上がるようになった。

また、再起動後にhddをmountしてからDockerを起動するようにsystemd設定を変更しておく。

systemctl list-units を実行してhddのunit名を取得する。

sudo systemctl list-units --type=mount

mnt-hdd1.mount

docker.service のAfterにmnt-hdd1.mountを追記。

sudo vi /etc/systemd/system/multi-user.target.wants/docker.service

[Unit]
After=network-online.target firewalld.service containerd.service mnt-hdd1.mount

これで再起動後も正しくDockerコンテナが起動できるようになった。

次やる時は事前にmvでディレクトリを移動させてからdata-rootの変更を行おう。

参考


Related #docker

docker-credential-desktop.exe not installed or not available in PATH

rm ~/.docker/config.jsonしたら起動できた

Cloud Datastoreのローカル環境をDockerで構築する

CloudDatastoreエミュレータとgoogle-cloud-guiの環境を構築

Extension fieldsを使ってdocker-composeのコンテナ設定を共通化する

Railsコンテナ設定を共通化して、commandだけそれぞれで変えるようにした

docker-composeコマンドのエイリアスを作る

dcコマンドを置き換えた

Dockerでpt-query-digestを使う

コンテナのおかげで手軽にslowlog分析ができるようになった

mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored.

windowsだとvolume mountすると777になるのでDockerfileを作ってcopyするようにした