1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Dockerがディスクを圧迫している

Last updated at Posted at 2023-08-18

・うまく消えないdockerのゴミを消してしまおう。
・dockerの保存場所を別ドライブに移してしまおう。
・ubuntu22.04環境です。

VScodeでdocker使っているが、イメージなど使い捨てしないのでディスクを圧迫してしまった。
通常はpruneコマンドで不要なものを消していく。

dockerのフォルダ全体を削除してスペースを空ける

/var/lib/docker/overlay2 がすごい容量になっていてpruneコマンドであまり消えてくれない。
仕方が無いので、いっぺんフォルダごと削除してみた。

sudo systemctl stop docker.service
sudo systemctl stop docker.socket

sudo rm -rf /var/lib/docker

sudo systemctl start docker.socket
sudo systemctl start docker.service


rm -rf コマンドは、フォルダの強制削除をするので用心深く使う。
コンテナ内に重要なデータが無いこと。

フォルダの削除後にdocker-compose up を実施したところ/var/lib/docker/overlay2 フォルダが再作成されている。dockerの再インストールとかしなくて大丈夫だったようだ。

docker関連ファイルを別のドライブに移す

ver24.0の日本語マニュアルによると、/etc/docker/daemon.json にjsonファイルを作成することで設定できそうだが、dockerフォルダを丸ごと移したい(jsonの置き場が無くなる)ので別の方法を採用。

dockerデーモンのオプションで設定する

image.png

docker.serviceファイルを編集する

sudo gedit /lib/systemd/system/docker.service

[Service]の所にある次の行
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

半角スペースに続けて以下を追加する。
--data-root=/mnt/myssd/docker
以下のようになる。

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root=/mnt/myssd/docker

保存先の注意点

dockerの保存先が別ドライブの時は、マウントポイントを手動で設定すること。/media/user/など自動的に作成されたマウントポイントはアクセス権限などの関係かうまく行かない。
/etc/fstabを直接編集するか、GUIツール(おすすめ)のディスク(デフォルトでubuntuに入っている)を利用する。

自動生成されたfstabの追記.
/dev/disk/by-uuid/554eedee-e53f-4388-b205-2618e4ff02ec /mnt/myssd auto nosuid,nodev,nofail,x-gvfs-show 0 0

再起動してコンテナ作成など問題無ければ、sudo rm -rf /var/lib/docker で古いデータを削除する。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?