На новом Ubuntu используйте Docker Engine и Compose plugin из согласованного источника. Старый docker-compose на Python и современная команда docker compose — разные варианты; смешивать пакеты и установщики без необходимости не стоит.

Проверьте исходное состояние

cat /etc/os-release
dpkg --print-architecture
command -v docker
snap list

Ниже выбран Ubuntu 24.04 amd64, кодовое имя noble. Если ОС или архитектура другая, используйте её параметры из документации Docker. На сервере с существующими контейнерами сначала запланируйте миграцию данных: удаление конфликтующих пакетов может остановить приложения.

Для новой VM сохраните snapshot. Открывать Docker API в интернет не требуется. Членство в группе docker даёт практически root-возможности, поэтому в инструкции команды выполняются через sudo.

Добавьте ключ репозитория

sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

Не используйте устаревший apt-key и не отключайте проверку подписи пакетов. Ошибка сертификата требует проверки даты и CA, а не параметра insecure.

Создайте источник APT

В редакторе с sudo создайте /etc/apt/sources.list.d/docker.sources. Это полный файл для выбранной Ubuntu 24.04 amd64, не добавляйте дублирующий docker.list:

Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: noble
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверьте установку

sudo systemctl status docker --no-pager
sudo docker version
sudo docker compose version
sudo docker run --rm hello-world

hello-world проверяет загрузку образа и запуск контейнера, но не безопасность приложения. Если нет доступа к registry, проверьте DNS, исходящий HTTPS и прокси; не заменяйте официальный registry случайным зеркалом без оценки доверия.

Публикуйте порты осознанно

Контейнер с привязкой 8080:80 может быть доступен на всех адресах VPS. Для локального backend используйте 127.0.0.1:8080:80. Правила Docker могут обходить ожидаемую фильтрацию UFW, поэтому проверяйте внешний доступ отдельно и учитывайте схему firewall Docker.

В Compose храните данные в именованных volumes или явных каталогах. Контейнер — не резервная копия. Перед обновлением приложения сохраняйте данные и фиксируйте прежний образ; не используйте автоматическое удаление всех volumes.

Откат

Для теста hello-world данные удалены вместе с контейнером параметром –rm. Если Docker устанавливался на чистую VM и оказался не нужен, возврат к snapshot надёжнее случайной очистки /var/lib/docker. На рабочем узле сначала экспортируйте данные каждого приложения и согласуйте остановку.

Связанные инструкции

Официальные источники