Домашний IT своими рукамиПроверено руками, а не пересказано
Технологии
для осознанной жизни
Подписаться
Серверы

Docker для новичков: первый сервис за 20 минут

Что такое Docker простыми словами, как установить его на Ubuntu, запустить первый сервис Uptime Kuma через docker compose, обновлять его и делать бэкап.

16 минут чтения Обсудить
Docker с нуля: установить Docker и Compose, проверить hello-world, запустить первый сервис Uptime Kuma, команды на каждый день
Проверено: сентябрь 2026, Docker 29.1.3, Compose 2.40.3, Ubuntu 24.04 (WSL2). Все цифры - собственные замеры, скриншоты с реальной установки.
Содержание статьи
  1. Зачем это дома
  2. Словарик: пять слов, без которых никак
  3. Шаг 1. Установить Docker
  4. Шаг 2. Проверить: hello-world
  5. Шаг 3. Первый полезный сервис: Uptime Kuma
  6. Шаг 4. Команды на каждый день
  7. Где лежат данные и как делать бэкап
  8. Типичные ошибки
  9. Что ставить дальше
  10. Частые вопросы

Почти любую домашнюю программу для сервера сегодня ставят через Docker: фотоархив Immich, медиасервер Jellyfin, блокировщик рекламы AdGuard Home. В инструкциях к ним стоит пара строк про docker compose up -d, и дальше всё работает. Но если Docker вы ещё ни разу не запускали, эти строки выглядят как заклинание.

Проще всего представить Docker как транспортный контейнер. Раньше груз возили россыпью, и в каждом порту его перекладывали по-своему. Потом придумали стандартный железный ящик: что внутри, неважно, кран и корабль работают с ним одинаково. Docker делает то же с программами. Разработчик упаковывает программу вместе со всем, что ей нужно, а вы запускаете этот «ящик» одной командой. Ничего не надо доустанавливать, и программа не мешает соседям.

Ниже пошагово: установка, первая проверка, настоящий полезный сервис (мониторинг сайтов Uptime Kuma) и команды, которые понадобятся каждый день. Всё проверено на тестовом компьютере, выводы команд настоящие.

Коротко

  • Docker запускает программы в изолированных «контейнерах». Программа ставится одной командой и удаляется без следов.
  • Установка на Ubuntu или Debian занимает пару минут: официальный скрипт или пакеты из репозитория системы.
  • Compose-файл описывает сервис целиком: какой образ, какой порт, где хранить данные. Запуск: docker compose up -d.
  • Данные держите в папке рядом с compose-файлом. Бэкап сервиса - это копия этой папки.
  • Первый сервис из статьи, Uptime Kuma, скачался и запустился у меня примерно за полторы минуты.

Зачем это дома

Если у вас есть домашний сервер или просто компьютер, который работает круглосуточно, Docker превращает его в «магазин приложений»:

  • Immich - замена Google Фото: автозагрузка с телефонов, поиск по лицам и по смыслу.
  • Jellyfin - свой «Кинопоиск» для фильмов и сериалов с диска, смотреть можно на телевизоре и телефоне.
  • AdGuard Home - блокировка рекламы и трекеров сразу на всех устройствах в доме.
  • Uptime Kuma - следит, работают ли ваши сайты и сервисы, и пишет в Telegram, если что-то упало.
  • Open WebUI - веб-интерфейс для своей нейросети, подробно в статье Ollama и Open WebUI.

Главные плюсы Docker для дома:

  • Одна инструкция на все системы. Образ одинаково работает на Ubuntu, Debian и даже в Windows.
  • Ничего не ломается при установке. Программе нужна особая версия Python или базы данных? Она лежит внутри контейнера и не конфликтует с системой.
  • Удаление без мусора. Удалили контейнер и образ - программы больше нет, в системе ничего не осталось.
  • Обновление двумя командами вместо ручной переустановки.

Словарик: пять слов, без которых никак

Термин Что это Аналогия
Образ (image) Упакованная программа со всеми зависимостями. Скачивается из интернета, сам по себе не работает Установочный диск или коробка с мебелью из магазина
Контейнер (container) Запущенный экземпляр образа. Из одного образа можно запустить несколько контейнеров Собранный шкаф, который уже стоит в комнате
Том (volume) Место, где контейнер хранит данные. Переживает удаление и обновление контейнера Ящик в шкафу, который можно вынуть и переставить в новый шкаф
Порт «Дверь», через которую к контейнеру обращаются по сети. 3001:3001 значит: порт 3001 компьютера ведёт в порт 3001 контейнера Номер квартиры в доме с общим адресом
Compose-файл Текстовый файл compose.yaml с описанием сервиса: образ, порты, папки с данными Инструкция по сборке, по которой шкаф собирается сам

Важная мысль: контейнер одноразовый. При обновлении его удаляют и создают заново из нового образа. Всё ценное должно лежать в томе, иначе пропадёт вместе со старым контейнером.

Шаг 1. Установить Docker

Ubuntu и Debian

Это основной путь: на Linux Docker работает «родным» образом, без прослоек. Есть два способа, выберите один.

Способ 1. Официальный скрипт Docker. Ставит самую свежую версию прямо с сайта Docker:

Терминал
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Скрипт сам определит систему, подключит репозиторий Docker и поставит всё нужное, включая Compose. Разработчики предупреждают, что скрипт предназначен для быстрой установки, а не для рабочих серверов компаний. Для домашнего сервера он подходит. Посмотреть, что скрипт будет делать, не выполняя команды, можно так: sudo sh get-docker.sh --dry-run.

Способ 2. Пакеты из репозитория Ubuntu. Версия чуть старее, зато обновляется вместе с системой. Именно так Docker стоит на моём тестовом компьютере:

Терминал
sudo apt update
sudo apt install -y docker.io docker-compose-v2

В Debian вместо docker-compose-v2 может понадобиться пакет docker-compose - зависит от версии системы. Если сомневаетесь, используйте способ 1: он одинаково работает в Ubuntu и Debian.

Разрешить запуск без sudo

По умолчанию Docker слушается только администратора, и каждую команду пришлось бы начинать с sudo. Добавьте себя в группу docker:

Терминал
sudo usermod -aG docker $USER

Затем выйдите из системы и зайдите снова (или перезагрузитесь), чтобы группа применилась.

Проверьте, что Docker запускается вместе с системой (скрипт и пакеты обычно включают это сами):

Терминал
sudo systemctl enable --now docker

И посмотрите версии:

Терминал
docker --version
docker compose version
Вывод
Docker version 29.1.3, build 29.1.3-0ubuntu3~24.04.2
Docker Compose version 2.40.3+ds1-0ubuntu1~24.04.1

Обратите внимание: docker compose пишется через пробел. Старая отдельная программа docker-compose через дефис устарела, и в свежих инструкциях её уже не используют. Если где-то в старой статье видите docker-compose up, просто пишите docker compose up.

Windows

На Windows есть два пути.

  • Docker Desktop. Обычная программа с установщиком и окном, где видны контейнеры. Нужна Windows 10 22H2 или Windows 11 и включённая виртуализация. Для личного использования бесплатна. Платная подписка нужна компаниям от 250 сотрудников или с выручкой от 10 млн долларов в год.
  • Ubuntu в WSL. Ставите Ubuntu из Microsoft Store (или командой wsl --install -d Ubuntu-24.04), а внутри неё Docker так же, как описано выше. Так сделан мой тестовый стенд для этой статьи.

Для экспериментов Windows подходит. Но для сервера, который работает круглосуточно, лучше отдельный компьютер с Linux: это надёжнее и экономнее. Из чего его собрать, разобрано в статье Домашний сервер: зачем он нужен и из чего его собрать.

Шаг 2. Проверить: hello-world

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

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

Docker не найдёт образ на компьютере, скачает его из каталога Docker Hub, запустит и покажет приветствие:

Вывод
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:5e23090353324d887c48ad5e5c56d294eab81588df9605b07d1afe895f9cc8f8
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

Фраза «your installation appears to be working correctly» означает, что всё установлено правильно: Docker скачал образ, создал из него контейнер, тот вывел текст и завершился. Образ весит меньше 30 КБ.

Шаг 3. Первый полезный сервис: Uptime Kuma

Uptime Kuma - это мониторинг: раз в минуту он проверяет ваши сайты, роутер, сервер или любой адрес и сообщает, если что-то перестало отвечать. Уведомления умеет слать в Telegram, на почту и ещё в десятки мест. Программа бесплатная, с открытым кодом, и хорошо подходит для первого знакомства с Docker: один контейнер, одна папка с данными.

Создать папку и compose-файл

Каждому сервису удобно выделять свою папку. В ней будут лежать и описание сервиса, и его данные:

Терминал
mkdir -p ~/docker/uptime-kuma
cd ~/docker/uptime-kuma
nano compose.yaml

Вставьте в файл:

YAML
services:
  uptime-kuma:
    # Образ: программа и версия. Тег 2 значит «последняя версия 2.x»,
    # так при обновлении не будет неожиданного перехода на версию 3
    image: louislam/uptime-kuma:2
    # Имя контейнера, чтобы его было легко узнать в списке
    container_name: uptime-kuma
    # Перезапускать контейнер после сбоя и после перезагрузки компьютера,
    # если только вы сами его не остановили
    restart: unless-stopped
    # Порт компьютера : порт внутри контейнера.
    # Открывать в браузере: http://адрес-сервера:3001
    ports:
      - "3001:3001"
    # Папка data рядом с этим файлом станет папкой /app/data внутри контейнера.
    # Здесь хранятся настройки, база и история проверок
    volumes:
      - ./data:/app/data

Сохраните файл: Ctrl+O, Enter, Ctrl+X.

Отступы в YAML важны: только пробелы, никаких табуляций, вложенные строки сдвинуты на два пробела. Если Docker ругается на файл, первым делом проверьте отступы.

Запустить

Терминал
docker compose up -d

up создаёт и запускает всё, что описано в файле. -d означает «в фоне»: команда вернёт вам терминал, а сервис продолжит работать.

При первом запуске Docker скачивает образ. У меня это заняло 1 минуту 12 секунд. Образ Uptime Kuma сжатым весит около 600 МБ, а после распаковки Docker показывает 2,49 ГБ занятого места. Для сравнения: весь Immich занимает около 5 ГБ.

Вывод
 uptime-kuma Pulled
 Network uptime-kuma_default  Created
 Container uptime-kuma  Created
 Container uptime-kuma  Started

Проверьте, что контейнер работает:

Терминал
docker compose ps
Вывод
NAME          IMAGE                    COMMAND                  SERVICE       CREATED          STATUS                    PORTS
uptime-kuma   louislam/uptime-kuma:2   "/usr/bin/dumb-init …"   uptime-kuma   27 seconds ago   Up 25 seconds (healthy)   0.0.0.0:3001->3001/tcp, [::]:3001->3001/tcp

Главное здесь - столбец STATUS: Up значит «работает», (healthy) значит, что контейнер сам проверил себя и доволен. Сразу после старта там может быть (health: starting), подождите полминуты.

Что происходит внутри, показывает журнал:

Терминал
docker compose logs --tail 20
Вывод
uptime-kuma  | Welcome to Uptime Kuma
uptime-kuma  | Your Node.js version: 22.22.3
uptime-kuma  | 2026-09-18T15:33:14Z [SERVER] INFO: Uptime Kuma Version: 2.5.5
uptime-kuma  | 2026-09-18T15:33:15Z [SERVER] INFO: Server Type: HTTP
uptime-kuma  | 2026-09-18T15:33:15Z [SERVER] INFO: Data Dir: ./data/
uptime-kuma  | 2026-09-18T15:33:15Z [SETUP-DATABASE] INFO: Starting Setup Database
uptime-kuma  | 2026-09-18T15:33:15Z [SETUP-DATABASE] INFO: Listening on:
uptime-kuma  | 2026-09-18T15:33:15Z [SETUP-DATABASE] INFO: -  http://localhost:3001

Время в журналах Docker по умолчанию в UTC, поэтому оно на 3 часа меньше московского. Это нормально.

А сколько контейнер берёт ресурсов:

Терминал
docker stats --no-stream
Вывод
CONTAINER ID   NAME          CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O   PIDS
0da40ecc69f8   uptime-kuma   0.01%     109.8MiB / 15.32GiB   0.70%     2.27kB / 1.18kB   0B / 0B     12

Около 110 МБ памяти и почти ноль процессора. Такой сервис не заметит даже старый ноутбук.

Открыть в браузере

Откройте http://localhost:3001, если браузер на том же компьютере, или http://IP-сервера:3001 с другого устройства в домашней сети. Узнать IP сервера можно командой hostname -I (нужен первый адрес из списка).

Первый экран спросит, какую базу данных использовать. Выберите встроенную SQLite: для дома её хватает с запасом, а отдельную базу MariaDB имеет смысл брать только на сотни проверок. Через несколько секунд Uptime Kuma перейдёт к созданию учётной записи: придумайте логин и надёжный пароль. Интерфейс можно переключить на русский в настройках.

Первая проверка сайта

  1. Нажмите «Добавить» (Add New Monitor).
  2. Тип монитора: HTTP(s).
  3. Понятное имя: например, «Мой сайт».
  4. URL: адрес сайта целиком, с https://.
  5. Интервал проверки: по умолчанию 60 секунд, для дома этого достаточно.
  6. Сохраните.

Через минуту появится зелёная полоска и время отклика. Дальше можно добавить уведомления: в настройках выберите Telegram, укажите токен своего бота и ID чата, и при падении сайта придёт сообщение.

Что ещё удобно мониторить дома: сам роутер (тип Ping, адрес вроде 192.168.1.1), свои сервисы на сервере и внешний сайт вроде ya.ru, чтобы видеть, когда пропадал интернет.

Шаг 4. Команды на каждый день

Все команды docker compose выполняются в папке сервиса, там, где лежит compose.yaml. Если вы в другой папке, сначала перейдите: cd ~/docker/uptime-kuma.

Что сделать Команда Что происходит
Запустить (или применить изменения в compose.yaml) docker compose up -d Создаёт и запускает контейнер
Остановить docker compose stop Контейнер остановлен, но не удалён
Снова запустить после stop docker compose start Запускает остановленный контейнер
Перезапустить docker compose restart Остановить и запустить
Посмотреть состояние docker compose ps Работает ли, сколько времени
Журнал docker compose logs --tail 50 Последние 50 строк. С ключом -f журнал идёт в реальном времени, выход Ctrl+C
Обновить docker compose pull && docker compose up -d Скачать новый образ и пересоздать контейнер
Удалить контейнер docker compose down Контейнер удалён, папка data осталась
Все контейнеры на компьютере docker ps Список работающих контейнеров всех сервисов
Сколько занято места docker system df Место под образы, контейнеры и тома

Как выглядит обновление

Терминал
docker compose pull && docker compose up -d

Если новой версии нет, Docker просто сверит образ и ничего не тронет:

Вывод
 uptime-kuma Pulling
 uptime-kuma Pulled
 Container uptime-kuma  Running

Если новая версия есть, строк будет больше: Docker скачает изменения, остановит старый контейнер и создаст новый. Настройки и история сохранятся, потому что они лежат в папке data, а не внутри контейнера.

Старые версии образов после обновления остаются на диске. Удалить неиспользуемые образы можно командой docker image prune: она спросит подтверждение и удалит только образы без тегов, которые не использует ни один контейнер.

Где лежат данные и как делать бэкап

В нашем compose-файле строка ./data:/app/data означает: всё, что программа пишет в /app/data, на самом деле лежит в папке ~/docker/uptime-kuma/data. Её можно открыть, скопировать, перенести на другой компьютер.

Отсюда простое правило: бэкап сервиса = папка сервиса целиком, вместе с compose.yaml и data. Чтобы восстановить сервис на новом компьютере, достаточно поставить Docker, скопировать папку и выполнить docker compose up -d.

Для надёжной копии остановите сервис, чтобы база не менялась во время копирования:

Терминал
cd ~/docker/uptime-kuma
docker compose stop
sudo tar czf ~/uptime-kuma-$(date +%F).tar.gz .
docker compose start

Получится архив вида uptime-kuma-2026-09-18.tar.gz. Его и отправляйте на внешний диск или в облако. sudo нужен потому, что часть файлов в data создаёт процесс внутри контейнера от имени root, и обычный пользователь не может их прочитать.

Типичные ошибки

permission denied на docker.sock

Вывод
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

Вас нет в группе docker, или вы добавились, но не перезашли в систему. Выполните sudo usermod -aG docker $USER, выйдите из системы и зайдите снова. Проверить, что группа применилась, можно командой groups: в списке должно быть слово docker.

Порт уже занят

Вывод
Bind for 0.0.0.0:3001 failed: port is already allocated

Порт 3001 уже использует другая программа или другой контейнер. Поменяйте левое число в compose-файле, например "3002:3001", и выполните docker compose up -d. Правое число трогать не нужно: это порт внутри контейнера. Открывать сервис теперь надо по адресу http://адрес-сервера:3002. Посмотреть, кто занял порт: sudo ss -ltnp | grep 3001.

Контейнер постоянно перезапускается

В docker compose ps статус прыгает: Restarting (1) 5 seconds ago. Контейнер падает при старте, а restart: unless-stopped снова и снова его поднимает. Причина всегда написана в журнале:

Терминал
docker compose logs --tail 50

Чаще всего это ошибка в compose-файле или .env (опечатка в пароле, неверный путь к папке), нехватка памяти или нет прав на папку с данными.

Закончилось место на диске

Образы и старые версии постепенно копятся. Посмотрите, что занимает место:

Терминал
docker system df
Вывод
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          6         2         7.566GB   2.487GB (32%)
Containers      2         1         262.1kB   4.096kB (1%)
Local Volumes   1         0         2.879GB   2.879GB (100%)
Build Cache     0         0         0B        0B

Столбец RECLAIMABLE показывает, сколько можно освободить. Начните с docker image prune: он удаляет только «осиротевшие» образы.

Не скачивается образ: i/o timeout

Вывод
failed to resolve reference "docker.io/louislam/uptime-kuma:2": ... dial tcp ...:443: i/o timeout

Docker не смог связаться с Docker Hub. Сначала просто повторите команду: на тестовом стенде такая ошибка случалась, а через минуту образ скачивался. Если ошибка повторяется постоянно, пропишите зеркало реестра. Например, Google держит бесплатную копию популярных образов Docker Hub на mirror.gcr.io. Создайте файл настроек:

Терминал
sudo nano /etc/docker/daemon.json
JSON
{
  "registry-mirrors": ["https://mirror.gcr.io"]
}

И перезапустите Docker:

Терминал
sudo systemctl restart docker

Команду docker compose pull менять не нужно: Docker сам попробует зеркало, а если образа там нет, пойдёт на Docker Hub. Проверить, что зеркало подхватилось: docker info, раздел «Registry Mirrors». Свои зеркала Docker Hub есть и у российских облачных провайдеров, например у Timeweb Cloud (https://dockerhub.timeweb.cloud).

Что ставить дальше

Когда Uptime Kuma заработала, вы умеете всё, что нужно для остальных сервисов: у каждого есть готовый compose-файл в официальной инструкции.

  • Immich - фото и видео со всех телефонов семьи. Самый популярный сервис для домашнего сервера, но и самый требовательный: около 5 ГБ образов и от 6 ГБ оперативной памяти.
  • Jellyfin - медиасервер для фильмов и сериалов.
  • AdGuard Home - блокировка рекламы для всей домашней сети.
  • Open WebUI - веб-интерфейс для нейросети на своём компьютере. Пошагово в статье Ollama и Open WebUI.

Если железа под сервер ещё нет, начните со статьи Домашний сервер: зачем он нужен и из чего его собрать.

Частые вопросы

Docker бесплатный?

Сам Docker Engine на Linux бесплатный и с открытым кодом. Docker Desktop для Windows и macOS бесплатен для личного использования, учёбы и небольших компаний (до 250 сотрудников и до 10 млн долларов выручки в год).

Чем Docker отличается от виртуальной машины?

Виртуальная машина эмулирует целый компьютер со своей операционной системой, поэтому тяжёлая. Контейнер использует ядро основной системы и запускает только саму программу. Он стартует за секунды и берёт памяти ровно столько, сколько нужно программе: Uptime Kuma, например, около 110 МБ.

Что будет с контейнерами после перезагрузки компьютера?

Если в compose-файле стоит restart: unless-stopped, а сам Docker включён в автозагрузку (sudo systemctl enable docker), контейнеры запустятся сами. Исключение - те, что вы остановили вручную командой docker compose stop.

Нужно ли знать Linux, чтобы пользоваться Docker?

Хватит базовых вещей: переходить по папкам (cd), редактировать файл (nano) и копировать команды из инструкций. Всё остальное делается командами из таблицы выше.

Можно ли запускать несколько сервисов на одном компьютере?

Да, для этого Docker и нужен. Каждому сервису своя папка со своим compose.yaml, главное, чтобы у них не совпадали левые номера портов.

DockerDocker ComposeUptime Kumaдомашний серверUbuntu
Статья помогла?

Комментарии

Без регистрации. Комментарии проходят проверку перед публикацией, ссылки не публикуются.

Пока никто не написал. Будьте первым.