Docker v29 Phá Vỡ Backward Compatibility: 3 Thay Đổi Lớn và Cách Migrate An Toàn

Karify98 & Amy 🌸·
Cover Image for Docker v29 Phá Vỡ Backward Compatibility: 3 Thay Đổi Lớn và Cách Migrate An Toàn

Docker Engine v29, ra mắt tháng 3/2026, không phải là bản update nhỏ. Đây là bước ngoặt kiến trúc ảnh hưởng đến mọi server đang chạy Docker — từ VPS cá nhân đến production cluster.

Nếu bạn đang quản lý Docker trên server, bài viết này dành cho bạn.

3 Breaking Change Chính

1. containerd Image Store Trở Thành Default

Đây là thay đổi lớn nhất. Từ v29, Docker mặc định dùng containerd image store thay vì legacy overlay2 graph driver.

Ảnh hưởng thực tế:

  • Dữ liệu image và snapshot chuyển từ /var/lib/docker sang /var/lib/containerd
  • Image cũ vẫn hoạt động nhưng bị ẩn khi chuyển sang containerd store
  • Tốn thêm ổ cứng vì containerd lưu cả bản nén và giải nén của image layers
  • Không tương thích với userns-remap (user namespace remapping)

Theo tài liệu chính thức của Docker, khi bạn bật containerd image store, các image và container từ overlay2 driver vẫn nằm trên disk nhưng bị ẩn. Chúng hiện lại nếu bạn chuyển về overlay2.

Vấn đề thực tế mà nhiều team gặp phải: Paketo Buildpacks và một số build tool khác bị lỗi khi chạy với Docker v29 vì containerd image store thay đổi cách image được xử lý. Workaround hiện tại là tắt feature này — nhưng điều đó defeat mục đích upgrade.

2. Minimum API Version Nâng Lên 1.44

Docker CLI và SDK client phải hỗ trợ API v1.44 trở lên. Client cũ sẽ bị reject.

Ai bị ảnh hưởng:

  • Docker v24 trở xuống: chắn chắn bị break
  • Docker v25-v28: hỗ trợ API v1.44, upgrade bình thường
  • Tool hoặc script dùng pinned API version cũ: cần kiểm tra lại

3. nftables Support (Opt-in)

Docker v29 thêm tùy chọn dùng nftables thay iptables cho container networking. Mặc định chưa bật, nhưng hành vi iptables có thay đổi nhỏ.

Ai cần quan tâm:

  • Server có custom iptables rules cho Docker
  • Fail2ban, CrowdSec hoặc intrusion prevention system tích hợp Docker
  • Bất kỳ firewall script nào reference DOCKER-USER chain

Cách Kiểm Tra Trước Khi Upgrade

Ba lệnh kiểm tra nhanh trên server:

# Kiểm tra version hiện tại
docker version --format '{{.Server.Version}}'

# Kiểm tra image store driver
docker info --format '{{.Driver}}'

# Kiểm tra firewall rules
sudo iptables -L DOCKER -n 2>/dev/null | head -20
sudo iptables -L DOCKER-USER -n 2>/dev/null | head -20

Nếu version 24.x trở xuống → API change sẽ break. Nếu thấy overlay2 → bạn đang dùng legacy store.

Migration Guide: Từng Bước

Bước 1: Backup

Trước khi làm gì, chụp snapshot VPS hoặc backup Docker data:

# Export images quan trọng
docker save -o backup-images.tar $(docker images --format '{{.Repository}}:{{.Tag}}')

# Backup volumes
docker run --rm -v mydata:/source -v $(pwd):/backup alpine tar czf /backup/mydata-backup.tar.gz -C /source .

Bước 2: Nâng Cấp Docker Engine

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Kiểm tra sau upgrade:

docker version
docker info --format '{{.Driver}}'

Nếu thấy overlay2 vẫn là driver, nghĩa là upgrade giữ nguyên legacy store cho existing installation. Chỉ cài mới mới dùng containerd mặc định.

Bước 3: Chuyển Sang containerd Image Store (Nếu Muốn)

Thêm vào /etc/docker/daemon.json:

{
  "features": {
    "containerd-snapshotter": true
  }
}
sudo systemctl restart docker

Lưu ý quan trọng: Image cũ sẽ bị ẩn. Bạn cần pull lại hoặc dùng docker save/docker load để migrate.

Bước 4: Kiểm Tra Firewall

# Kiểm tra Docker networking vẫn hoạt động
docker run --rm -p 8080:80 nginx &
curl http://localhost:8080

# Kiểm tra Fail2ban/CrowdSec integration
sudo fail2ban-client status

Khi Nào Nên Upgrade?

Nên upgrade ngay nếu:

  • Cài mới Docker trên server mới
  • Cần tính năng mới: Wasm containers, image attestations, multi-platform images
  • Đang dùng Kubernetes và muốn đồng bộ containerd

Chờ thêm nếu:

  • Phụ thuộc userns-remap cho security
  • Dùng build tool chưa tương thích containerd image store
  • Production server bận rộn, cần test kỹ trước

Không upgrade nếu:

  • Docker v24 trở xuống và không muốn thay đổi lớn
  • Hệ thống phức tạp, custom networking chưa test

Quan Điểm Cá Nhân

Docker chuyển sang containerd là bước đi đúng. Kubernetes đã dùng containerd từ lâu, việc Docker align với ecosystem giúp giảm fragmentation. Nhưng cách roll out — bật default cho new install mà không migrate tự động — tạo ra tình trạng nửa vời: server mới dùng containerd, server cũ dùng overlay2, cùng một cluster.

Nếu bạn quản lý nhiều server, đây là lúc cần automation. Terraform hoặc Ansible script nên kiểm tra Docker version và image store trước khi deploy.

Thay đổi lớn nhất với tôi là disk usage. containerd lưu cả compressed và uncompressed layers — trên server SSD 50GB, điều này có thể là vấn đề. Cần monitor /var/lib/containerd sau khi chuyển.

Tóm Tắt

Thay đổi Ảnh hưởng Hành động
containerd image store default Image data chuyển path, tốn disk Kiểm tra driver, quyết định migrate hay giữ overlay2
API v1.44 minimum Client cũ bị reject Nâng cấp Docker CLI/SDK
nftables opt-in Firewall rules có thể thay đổi Kiểm tra iptables rules, test networking

Docker v29 không phải là update bình thường. Đây là architectural shift. Nếu bạn đang dùng Docker trong production, hãy test trên staging trước khi upgrade production server.


Tham khảo: