HELPER VPS

Установка Docker на VPS: Ubuntu, Debian, AlmaLinux и Compose

При установке из официального репозитория Docker вы получаете свежие Docker Engine и плагин Compose, а дальнейшие обновления приходят вместе с обычным обновлением системы. Ниже по порядку собраны команды для каждой ОС и настройки, которые стоит сделать после установки.

Самый быстрый способ: создать сервер из образа Docker

Если вы создаёте новый сервер, быстрее всего выбрать Docker в списке образов. Сервер запускается на Ubuntu 24.04 LTS с уже установленными Docker Engine и Docker Compose, и сразу после входа можно выполнить docker compose up. Описание приложения и рекомендуемый размер есть на странице Docker VPS.

Если вы хотите добавить Docker на уже работающий сервер или использовать другую ОС, например Debian или AlmaLinux, установите его вручную по шагам ниже. Все команды рассчитаны на подключение под root. Если вы вошли обычным пользователем, добавляйте перед командами sudo.

Что проверить перед установкой

Docker работает на серверах любого размера. Для личных проектов с несколькими контейнерами достаточно самого маленького общего тарифа на 12 ГБ; для одновременного запуска базы данных, веб-сервера и кеша лучше выбрать 24 ГБ или больше. Если вы часто скачиваете и собираете образы, NVMe VPS с быстрым диском заметно ускорит работу.

Если в системе есть старые пакеты Docker из репозитория ОС, сначала удалите их, чтобы они не смешивались с официальными. Неустановленные пакеты просто пропускаются, поэтому команду можно выполнить как есть.

Ubuntu, Debian
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do apt remove -y $pkg; done

Установка Docker на Ubuntu 24.04

Шаг 1. Добавьте ключ и адрес репозитория

Ubuntu 24.04
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list

Шаг 2. Установите Docker Engine и Compose

Ubuntu 24.04
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

После установки служба Docker запускается автоматически и стартует вместе с сервером после перезагрузки. Те же команды работают и в Ubuntu 22.04 и 26.04. Название версии в адресе репозитория автоматически берётся из /etc/os-release.

Установка Docker на Debian 13

В Debian порядок тот же, что в Ubuntu, меняется только адрес репозитория на linux/debian. Те же команды работают и в Debian 12.

Debian 13
apt update
apt install -y ca-certificates curl
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > /etc/apt/sources.list.d/docker.list
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Установка Docker на AlmaLinux 10

AlmaLinux и Rocky Linux используют репозиторий Docker для RHEL. Чтобы не было конфликта со встроенным Podman, сначала уберите его, а затем установите Docker. Те же команды подходят для AlmaLinux 9 и Rocky Linux 9 и 10.

AlmaLinux 10
dnf remove -y podman buildah runc
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
dnf -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker

Если при первой установке спросят, принять ли ключ подписи репозитория, нажмите y. В системах семейства RHEL служба не запускается автоматически после установки, поэтому последняя строка systemctl enable --now docker включает её сейчас и при загрузке.

Проверка установки и первый контейнер

Запустите тестовый контейнер командой ниже. Если появится сообщение, начинающееся с Hello from Docker, значит движок, скачивание образов и запуск контейнеров работают. С флагом --rm контейнер удаляется сразу после завершения.

Терминал
docker run --rm hello-world
docker compose version

Если вы хотите пользоваться Docker под обычным пользователем, добавьте его в группу docker и войдите заново. Группа docker даёт права, равные root, поэтому добавляйте только доверенных пользователей.

Терминал
usermod -aG docker username

Запуск сервисов через Docker Compose

Compose позволяет описать настройки контейнеров в одном YAML файле и запустить их одной командой. При переносе или создании нового сервера тот же файл заново поднимает то же окружение. Например, файл для одного веб-сервера Nginx выглядит так.

Терминал
mkdir -p /opt/web && cd /opt/web
cat > compose.yaml <<'EOF'
services:
  web:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped
EOF
docker compose up -d

Откройте в браузере http://YOUR_SERVER_IP, и появится страница Nginx. Если положить index.html в папку html, отобразится этот файл. Из часто используемых команд достаточно четырёх.

  • docker compose ps: показывает работающие контейнеры и их порты.
  • docker compose logs -f: показывает логи в реальном времени. Выход по Ctrl+C.
  • docker compose pull && docker compose up -d: скачивает новые образы и обновляет контейнеры до новой версии.
  • docker compose down: останавливает и удаляет контейнеры. Данные в томах сохраняются.

Если указать restart: unless-stopped, контейнеры автоматически поднимутся после перезагрузки сервера. Остановленными останутся только те, что вы остановили сами.

Файрвол и публикация портов

Docker сам добавляет порты, опубликованные через ports:, в правила файрвола (iptables) и открывает их. Поэтому порт, указанный в ports:, доступен извне, даже если он не разрешён в ufw. Базы данных и панели управления, которые не нужно показывать наружу, привяжите только к 127.0.0.1, как ниже, и они будут доступны лишь изнутри сервера.

compose.yaml
    ports:
      - "127.0.0.1:5432:5432"

Удобно открывать для веб-сервисов только порты 80 и 443, а остальные сервисы пусть обращаются друг к другу по имени внутри одной сети Compose. Для базового файрвола всего сервера следуйте руководству по базовому файрволу и откройте только SSH, HTTP и HTTPS.

Управление логами и диском

Если ничего не настроить, логи контейнеров копятся без ограничений. Укажите драйвер логов local в /etc/docker/daemon.json, как ниже, и логи будут сжиматься и храниться только в заданном объёме. После сохранения выполните systemctl restart docker: настройка применится к новым контейнерам.

/etc/docker/daemon.json
{
  "log-driver": "local"
}

Неиспользуемые образы и остановленные контейнеры тоже занимают место на диске. Посмотрите объём командой docker system df и удалите неиспользуемые образы командой docker image prune -a. Если данных становится много, можно подключить к серверу блочный диск NVMe и использовать его как папку данных Docker.

Сохранность данных и следующие шаги

Контейнер можно в любой момент удалить и создать заново, но данные в томах заново не создашь. Регулярно делайте дамп базы данных, а весь сервер защищайте автоматическим резервным копированием или снимками. Как это сделать, описано в руководстве по резервным копиям и снимкам.

Файл Compose для запуска WordPress в Docker есть в руководстве по установке WordPress. Если вы хотите разворачивать несколько приложений через веб-интерфейс и автоматически получать сертификаты HTTPS, создайте сервер из образа Coolify или Dokploy. Подходящие размеры для работы с контейнерами собраны на странице контейнерный VPS.

Полезные руководства по теме

Настройки, которые стоит сделать вслед за этим руководством.

Все руководства