Docker 29 has changed its default image store for new installs

· systems web · Source ↗

TLDR

  • 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.

Original | Discuss on HN