Установить Docker на чистый сервер можно двумя путями: официальным скриптом get.docker.com, который поднимает стабильную версию за 1–2 минуты, или вручную — добавив GPG-ключ и репозиторий download.docker.com. Оба способа работают на Ubuntu 22.04 и 24.04, на Debian 11 и 12. Оба требуют root-доступа к машине — то есть входа под главным администратором, которому разрешено всё. Если своего сервера пока нет, подойдёт любой тариф из подборки VPS на Linux: минимальная конфигурация для первых контейнеров начинается от 59 ₽/мес.
Материал написан для тех, кто впервые заходит на сервер по SSH и хочет запустить приложение в контейнере, а не разбираться в теории виртуализации. Разберём подготовку сервера, обе схемы установки, различия между Ubuntu и Debian, состав пакетов, настройку прав без вечного sudo, запуск первого контейнера, работу с Docker Compose и очистку диска. В конце — семь вопросов, которые чаще всего приходят в поддержку после установки.
Что делает Docker и почему его ставят на VPS, а не на общий хостинг
Docker — это система, которая упаковывает приложение вместе со всеми его библиотеками, конфигами и версией языка в один образ. Образ — это готовый шаблон, снимок приложения со всем его окружением. Из образа запускается контейнер — изолированный процесс, который видит собственную файловую систему, но пользуется ядром операционной системы сервера. Из-за этого контейнер стартует за 0,5–2 секунды, тогда как полноценная виртуальная машина грузится 20–40 секунд.
Практическая выгода простая: приложение, собранное на вашем ноутбуке, поедет на сервере без сюрпризов вида «а у меня Python 3.9, а там 3.11». Вся конфигурация фиксируется текстовым файлом — Dockerfile, а перенос проекта на другой сервер сводится к копированию двух-трёх файлов и одной команды.
Docker нельзя поставить на обычный виртуальный хостинг: там нет root-прав и нет доступа к ядру, а контейнеризация без них не работает. Нужен сервер с полными правами — KVM-машина, облачный инстанс или физический сервер. KVM — это полная виртуализация: у такого сервера собственное ядро, и вы распоряжаетесь им сами. Контейнеры на OpenVZ тоже часто отваливаются. OpenVZ — более дешёвый тип виртуализации, где ядро одно на всех клиентов сервера. Провайдеры урезают в нём механизм cgroups (он ограничивает ресурсы процессов), и демон Docker — фоновая служба, которая управляет контейнерами, — либо не стартует, либо падает при первом же запуске образа.
Какой сервер нужен под Docker: диск важнее ядер
Главный дефицит при работе с Docker — не процессор и даже не память, а место на диске. Все образы, слои и тома контейнеров складываются в каталог /var/lib/docker. Том — это отдельная папка на диске сервера, где контейнер хранит данные, чтобы они пережили его перезапуск. На реальном проекте каталог разрастается до 10+ ГБ уже через пару недель активных сборок. Тариф с 5 ГБ диска забьётся на третьем-четвёртом образе.
Оперативной памяти на старте достаточно 1 ГБ: сам демон в покое ест 60–120 МБ, остальное забирают контейнеры. Но если планируете собирать образы прямо на сервере (docker build), закладывайте 2 ГБ или добавьте файл подкачки (swap) на 2 ГБ. Swap — место на диске, которое система использует, когда кончается оперативная память. Без него сборка Node.js-проекта легко упирается в лимит, и ядро убивает процесс — это называется OOM, out of memory. Ядра на старте хватит одного, второе понадобится после четвёртого контейнера.
Ниже — стартовые тарифы из каталога: минимальная конфигурация у каждого провайдера.
| Провайдер | Цена от | Ядра / RAM | Диск | Годится под Docker |
|---|---|---|---|---|
| Cloudcore | 59 ₽/мес | 1 ядро / 1 ГБ | 10 ГБ NVMe | Тесты, 1–2 контейнера |
| Hosting-Russia | 99 ₽/мес | — | — | Стартовый вариант |
| HostVDS | 127 ₽/мес | 1 ядро / 1 ГБ | 10 ГБ NVMe | Тесты, 1–2 контейнера |
| RuVDS | 139 ₽/мес | 1 ядро / 0,5 ГБ | 10 ГБ HDD | Мало RAM, нужен swap |
| SmartApe | 145 ₽/мес | 2 ядра / 2 ГБ | 100 ГБ NVMe | Сборка образов на месте |
| Selectel | 200 ₽/мес | 1 ядро / 1 ГБ | 10 ГБ NVMe | Боевой стенд |
| Aéza | 593 ₽/мес | 1 ядро / 2 ГБ | 30 ГБ NVMe | Compose из 4–6 сервисов |
Данные проверены 03.09.2026.
Если бюджет ограничен, смотрите недорогие VPS и берите не самый дешёвый, а тот, где диска хотя бы 20 ГБ: переезд из-за забитого раздела стоит дороже разницы в 50–90 ₽/мес.
Что проверить на сервере до установки
Подключитесь к серверу по SSH под root или пользователем с правами sudo. Если ключи ещё не настроены, сначала пройдите гайд по настройке SSH на VPS — доступ к машине с Docker равен доступу ко всем контейнерам на ней, и пароль тут слишком слабая защита.
Дальше выполните lsb_release -a — команда покажет название и версию дистрибутива. Официальные пакеты Docker собраны под Ubuntu 20.04, 22.04, 24.04 и Debian 11, 12; на более старых сборках репозиторий просто не найдёт подходящий индекс. Командой uname -r посмотрите версию ядра: нужна 3.10 и выше, на любом современном VPS это условие выполняется автоматически.
Последняя проверка — свободное место: df -h /. Если на корневом разделе меньше 5 ГБ, освободите место заранее, иначе установка оборвётся на распаковке. И удалите старые пакеты, если сервер вам достался не чистым: sudo apt remove docker docker-engine docker.io containerd runc. Эти пакеты из репозитория дистрибутива конфликтуют с официальными и дают ошибку версий при первом же запуске.

Установка Docker на Ubuntu скриптом за две минуты
Самый быстрый путь — официальный скрипт с сайта проекта. Он сам определяет дистрибутив, подключает нужный репозиторий, ставит стабильную версию и запускает демон. Подходит для тестового стенда и для первого знакомства; для продакшена команда Docker рекомендует ручной способ, потому что скрипт всегда ставит последнюю версию без возможности зафиксировать конкретную.
Порядок действий укладывается в пять шагов и в 1–2 минуты на канале 100 Мбит/с.
- Обновите список пакетов:
sudo apt update— без этого apt может не увидеть свежие зависимости. - Скачайте скрипт в файл:
curl -fsSL https://get.docker.com -o get-docker.sh. Флаг-fзаставляет curl вернуть ошибку при плохом ответе сервера, а не сохранить HTML-страницу вместо скрипта. - Просмотрите файл:
less get-docker.sh— запускать вслепую скачанный скрипт от root не стоит. - Запустите установку:
sudo sh get-docker.sh. На экране пойдёт лог apt, в конце появится версия установленного движка. - Проверьте результат:
sudo docker version— команда покажет версию клиента и сервера. Если сервер отвечает, демон уже работает.
Скрипт заодно включает автозапуск: после перезагрузки сервера Docker поднимется сам. Убедиться в этом помогает команда systemctl is-enabled docker: она должна ответить enabled.
Ручная установка Docker Ubuntu из официального репозитория
Ручной способ длиннее на пять минут, зато даёт контроль над версией и понимание, откуда берутся пакеты. Установка Docker Ubuntu этим методом состоит из двух частей: сначала система должна научиться доверять подписи Docker, потом — знать адрес репозитория. Репозиторий — это сервер с пакетами, откуда apt их скачивает.
GPG-ключ — цифровая подпись, по которой система проверяет, что пакеты пришли действительно от Docker, а не от постороннего. Ключ хранится в каталоге /etc/apt/keyrings, репозиторий описывается одной строкой в /etc/apt/sources.list.d/docker.list. Команды ниже выполняются подряд.
- Поставьте вспомогательные пакеты:
sudo apt install ca-certificates curl gnupg. Они нужны, чтобы система проверила HTTPS-сертификат и импортировала ключ. - Создайте каталог для ключей:
sudo install -m 0755 -d /etc/apt/keyrings. Права 0755 означают «читать всем, писать владельцу». - Загрузите GPG-ключ и положите его в файл:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg. Ключ скачивается и тут же переводится в двоичный формат, который понимает apt. - Добавьте репозиторий, подставив кодовое имя вашей версии Ubuntu (для 24.04 это
noble, для 22.04 —jammy), и обновите индекс:sudo apt update. - Установите пакеты:
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin.
После установки демон стартует автоматически. Убедитесь командой sudo systemctl status docker — в выводе должна быть строка active (running). Если вместо неё failed, смотрите журнал: sudo journalctl -u docker -n 50 покажет последние 50 строк лога с причиной.
Чем отличается установка на Debian
Для Debian меняются ровно две вещи: путь к ключу и кодовое имя релиза. Вместо linux/ubuntu/gpg берётся linux/debian/gpg, а в строке репозитория указывается bookworm для Debian 12 или bullseye для Debian 11. Остальные шаги совпадают до символа.
Отдельная особенность Debian — минимальные образы у части провайдеров идут без curl и sudo вообще. Тогда первая команда выполняется от root напрямую: apt install curl sudo ca-certificates gnupg.
Ещё одна мелочь: каталога /etc/apt/keyrings в Debian по умолчанию нет, поэтому шаг с install -m 0755 -d пропускать нельзя. В остальном версии пакетов для Debian 12 и Ubuntu 24.04 совпадают, отставания по релизам нет.
Поведение демона, набор команд и структура каталогов тоже одинаковые. Выбор между дистрибутивами для Docker почти не значим; если сомневаетесь, берите VPS с Ubuntu, к нему больше готовых инструкций и образов.

Из каких пакетов состоит Docker и зачем каждый
Установка тянет пять пакетов, и новичка это сбивает: раньше был один docker.io, а стало непонятное семейство. Разделение сделано намеренно: движок, клиент и рантайм (программа, которая непосредственно запускает контейнеры) обновляются независимо, а плагины можно не ставить вовсе.
Таблица ниже объясняет назначение каждого пакета. Без первых трёх Docker не заработает, последние два — удобство, но docker-compose-plugin ставить стоит всегда.
| Пакет | Что делает | Обязателен |
|---|---|---|
docker-ce |
Сам движок: демон, который создаёт и держит контейнеры | Да |
docker-ce-cli |
Команда docker в терминале, общается с демоном через сокет |
Да |
containerd.io |
Низкоуровневый рантайм, который реально запускает процессы | Да |
docker-buildx-plugin |
Расширенная сборка образов, в том числе под ARM | Нет |
docker-compose-plugin |
Команда docker compose для связок из нескольких сервисов |
Желательно |
Как убрать sudo из каждой команды: группа docker
Сразу после установки любая команда требует sudo: sudo docker ps, sudo docker run и так далее. Причина в том, что клиент общается с демоном через Unix-сокет /var/run/docker.sock — это специальный файл для связи между программами. Его владелец — root, а группа — docker. Обычный пользователь в эту группу не входит и получает отказ.
Решается одной командой: sudo usermod -aG docker $USER. Флаг -aG добавляет пользователя в группу, не выкидывая его из остальных — без -a вы затрёте все прочие группы и можете потерять доступ к sudo. Затем выйдите из SSH-сессии и зайдите заново: состав групп читается при входе, и без переподключения изменение не применится.
Важное следствие для безопасности: членство в группе docker практически равно правам root. Пользователь из этой группы может смонтировать корень хоста внутрь контейнера и изменить что угодно. Поэтому добавляйте в неё только тех, кому и так доверили бы sudo, а на боевом сервере закрывайте лишние порты по гайду о настройке фаервола на Linux-сервере.
Первый контейнер: hello-world и веб-сервер за одну команду
Проверочный запуск — docker run hello-world. Docker скачает образ с Docker Hub — это публичный каталог готовых образов, — запустит его, выведет приветствие и завершит контейнер. Сам образ весит около 13 КБ. Если текст появился, установка прошла корректно.
Теперь что-то полезное. Команда docker run -d -p 80:80 --name web nginx поднимет веб-сервер: флаг -d отправляет контейнер в фон, -p 80:80 пробрасывает 80-й порт хоста на 80-й порт контейнера, --name web даёт понятное имя вместо случайного. Образ nginx весит около 50 МБ и скачивается за 5–15 секунд.
Откройте IP сервера в браузере — увидите стандартную страницу приветствия. Список работающих контейнеров показывает docker ps, остановка — docker stop web, удаление — docker rm web. Логи контейнера смотрят командой docker logs -f web, где -f означает «следить за новыми строками», как tail -f.
Docker Compose: несколько сервисов одним файлом
Реальный проект редко состоит из одного контейнера: обычно это приложение, база данных и обратный прокси — сервер, который принимает запросы снаружи и раздаёт их нужным контейнерам. Держать всё это отдельными командами docker run неудобно, поэтому конфигурацию описывают в файле docker-compose.yml — и весь стек поднимается командой docker compose up -d.
Обратите внимание на синтаксис: современный Docker Compose — это плагин, команда пишется через пробел (docker compose), а не через дефис. Старый вариант docker-compose был отдельной программой на Python и в новых установках отсутствует; если инструкция из интернета выдаёт «command not found», дело почти всегда в этом.
Полезные команды после запуска: docker compose ps покажет состояние сервисов, docker compose logs -f app — логи конкретного сервиса, docker compose down остановит и удалит всю связку. Файл docker-compose.yml держите в git-репозитории вместе с кодом — тогда развернуть копию проекта на новом сервере получится за 2–3 минуты.
Куда уходит место и как чистить /var/lib/docker
Docker не удаляет за собой ничего. Остановленные контейнеры, промежуточные слои сборок, неиспользуемые образы и тома копятся в /var/lib/docker, и на сервере с 10 ГБ диска место кончается неожиданно быстро — обычно на попытке скачать очередной образ.
Посмотреть расклад помогает docker system df: команда покажет, сколько занимают образы, контейнеры, тома и кэш сборки, и сколько из этого можно освободить. Часто из 8 ГБ занятого места 5 ГБ оказываются кэшем сборок.
Чистка выполняется командой docker system prune -a. Она удалит все остановленные контейнеры, неиспользуемые сети и все образы, на которые не ссылается ни один контейнер. Тома по умолчанию не трогаются — данные базы останутся на месте; чтобы снести и их, добавляют флаг --volumes, и вот тут сначала сделайте бэкап VPS.
Частые ошибки при установке и первых запусках
Большая часть обращений после установки Docker сводится к пяти-шести повторяющимся ситуациям. Все они решаются за минуту, если знать причину.
- permission denied на /var/run/docker.sock — пользователь не в группе
dockerлибо вы не перезашли по SSH послеusermod. - Cannot connect to the Docker daemon — демон не запущен; поднимите его командой
sudo systemctl start dockerи включите автозапуск черезenable. - port is already allocated — 80-й порт занят системным nginx или Apache; освободите порт или пробросьте контейнер на 8080.
- no space left on device — забит диск, спасает
docker system prune -aи переезд на тариф с 20–30 ГБ. - Конфликт со старым docker.io — пакет из репозитория дистрибутива не удалили перед установкой, apt ругается на версии зависимостей.
Отдельная ловушка — запуск Docker на VPS с OpenVZ-виртуализацией. Демон стартует, но контейнеры падают с ошибками cgroups, и лечится это только сменой сервера на KVM. Перед покупкой уточняйте тип виртуализации: у большинства провайдеров из подборки VPS на SSD это KVM, но встречаются и контейнерные тарифы по заниженной цене.
Частые вопросы
Можно ли установить Docker на виртуальный хостинг? Нет. Docker требует root-прав и доступа к ядру, а на общем хостинге ни того, ни другого нет. Минимальный вариант — VPS от 59 ₽/мес с полными правами.
Сколько места занимает сам Docker без контейнеров? Пакеты движка, CLI и containerd занимают около 400–500 МБ. Дальше объём растёт за счёт образов: типовой образ с Python или Node.js весит 100–400 МБ, база PostgreSQL — около 400 МБ.
Хватит ли 1 ГБ оперативной памяти? Для двух-трёх лёгких контейнеров хватит: демон в покое занимает 60–120 МБ. Для сборки образов на сервере закладывайте 2 ГБ или подключите swap на 2 ГБ, иначе процесс сборки убьёт OOM-killer.
Скрипт get.docker.com или ручная установка — что выбрать? Скрипт быстрее и ставит стабильную версию за 1–2 минуты, он удобен для тестов. Ручной путь фиксирует конкретную версию, поэтому на боевом сервере берут его.
Почему docker-compose не работает, а docker compose работает? Compose переехал из отдельной программы в плагин движка, поэтому команда теперь пишется через пробел. Старый бинарник с дефисом в свежих установках отсутствует, и все инструкции старше 2023 года на этом спотыкаются.
Обязательно ли добавлять пользователя в группу docker? Не обязательно — можно работать через sudo docker. Но членство в группе фактически равно правам root на сервере, поэтому добавляйте туда только доверенных пользователей и не делайте этого на машине с несколькими администраторами.
Docker и Kubernetes — это одно и то же? Нет. Docker запускает контейнеры на одной машине, а Kubernetes управляет ими на кластере из нескольких серверов. Для одного VPS и трёх сервисов Kubernetes избыточен, хватает Compose.
Итог
Установка укладывается в пять минут: обновить apt, подключить официальный репозиторий или запустить get.docker.com, поставить docker-ce, docker-ce-cli, containerd.io и docker-compose-plugin, добавить себя в группу docker и перезайти по SSH. Дальше проверьте всё командой docker run hello-world и следите за размером /var/lib/docker — с этого каталога начинаются 90% проблем на маленьких тарифах.
Главное требование к железу — не мощность, а диск: берите минимум 20 ГБ, если планируете больше двух контейнеров. Подобрать машину с root-доступом и подходящим дистрибутивом можно в разделе VPS на Linux: там 44 провайдера с ценами от 59 ₽/мес и фильтрами по объёму диска, памяти и локации.