Что использовать на Debian/Ubuntu - docker.io или docker-ce и чем они отличаются.
Длинный ответ на английском языке тут: https://stackoverflow.com/a/57678382
Короткий ответ на русском такой:
Пакет docker.io поддерживается мантейнерами Debian/Ubuntu и каждая библиотека, от которой он зависит представляет собой отдельный пакет из репозитория. При необходимости (например - обнаружении уязвимости) отдельные зависимости могут быть обновлены независимо друг от друга и ничего вероятность, что что-то сломается после обновления - минимальна.
Пакет docker-ce собран статически в стиле GoLang. Это значит, что при обновлении пакета обновляются все компоненты, от которых зависит Docker. С одной стороны - это хорошо (для Docker), но с другой стороны, если бы все пакеты в системы собирались бы также - это привело бы к огромному числу дублей одних и тех же библиотек (но различных версий) в системе (и в пямяти).
С практической точки зрения - в среде Debian/Ubuntu логичнее и оптимальнее (с точки зрения ресурсов) использовать docker.io. К тому же, это несколько снижает вероятность получить неработающий Docker после apt update && apt upgrade.