Skip to content

Dockerで不要ストレージを削除する

Dockerの設定方法やトラブルシューティングについては下記などで説明されています。

後者のドキュメント中のDocker デーモンの設定に以下の記載があります。記載の通り、Dockerの設定をカスタマイズしたい場合は「/etc/docker/daemon.jsonを新規作成して設定する」という方法があります。

Docker デーモンを JSON ファイルで設定するには、Linux システム上では /etc/docker/daemon.json にファイルを作成するか、Windows 上では C:\ProgramData\docker\config\daemon.json を作成します。Mac OS ではタスクバーの鯨アイコンから Preferences > Daemon > Advanced を選択します。

/etc/docker/daemon.jsonを作成していない場合、デフォルトでDockerはコンテナイメージなどを「/var/lib/docker」ディレクトリ配下に保存します。不要なコンテナイメージやボリュームが貯まっていくとストレージを圧迫してしまいます。今回は不要になったDocker関連ストレージを削除する方法をメモします。

検証環境

対象 バージョン
Ubuntu 24.04.3 LTS
Docker 29.0.2

Dockerのデフォルト設定

Dockerの設定値はdocker system infoで確認することができます。私の検証環境では以下のように表示されました。

# docker system info
Client: Docker Engine - Community
 Version:    29.0.2
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.30.0
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.40.3
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  model: Docker Model Runner (Docker Inc.)
    Version:  v1.0.1
    Path:     /usr/libexec/docker/cli-plugins/docker-model

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 29.0.2
 Storage Driver: overlayfs
  driver-type: io.containerd.snapshotter.v1
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 CDI spec directories:
  /etc/cdi
  /var/run/cdi
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: fcd43222d6b07379a4be9786bda52438f0dd16a1
 runc version: v1.3.3-0-gd842d771
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.8.0-88-generic
 Operating System: Ubuntu 24.04.3 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 8
 Total Memory: 15.62GiB
 Name: localhost
 ID: 8d78b7f7-4453-4afc-9705-701068a9d9ff
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  ::1/128
  127.0.0.0/8
 Live Restore Enabled: false
 Firewall Backend: iptables

Docker Root Dir: /var/lib/dockerと表示されています。まだコンテナイメージの取得(pull)などを実行していないデフォルト状態でこのディレクトリを確認すると以下の構造になっていました。

# tree /var/lib/docker/
/var/lib/docker/
├── buildkit
│   ├── cache.db
│   ├── containerd-overlayfs
│   │   ├── cachemounts
│   │   ├── metadata_v2.db
│   │   └── workerid
│   ├── executor
│   └── history_c8d.db
├── containers
├── engine-id
├── network
│   └── files
│       └── local-kv.db
├── plugins
│   └── tmp
├── runtimes
├── swarm
├── tmp
└── volumes
    ├── backingFsBlockDev
    └── metadata.db

14 directories, 8 files

Dockerが利用しているストレージ容量の確認

Dockerが利用しているストレージ状況はdocker system dfで確認できます。

# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        12        15.81GB   1.751GB (11%)
Containers      14        14        554.7MB   0B (0%)
Local Volumes   9         2         29.73GB   29.73GB (99%)
Build Cache     28        0         1.009GB   1.009GB

不要ストレージの一括削除

docker system prune --all --forceを実行することで「利用していないイメージ・ボリューム・ネットワーク」などを一括削除できます。実行前後の比較は以下です。

実行前

例えばImagesの合計は15ですが、アクティブなものは12と乖離があります。Build Cacheも同様に合計/アクティブに乖離があります。「乖離がある」ということは「未使用なものがある」と言い換えることができます。

# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        12        15.81GB   1.751GB (11%)
Containers      14        14        554.7MB   0B (0%)
Local Volumes   9         2         29.73GB   29.73GB (99%)
Build Cache     28        0         1.009GB   1.009GB

実行後

docker system prune --all --forceを実行するとImagesとBuild Cacheの合計/アクティブは数字が同じになりました。未使用なものを削除しましたので、ストレージ使用量も削減されています。

# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        12        14.23GB   160.8MB (1%)
Containers      14        14        554.7MB   0B (0%)
Local Volumes   9         2         29.73GB   29.73GB (99%)
Build Cache     0         0         0B        0B

参考

docker system --help

# docker system --help
Usage:  docker system COMMAND

Manage Docker

Commands:
  df          Show docker disk usage
  events      Get real time events from the server
  info        Display system-wide information
  prune       Remove unused data

Run 'docker system COMMAND --help' for more information on a command.

docker system df --help

# docker system df --help
Usage:  docker system df [OPTIONS]

Show docker disk usage

Options:
      --format string   Format output using a custom template:
                        'table':            Print output in table format with column headers (default)
                        'table TEMPLATE':   Print output in table format using the given Go template
                        'json':             Print in JSON format
                        'TEMPLATE':         Print output using the given Go template.
                        Refer to https://docs.docker.com/go/formatting/ for more information about
                        formatting output with templates
  -v, --verbose         Show detailed information on space usage

docker system prune --help

# docker system prune --help
Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
  -a, --all             Remove all unused images not just dangling ones
      --filter filter   Provide filter values (e.g. "label=<key>=<value>")
  -f, --force           Do not prompt for confirmation
      --volumes         Prune anonymous volumes