Docker Engine 29.0 defaults to the containerd image store on fresh installs; upgrades keep overlay2 until manually switched.
Key Takeaways
/var/lib/docker is no longer the sole data path; images and snapshots now live in /var/lib/containerd on new installs.
containerd stores both compressed and uncompressed layer formats, increasing disk usage compared to overlay2, which kept only uncompressed layers.
Shared base layers are de-duplicated at the uncompressed level but each image retains its own compressed copy, multiplying overhead with large image counts.
New capabilities unlocked: local multi-platform image builds, attestation/SBOM support via image indices, Wasm container support, and pluggable snapshotters (stargz, nydus, dragonfly).
Automatic migration from overlay2 is experimental and unrecommended; manual enable requires editing /etc/docker/daemon.json and restarting the daemon.
Hacker News Comment Review
The disk overhead is the dominant complaint: commenters note that dual-format storage bloats space and, per one benchmark, inflates local image export time from ~4 seconds to ~71 seconds for a 5.76 GB image.
The containerd image store is incompatible with userns-remap, and commenters flag that shipping a breaking change with no migration path and an experimental auto-switch tool signals poor release quality.
Consensus in the thread leans toward evaluating Podman as an alternative, citing Docker’s track record of prioritizing hosted services over core tooling reliability.
Notable Comments
@black3r: benchmarked exporting to image at 71.5s with containerd vs 4.3s without, on a 5.76 GB image, same build otherwise.
@kodama-lens: an open containerd issue (containerd/containerd#13307) is tracking the compressed-layer deduplication problem.