Как полностью удалить Docker на Ubuntu и Debian
Удаление пакетов — только половина дела. Разбираемся, откуда Docker был установлен, сохраняем тома, убираем данные, репозиторий, группу и проверяем, что ничего не осталось.

apt remove docker-ce удаляет программу, но оставляет образы, контейнеры, тома в /var/lib/docker, репозиторий в apt, группу docker и нередко вторую копию Docker из snap. Чтобы удалить всё, нужно пройти по шагам.
Все команды проверены на VPS с Ubuntu 24.04 и Debian 12 — на tanaka.host оба образа ставятся при заказе сервера, а если что-то пойдёт не так, выручит консоль в кабинете.
1. Откуда Docker установлен
dpkg -l | grep -Ei 'docker|containerd|runc'
snap list 2>/dev/null | grep -i docker
which -a docker docker-compose
| Что нашли | Откуда | Какие шаги |
|---|---|---|
docker-ce, docker-ce-cli, containerd.io |
Репозиторий Docker или скрипт get.docker.com | 3 |
docker.io, containerd, runc, docker-compose-v2 |
Репозитории Ubuntu/Debian | 4 |
docker в snap list |
Snap | 5 |
/usr/local/bin/docker-compose |
Старый Compose v1 | 6 |
Может быть установлено несколько вариантов сразу — тогда пройдите все соответствующие шаги.
2. Сохраните то, что нужно
Шаг 7 удаляет
/var/lib/dockerвместе со всеми именованными томами — базами данных, загрузками, настройками приложений. Отмены нет. Bind-монтирования (папки сервера, подключённые в контейнер) не пострадают.
sudo docker volume ls
Остановите проекты (docker compose down без -v) и заархивируйте каждый нужный том:
mkdir -p ~/docker-backup
sudo docker run --rm -v ИМЯ_ТОМА:/source:ro -v ~/docker-backup:/backup alpine \
tar czf /backup/ИМЯ_ТОМА.tar.gz -C /source .
Для баз данных надёжнее дамп (pg_dump, mysqldump) с работающего контейнера. Сохраните также compose.yaml, .env и /etc/docker/daemon.json, и заберите всё с сервера по scp.
3. Пакеты Docker CE
sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
sudo apt autoremove
4. Пакет docker.io
sudo apt purge $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)
sudo apt autoremove
5. Snap
Данные snap-версии лежат отдельно, в /var/snap/docker, и удаляются вместе с пакетом:
sudo snap remove --purge docker
6. Старый docker-compose v1
which -a docker-compose
sudo rm /usr/local/bin/docker-compose
Если ставили через pip: pip uninstall docker-compose. Вручную установленный плагин v2 может лежать в /usr/local/lib/docker/cli-plugins/ или ~/.docker/cli-plugins/.
7. Образы, контейнеры и тома
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
sudo rm -rf /etc/docker
rm -rf ~/.docker
/var/lib/containerd можно удалять, если containerd не используется кем-то ещё (например, Kubernetes).
8. Репозиторий и ключ
sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/sources.list.d/docker.list
sudo rm -f /etc/apt/keyrings/docker.asc /etc/apt/keyrings/docker.gpg
sudo apt update
Проверка остатков: grep -rl download.docker.com /etc/apt/.
9. Группа docker
sudo groupdel docker
10. Проверка
which docker docker-compose dockerd containerd
dpkg -l | grep -Ei 'docker|containerd'
snap list 2>/dev/null | grep -i docker
systemctl list-unit-files | grep -Ei 'docker|containerd'
getent group docker
ls /var/lib/docker /var/lib/containerd
Все команды должны вернуть пустоту или «нет такого файла». Сетевые интерфейсы docker0, br-*, veth* исчезнут после перезагрузки, вместе с правилами iptables в памяти.
Чистая переустановка
Поставьте Docker по инструкции и восстановите тома до первого запуска проекта:
docker volume create ИМЯ_ТОМА
docker run --rm -v ИМЯ_ТОМА:/target -v ~/docker-backup:/backup alpine \
tar xzf /backup/ИМЯ_ТОМА.tar.gz -C /target
Имя тома — с префиксом проекта, как было (myapp_db_data). Если нужно только освободить место, не удаляя Docker, достаточно docker system prune и docker image prune -a.