Docker на VPS: установка и первые контейнеры

Боты, ИИ и автоматизация
Docker на VPS: установка и первые контейнеры

Docker на VPS решает главную боль самостоятельного администрирования: приложения перестают конфликтовать друг с другом. База данных, веб-приложение и кеш живут в изолированных контейнерах, каждый со своими зависимостями, и переносятся на другой сервер парой команд. В этой инструкции разберём установку Docker на Ubuntu 24.04 LTS из официального репозитория docker.com — единственно правильный способ получать свежие версии и патчи безопасности, — а затем запустим первые контейнеры и пройдёмся по базовым командам: docker run, docker ps, docker logs. Всё проверено на чистом сервере, займёт около 20 минут.

Почему Docker, а не установка «в лоб»

  • Изоляция. Каждому сервису — свои версии библиотек. PostgreSQL 15 и 16 спокойно работают на одном сервере.
  • Воспроизводимость. Контейнер, собранный на ноутбуке, идентично запускается на VPS — «у меня работало» уходит в прошлое.
  • Чистота системы. Удалили контейнер — в системе не осталось хвостов из конфигов и зависимостей.
  • Быстрый переезд. Миграция на другой сервер сводится к переносу томов и запуску тех же образов.

Docker требует KVM-виртуализации либо честного доступа к ядру — на контейнерных VPS (OpenVZ/LXC) он часто не работает или работает с ограничениями. У Cheap-Host все тарифы на KVM с полным root, так что Docker ставится без танцев с бубном. Для пары контейнеризованных проектов с базой данных берите тариф Pro — 750 ₽/мес за 12 vCPU, 16 ГБ RAM и 128 ГБ NVMe: контейнерам с постоянной записью на диск (базы, очереди) NVMe даёт ощутимый прирост.

Подготовка сервера

Предполагаем, что базовая настройка уже сделана: SSH-ключи, файрвол, отдельный пользователь с sudo. Если нет — начните с чек-листа первых шагов после покупки VPS. Обновите систему и удалите неофициальные пакеты Docker, если они ставились раньше:

sudo apt update && sudo apt upgrade -y
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove -y $pkg; done

Если пакеты не были установлены, apt просто сообщит об этом — это нормально.

Установка Docker на Ubuntu 24.04 из официального репозитория

Шаг 1 — добавляем GPG-ключ Docker:

sudo apt install -y 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

Шаг 2 — подключаем репозиторий download.docker.com:

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" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Шаг 3 — ставим Docker Engine со всеми плагинами:

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Шаг 4 — проверяем установку тестовым контейнером:

sudo docker run hello-world

Если увидели «Hello from Docker!» — движок работает: образ скачался из Docker Hub, контейнер запустился, напечатал сообщение и завершился. Служба Docker уже добавлена в автозагрузку, убедиться можно так:

systemctl is-enabled docker

Запуск Docker без sudo

Чтобы не писать sudo перед каждой командой, добавьте своего пользователя в группу docker и перезайдите в сессию:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Помните: группа docker де-факто даёт root-права на хосте, поэтому добавляйте в неё только доверенных пользователей. О принципах разграничения прав — в статье про работу не под root.

Первые контейнеры: run, ps, logs

Веб-сервер Nginx за одну команду

docker run -d --name web -p 8080:80 --restart unless-stopped nginx:alpine

Разберём флаги:

  • -d — запуск в фоне (detached);
  • --name web — имя контейнера, чтобы не обращаться по ID;
  • -p 8080:80 — порт 8080 сервера проброшен на порт 80 внутри контейнера;
  • --restart unless-stopped — автозапуск после ребута и падений;
  • nginx:alpine — образ и тег (alpine — компактная сборка, ~50 МБ).

Откройте http://IP-сервера:8080 (порт нужно открыть в файрволе: sudo ufw allow 8080/tcp) — увидите приветствие Nginx.

Смотрим, что запущено

docker ps
docker ps -a

docker ps показывает работающие контейнеры: ID, образ, статус, проброшенные порты. С флагом -a — ещё и остановленные.

Читаем логи

docker logs web
docker logs -f --tail 100 web

-f — следить за логом в реальном времени, --tail 100 — показать последние 100 строк. Первое, что нужно смотреть, когда контейнер ведёт себя странно.

PostgreSQL с сохранением данных

Файловая система контейнера умирает вместе с ним, поэтому данные баз выносят в тома:

docker run -d --name db \
  -e POSTGRES_PASSWORD=strong_password \
  -v pgdata:/var/lib/postgresql/data \
  -p 127.0.0.1:5432:5432 \
  --restart unless-stopped \
  postgres:16

Флаг -v pgdata:/var/lib/postgresql/data создаёт том pgdata — данные переживут удаление и обновление контейнера. А -p 127.0.0.1:5432:5432 пробрасывает порт только на localhost: база не будет доступна из интернета.

Шпаргалка по базовым командам

КомандаЧто делает
docker psСписок работающих контейнеров
docker logs -f имяЛоги контейнера в реальном времени
docker stop имя / docker start имяОстановить / запустить контейнер
docker rm имяУдалить остановленный контейнер
docker imagesСписок скачанных образов
docker pull образ:тегСкачать или обновить образ
docker exec -it имя bashЗайти внутрь работающего контейнера
docker statsCPU и RAM по контейнерам в реальном времени
docker system pruneУдалить остановленные контейнеры и неиспользуемые образы

Команда docker system df покажет, сколько места занимают образы, контейнеры и тома — полезно запускать периодически, чтобы NVMe-диск не зарастал старыми слоями.

Что дальше

Запускать каждый контейнер отдельной длинной командой быстро надоедает. Следующий шаг — описать всё приложение (сервис + база + Redis) одним YAML-файлом и поднимать командой docker compose up -d: разбираем это в статье про Docker Compose на практике. А если хотите контейнеризовать своё приложение — начните с руководства по деплою Node.js на VPS: сначала классический деплой, потом тот же сервис в Dockerfile.

FAQ

Чем docker-ce с docker.com лучше пакета docker.io из репозитория Ubuntu?

Официальный репозиторий даёт свежие версии Docker Engine, быстрые обновления безопасности и актуальные плагины buildx и compose. Пакет docker.io в Ubuntu обновляется реже и может отставать на несколько версий.

Сколько ресурсов VPS нужно для Docker?

Сам движок потребляет немного — порядка 100 МБ RAM. Ресурсы едят контейнеры: веб-приложение с базой и Redis комфортно живёт на 8–16 ГБ RAM. Для нескольких проектов подойдёт тариф Pro у Cheap-Host: 12 vCPU, 16 ГБ RAM, 128 ГБ NVMe за 750 ₽/мес.

Опасно ли добавлять пользователя в группу docker?

Членство в группе docker фактически эквивалентно root: через контейнер можно смонтировать любой каталог хоста. На личном VPS это приемлемый компромисс, но добавляйте в группу только доверенных пользователей.

Как сделать, чтобы контейнер запускался после перезагрузки сервера?

Запускайте с флагом --restart unless-stopped. Для уже работающего контейнера политику меняют командой docker update --restart unless-stopped имя.

Куда деваются данные при удалении контейнера?

Всё, что записано в файловую систему контейнера, удаляется вместе с ним. Базы данных и загруженные файлы выносите в тома через флаг -v, например -v pgdata:/var/lib/postgresql/data.

Вывод

Установка Docker на VPS с Ubuntu 24.04 занимает 20 минут: подключили официальный репозиторий docker.com, поставили docker-ce с плагинами, проверили hello-world — и можно поднимать сервисы одной командой docker run. Главные привычки с первого дня: тома для данных, --restart unless-stopped для автозапуска и проброс портов баз только на 127.0.0.1. Если под контейнеры нужен сервер — у Cheap-Host тариф Pro от 750 ₽/мес: KVM (Docker работает без ограничений), 12 vCPU, 16 ГБ RAM, NVMe, безлимитный трафик и автодеплой за 45–60 секунд. Конфигурации и цены — на cheap-host.onl.

Читайте также