На новом 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. На рабочем узле сначала экспортируйте данные каждого приложения и согласуйте остановку.
Связанные инструкции
- Как установить Docker CE на Debian 13 с поддержкой двойного стека IPv6-NAT и поддержкой брандмауэра
- Как настроить брандмауэр в Ubuntu 24.04 LTS с UFW