Как установить Docker на Ubuntu и Debian: пошагово

Как установить Docker на Ubuntu и Debian: гайд для новичка

Марина
Марина
📅 11 сентября 2026
Как установить Docker на Ubuntu и Debian: гайд для новичка

Установить 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 и запуск первого контейнера
Проверка установки: docker —version и контейнер hello-world

Установка Docker на Ubuntu скриптом за две минуты

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

Порядок действий укладывается в пять шагов и в 1–2 минуты на канале 100 Мбит/с.

  1. Обновите список пакетов: sudo apt update — без этого apt может не увидеть свежие зависимости.
  2. Скачайте скрипт в файл: curl -fsSL https://get.docker.com -o get-docker.sh. Флаг -f заставляет curl вернуть ошибку при плохом ответе сервера, а не сохранить HTML-страницу вместо скрипта.
  3. Просмотрите файл: less get-docker.sh — запускать вслепую скачанный скрипт от root не стоит.
  4. Запустите установку: sudo sh get-docker.sh. На экране пойдёт лог apt, в конце появится версия установленного движка.
  5. Проверьте результат: 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. Команды ниже выполняются подряд.

  1. Поставьте вспомогательные пакеты: sudo apt install ca-certificates curl gnupg. Они нужны, чтобы система проверила HTTPS-сертификат и импортировала ключ.
  2. Создайте каталог для ключей: sudo install -m 0755 -d /etc/apt/keyrings. Права 0755 означают «читать всем, писать владельцу».
  3. Загрузите GPG-ключ и положите его в файл: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg. Ключ скачивается и тут же переводится в двоичный формат, который понимает apt.
  4. Добавьте репозиторий, подставив кодовое имя вашей версии Ubuntu (для 24.04 это noble, для 22.04 — jammy), и обновите индекс: sudo apt update.
  5. Установите пакеты: 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 и место, которое занимают образы

Из каких пакетов состоит 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 ₽/мес и фильтрами по объёму диска, памяти и локации.

Поделиться:
👁 41 просмотров
Марина
Редактор · FREEHOSTING
Главный редактор FREEHOSTING. С 2020 года тестирует VDS, VPS и хостинг-провайдеров — арендует серверы, нагружает их реальными проектами и пишет честные обзоры по итогам. Помогает читателям выбирать хостинг под свои задачи: от Telegram-бота до production-сайта.