
Почему небольшой набор контейнеров лучше, чем большой
Прочитав “5 just-enough Docker containers I use on every PC” на XDA, мы пересмотрели свои собственные стеки и сократили две трети того, что запускали. Домашняя лаборатория, которой никто не касается, потому что требует часа на размышления, — это мертвая лаборатория. Небольшой, обдуманный набор контейнеров, охватывающий админ-интерфейс, мониторинг, секреты, блокировку рекламы и обновления, — это версия, к которой мы возвращаемся годами спустя, на Windows с Docker Desktop, на macOS с OrbStack и на Linux с простым Docker Engine.
Мы протестировали восемь контейнеров через полный цикл установки на каждом из этих хостов, затем запустили стек для рабочей недели, чтобы проверить использование ОЗУ, простой процессора и количество обнаруженных ошибок. Всё здесь можно запустить командой docker compose up -d и оно прекрасно работает за брандмауэром домашней сети.
На что обратить внимание в минималистском наборе контейнеров
- Запускается из одного файла compose. Весь набор должен запуститься одной командой, а не шестнадцатью нажатиями на панели управления.
- Низкое потребление в режиме ожидания. Стек, который вы оставляете включённым на мини-ПК, должен использовать низкие двузначные проценты ОЗУ.
- Веб-интерфейс или ничего. Инструменты только для командной строки нужны на хосте, а не в Docker. Каждый контейнер здесь имеет браузерный интерфейс.
- История резервного копирования. Всё, что хранит состояние, должно быть просто резервируемым (один подключённый том или bind mount).
- Осведомлённость об обновлениях. Контейнеры, которые никогда не обновляются, — это компрометированные контейнеры. Стек должен включать способ, чтобы их пополнять.
- Документированный паттерн обратного прокси. Реальные развёртывания заканчиваются за Traefik, Caddy или nginx, а документация контейнеров должна показать, как это сделать.
Быстрое сравнение
| Приложение | Лучше всего для | Потребление в ожидании | Веб-интерфейс | Лицензия |
|---|---|---|---|---|
| Portainer | Управление контейнерами визуально | Низкое | Да | Community edition free |
| Uptime Kuma | Мониторинг служб и получение оповещений | Очень низкое | Да | MIT |
| Vaultwarden | Самостоятельно размещённый менеджер паролей | Очень низкое | Да | GPLv3 |
| Pi-hole | Блокировка рекламы и трекеров на уровне DNS | Очень низкое | Да | EUPL |
| Watchtower | Автоматическое обновление контейнеров | Очень низкое | Нет веб-интерфейса | Apache 2.0 |
| Homepage | Личная панель для стека | Очень низкое | Да | GPLv3 |
| Traefik | Обратный прокси для остального стека | Низкое | Да (панель) | MIT |
| Duplicati | Резервная копия хоста и томов контейнеров | Низкое | Да | LGPLv2.1 |
Восемь контейнеров, которые мы запускаем на каждом хосте
1. Portainer, администраторский интерфейс, который делает Docker понятным
Portainer — это браузерная панель управления, которая превращает командную строку Docker в набор экранов. Запуск и остановка контейнеров, загрузка образов, проверка томов, просмотр логов, exec в контейнер, диаграммы сетей — всё это. Для тех, кто не хочет держать в голове последние тридцать команд docker, Portainer — это начало дня.
Где это не работает: Business edition требует лицензию; Community edition охватывает всё, что нужна для домашней лаборатории с одним узлом, но некоторые функции для предприятий (RBAC сверх пары аккаунтов, зашифрованное хранилище секретов) платные.
Цена:
- Бесплатно: Community edition для личного и малого командного использования
- Платно: Business edition с ценой за узел
- vs raw docker CLI: Быстрее для просмотра, медленнее для скриптирования
Работает на: Windows Docker Desktop, macOS OrbStack, Docker Engine на Linux.
Загрузить: portainer.io
Вывод: Первый контейнер для установки на новый хост, перед всем остальным.
2. Uptime Kuma, монитор, который скажет вам прежде, чем ваша семья узнает
Uptime Kuma — это самостоятельно размещённая страница статуса и система оповещений. Она пингует URL, TCP-порт, базу данных или проверку здоровья контейнера по расписанию, затем показывает доску статуса и отправляет оповещения (Discord, Telegram, email, ntfy), когда что-то сломается. Добавление нового сервиса — это двухминутная форма.
Где это не работает: Не разработана для сотен сервисов (это инструмент для домашней лаборатории, а не Datadog). Собственные перезагрузки оставляют пробел в временной шкале.
Цена:
- Бесплатно: Полный продукт
- Платно: Нет
- vs коммерческий мониторинг: Проще, приватно, без почасовой тарификации
Работает на: Docker на Windows, macOS, Linux.
Загрузить: Uptime Kuma on GitHub
Вывод: Контейнер, который делает остальной стек видимым. Добавьте его вторым.
3. Vaultwarden, компактный самостоятельный Bitwarden
Vaultwarden — это переимплементация на Rust серверного API Bitwarden. Работает на доле ОЗУ, которую занимает официальный контейнер, использует тот же протокол, что и официальные приложения Bitwarden, и хранит всё в одном файле SQLite, который тривиально резервировать.
Где это не работает: Проект сообщества, не поддерживается Bitwarden. Некоторые функции для предприятий (провайдеры SSO, синхронизация каталогов) заблокированы для платных уровней на размещённом Bitwarden.
Цена:
- Бесплатно: Контейнер бесплатный; хранилище стоит столько же, сколько ваш диск
- Платно: Нет
- vs размещённый Bitwarden: Полный контроль, собственные резервные копии, самостоятельное управление временем работы
Работает на: Любом хосте Docker.
Загрузить: Vaultwarden on GitHub
Вывод: Контейнер, который наконец позволяет вам уйти из размещённого менеджера паролей, не теряя синхронизацию между устройствами.
4. Pi-hole, блокировщик рекламы для каждого устройства в сети
Pi-hole запускает DNS-сервер, который возвращает ничего для доменов в его чёрных списках. Направьте DNS вашего маршрутизатора на контейнер Pi-hole, и каждое устройство в сети (телефоны, телевизоры, принтеры) внезапно теряет связи с рекламой и трекерами на уровне DNS, без установки на каждом устройстве.
Где это не работает: Некоторые сервисы полагаются на домены трекеров для работы ссылок; мышечная память белого списка требует неделю. Блокировки только HTTPS всё ещё пропускают рекламу, подаваемую с того же домена, что и сайт.
Цена:
- Бесплатно: Полный продукт
- Платно: Нет
- vs браузерный блокировщик рекламы: Охватывает телефоны, телевизоры и IoT; не скрывает рекламу на уровне элементов на странице
Работает на: Docker на любом хосте; счастлив на всегда включённом хосте.
Загрузить: pi-hole.net
Вывод: Единственный контейнер, который меняет то, что видит вся семья, что хороший результат за десять минут compose.
5. Watchtower, дворник, который держит контейнеры свежими
Watchtower следит за вашими другими контейнерами, проверяет новые образы и загружает плюс перезагружает по расписанию, которое вы установили. Добавьте уведомление Discord или Slack, и каждое утро вы получаете сводку того, что обновилось ночью.
Где это не работает: Автоматические обновления могут сломать запущённые сервисы, если образ поставляет плохой релиз. Привязка к конкретным тегам или использование фильтров меток — это смягчение.
Цена:
- Бесплатно: Полный продукт
- Платно: Нет
- vs ручные обновления: Автоматизация с малым риском vs постоянное устаревание без риска сюрпризов
Работает на: Любом хосте Docker.
Загрузить: containrrr.dev/watchtower
Вывод: Контейнер, который помешает остальному стеку гнить.
6. Homepage, панель, которая делает стек находимым
Homepage — это лёгкая панель, которая выводит список ваших сервисов с иконками, проверками здоровья и интеграциями, которые показывают живые данные (статус Uptime Kuma, счётчики Portainer, очереди Sonarr, если вы его запускаете). Добавьте её в закладки в каждом браузере, и вы никогда не потеряете URL контейнера.
Где это не работает: Конфигурация — это YAML на диске; хорошая часть в том, что она живёт в git, плохая часть в том, что это не пользовательский интерфейс click-to-add.
Цена:
- Бесплатно: Полностью с открытым исходным кодом
- Платно: Нет
- vs браузерная панель закладок: Живые данные, одно место для семьи
Работает на: Docker на любом хосте.
Загрузить: Homepage on GitHub
Вывод: Контейнер, который превращает остальной стек из “URLs, которые я помню” в настоящую входную дверь.
7. Traefik, обратный прокси, через который общается остальной стек
Traefik — это обратный прокси, который позволяет каждому другому контейнеру отвечать на его собственный поддомен (portainer.home, kuma.home, vault.home) вместо запоминания номеров портов. Он следит за метками Docker и автоматически обновляет маршрутизацию, поэтому добавление нового контейнера с публичным URL требует три строки метки и применение compose.
Где это не работает: Первое развёртывание Traefik имеет больше ручек, чем другие; метки маршрутизатора и настройка TLS-резолвера требуют внимательное чтение документов.
Цена:
- Бесплатно: Traefik Proxy полностью с открытым исходным кодом
- Платно: Traefik Enterprise — это отдельный продукт
- vs nginx: Конфигурация, ориентированная на контейнеры, менее классическая
Работает на: Любом хосте Docker.
Загрузить: traefik.io
Вывод: Единственный контейнер, который меняет весь стек с “IPs и портов” на “понятные URL”.
8. Duplicati, резервная копия, которая защищает тома контейнеров
Duplicati — это клиент резервного копирования для остального стека. Направьте его на ваши тома Docker и bind mounts, выберите назначение (локально, SSH, S3, B2, WebDAV), установите расписание, и каждую ночь важные данные получают зашифрованную, дедублированную резервную копию вне хоста.
Где это не работает: Веб-интерфейс функционален, а не полирован. Рабочие процессы восстановления требуют прохождение в первый раз.
Цена:
- Бесплатно: Полный продукт
- Платно: Нет
- vs ручные скрипты
docker run --rm -v: Фактически запускаются по расписанию, ловят новые тома
Работает на: Docker на любом хосте.
Загрузить: duplicati.com
Вывод: Контейнер, который люди пропускают, а затем жалеют, когда диск умирает. Добавьте его рано.
Как выбрать правильный минималистский стек
- Если это ваш первый хост Docker: Portainer, Uptime Kuma и Vaultwarden — это три, которые окупаются в первую неделю.
- Если ваша домашняя сеть полна рекламы: добавьте Pi-hole и перенаправьте DNS вашего маршрутизатора.
- Если у вас уже растущий стек: добавьте Watchtower и Homepage далее; оба делают остальное более управляемым.
- Если вы планируете выставить какой-либо сервис на поддомен: Traefik идёт до выставления, а не после.
- Если вам важно не потерять то, что вы создали: Duplicati — это контейнер, который превращает ваш стек compose в то, что вы можете фактически восстановить.
ЧастоЗадаваемые вопросы
Эти контейнеры работают на Windows ПК с Docker Desktop?
Да. Каждый из восьми поставляет официальный образ multi-arch (linux/amd64 и linux/arm64), который работает идентично на Docker Desktop для Windows, OrbStack на macOS и Docker Engine на Linux.
Сколько ОЗУ использует этот стек в режиме ожидания?
На Raspberry Pi 5 с 4GB и на небольшом мини-ПК с 8GB восемь контейнеров вместе используют низкие сотни мегабайт ОЗУ в режиме ожидания. Vaultwarden и Pi-hole — самые лёгкие; Traefik и Duplicati растут кратко во время активной работы.
Безопасно ли оставлять Watchtower на автоматических обновлениях?
В основном. Более безопасный паттерн — запустить Watchtower с фильтрами меток, поэтому обновляются только контейнеры, помеченные вами как “безопасно для автоматического обновления”, и оставить остальное на ручных обновлениях. Привязка к тегам основных версий — ещё один обычный способ смягчения.
Нужен ли мне Portainer, если я уже комфортно работаю с Docker CLI?
Portainer — это удобный слой. Если вы хорошо с CLI и читаете логи с docker compose logs -f, вы можете его пропустить. Большинство людей, которые его добавляют, перестают его удалять после недели.
Могу ли я запустить этот стек на Synology или QNAP NAS?
Да. Оба производителя поставляют пользовательские интерфейсы Container Manager, которые читают стандартные файлы compose, и каждый контейнер здесь совместим. На Synology DSM 7 Container Manager может импортировать файл compose напрямую.