Docker Engine 29.0 switches new installs to the containerd image store, enabling multi-platform builds, attestations, Wasm, and lazy-pull snapshotters.
Key Takeaways
Upgrades from older Docker Engine versions keep the legacy overlay2 graph driver; you must manually enable containerd image store via daemon.json.
The containerd image store stores layers in both compressed and uncompressed formats, increasing disk usage compared to the legacy overlay2 driver.
Shared base layers lose deduplication on the compressed side: each image retains its own compressed copy, adding overhead proportional to image count.
Switching backends hides existing images and containers; data remains on disk and reappears if you revert. Push to a registry or docker save before switching.
/var/lib/docker is no longer the sole data path; image and container snapshots now live in /var/lib/containerd.
Hacker News Comment Review
The dual compressed/uncompressed storage model is the main friction point: commenters flag that Docker already strains disk on dev machines, and this change makes it worse with no obvious user-facing benefit.
A commenter discovered the backend split the hard way: mounting a custom volume on /var/lib/docker no longer captured downloaded images because containerd writes to /var/lib/containerd instead, breaking assumptions in containerized Docker setups like IncusOS.
Notable Comments
@neitsab: solved the split-path problem on IncusOS by using a single ZFS dataset and mounting subpaths for both /var/lib/containerd and /var/lib/docker inside the container.