How to Change the Default Docker Directory to Save You Some Precious Disk Space

Are you the kind of person that likes to gratuitously partition their hard disk because they’re obsessed with compartmentalisation? Do you think Docker is great but it’s eating up all of your /var or / space? Are you sick of manually cleaning up all Docker volumes, images and dangling containers for Docker to fill your disk to the brim with this useful junk within a fortnight? I’ve got an easy solution for you (actually, two). Change the default Docker graph directory! How, do you ask? I’ll show you how.

Docker stores most of its runtime files (graph data, images, runtimes, temp files and much more) in /var/lib/docker by default. But I don’t want that, because my /var partition is just 10 GiB and Docker can easily gobble all of that up. I don’t mind storing these files in my own home directory instead so that’s what I’m going to do.

$ mkdir -p /home/dvejmz/var/lib/docker

Now, there are two ways (perhaps more, depends on how much free time you have) in which you can relocate your Docker files: the old way and the new way. The old way simply edits the startup flags passed to the Docker daemon when invoked as a systemd unit. Something like this

[Service]
ExecStart= 
ExecStart=/usr/bin/dockerd --data-root=/home/dvejmz/var/lib/docker -H fd://

(Credit to Arch Linux Wiki)

The new way, which I recommend since it doesn’t rely on any systemd mechanisms, is editing a JSON file. Newer installations of Docker (such as v18.0 which I’m using at the time of writing this article) will attempt to retrieve their start-up flags from a JSON config file located in /etc/docker/daemon.json, and add the following key to it (if the file doesn’t exist, just create it there):

{
    "graph": "/home/dvejmz/var/lib/docker"
}

The daemon.json file accepts the same options that you may pass to dockerd when launching it. See the official docs for a complete list.

Once you have that, purge all the junk in the old directory.

$ docker rm $(docker ps -a -q)
$ docker rmi $(docker images -q)
$ docker volume rm $(docker volume ls -qf dangling=true)

Now just restart the Docker daemon for the changes to take effect

$ sudo systemctl restart docker

You’re done, enjoy your newly recovered partition space. And by the way, if you’re still lacking in hard disk space after applying this neat trick, check out baobab and bleachbit.

Back to top ↑

Articles from friends and people I find interesting

In praise of qemu

qemu is another in a long line of great software started by Fabrice Bellard. It provides virtual machines for a wide variety of software architectures. Combined with KVM, it forms the foundation of nearly all cloud services, and it runs SourceHut in our self…

via Drew DeVault's blog September 2, 2022

The quick and practical "MSI" hash table

I generally prefer C, so I’m accustomed to building whatever I need on the fly, such as heaps, linked lists, and especially hash tables. Few programs use more than a small subset of a data structure’s features, making their implementation smaller, simp…

via null program August 8, 2022

Migrating Go and Node.js Fargate tasks and Lambda functions to Graviton ARM processors with CDK

Migrating Go and Node.js Fargate tasks and Lambda functions to Graviton ARM processors with CDK I’ve been using AWS’s Graviton ARM processors for personal projects for a while. They’re cheaper, use lower power chips, and might be better for the environment…

via adrianhesketh.com July 27, 2022

Generated by openring