Что такое Docker?
Контейнер — это работающий экземпляр образа. Образ — чертёж. Контейнер — построенный по чертежу дом, в котором кто-то живёт. Из одного образа можно запустить несколько контейнеров (хотя в домашнем использовании это редко нужно).
Контейнер можно остановить, запустить, перезапустить, удалить. При удалении теряются только данные внутри контейнера — всё, что лежит в примонтированных директориях (volumes), сохраняется.
Контейнер — эфемерный. Удалил — данные пропали. Чтобы сохранить данные между пересозданиями контейнера, используют тома и привязки директорий.
Bind mount — директория на хост-системе, которая «проецируется» внутрь контейнера. Пример: директория /opt/homeassistant/config на хосте монтируется как /config внутри контейнера Home Assistant. Контейнер пишет конфигурацию в /config — на самом деле она сохраняется на хосте в /opt/homeassistant/config. Удалили контейнер, создали новый — конфигурация на месте.
Docker volume — именованный том, управляемый Docker. Менее прозрачный, чем bind mount (файлы хранятся в служебной директории Docker), но удобный для некоторых сценариев.
Для домашнего сервера bind mount обычно удобнее: файлы лежат в понятном месте, их легко резервировать и редактировать.
Docker создаёт виртуальные сети для контейнеров. По умолчанию каждый контейнер получает IP-адрес во внутренней сети Docker и может обращаться к другим контейнерам по имени.
В docker-compose.yml все контейнеры, описанные в одном файле, автоматически попадают в общую сеть и видят друг друга по имени сервиса. Zigbee2MQTT обращается к Mosquitto не по IP-адресу, а просто по имени mosquitto — Docker DNS резолвит это имя в IP контейнера.
Для доступа извне (из домашней сети) контейнер «пробрасывает» порты на хост: ports: "8123:8123" означает «порт 8123 на хосте → порт 8123 в контейнере». Обращаетесь к http://IP-сервера:8123 — попадаете в Home Assistant внутри контейнера.
Иногда контейнеру нужен доступ к локальной сети так, как если бы он был отдельным устройством (для mDNS, для обнаружения устройств). В этом случае используют network_mode: host — контейнер разделяет сетевой стек с хостом. Home Assistant часто рекомендуют запускать именно так.
Docker Compose — это инструмент для описания и запуска многоконтейнерных приложений. Вместо ручного запуска каждого контейнера командой docker run ... — описываете всё в одном YAML-файле и запускаете одной командой docker compose up -d.
Пример docker-compose.yml для минимального умного дома:
yamlservices:
mosquitto:
image: eclipse-mosquitto:2
restart: unless-stopped
ports:
- "1883:1883"
volumes:
- ./mosquitto/config:/mosquitto/config
- ./mosquitto/data:/mosquitto/data
zigbee2mqtt:
image: koenkk/zigbee2mqtt
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./zigbee2mqtt/data:/app/data
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
restart: unless-stopped
network_mode: host
volumes:
- ./homeassistant/config:/config
privileged: trueТри сервиса, один файл, одна команда. docker compose up -d — и через минуту у вас Mosquitto, Zigbee2MQTT и Home Assistant. docker compose down — всё остановилось. docker compose pull && docker compose up -d — все три обновились до последних версий.
Home Assistant. Основной контроллер умного дома. Часто запускается в network_mode: host для обнаружения устройств по mDNS. Конфигурация, автоматизации, дашборды — всё в примонтированной директории /config.
Mosquitto. MQTT-брокер. Лёгкий, запускается за секунду. Конфигурация и файл паролей — в примонтированной директории.
Zigbee2MQTT. Мост между Zigbee-координатором и MQTT. Требует проброса USB-устройства (координатора) внутрь контейнера через devices.
Frigate. NVR с ИИ-детекцией. Требует проброса GPU или Coral TPU. Для NVIDIA — runtime: nvidia. Для Coral USB — devices: /dev/bus/usb. Потребляет больше ресурсов, чем остальные.
Grafana + InfluxDB. Визуализация и хранение данных. Два контейнера, которые общаются между собой по внутренней Docker-сети. Данные InfluxDB — в примонтированном томе, чтобы не потерять историю при обновлении.
AdGuard Home. DNS-фильтрация. Пробрасывает порт 53 (DNS) и порт 3000 (веб-интерфейс). В network_mode: host — если нужно слушать на конкретных интерфейсах.
Nginx Proxy Manager. Обратный прокси. Пробрасывает порты 80 и 443. Все остальные контейнеры за ним — без проброса портов наружу.
Home Assistant можно установить несколькими способами. Два наиболее популярных для домашнего использования.
Home Assistant OS (HAOS). Целая операционная система, оптимизированная для HA. Устанавливается на Raspberry Pi или x86-ПК как единственная ОС. Внутри — свой Docker (под управлением Supervisor), аддоны (Mosquitto, Zigbee2MQTT, Frigate — ставятся из магазина в один клик). Проще всего. Не требует знания Docker.
Home Assistant Container. Docker-контейнер с Home Assistant, который вы запускаете на собственном Linux-сервере рядом с другими контейнерами. Вся остальная инфраструктура (Mosquitto, Zigbee2MQTT, Grafana) — отдельные контейнеры, настраиваемые вручную через docker-compose.yml. Гибче, но требует знания Docker.
Если вы готовы потратить вечер на изучение Docker — вариант «Container» даёт больше контроля. Если хотите «поставил и забыл» — HAOS проще и поддерживается «из коробки».
Третий путь — Home Assistant Supervised: Docker под управлением Supervisor, но на произвольной ОС. Даёт аддоны как в HAOS, но на вашем Linux. Официально поддерживается только на Debian — и при этом требует соблюдения строгих условий.
bashdocker compose up -d # запустить все контейнеры в фоне
docker compose down # остановить и удалить контейнеры
docker compose pull # скачать обновлённые образы
docker compose logs -f # смотреть логи в реальном времени
docker compose restart mqtt # перезапустить конкретный сервисЭтого набора команд хватает для повседневного управления.
Веб-интерфейс для управления Docker. Показывает все контейнеры, их состояние, потребление ресурсов, логи. Позволяет останавливать, перезапускать, удалять контейнеры через браузер. Для тех, кто предпочитает GUI командной строке.
Сам Portainer — тоже Docker-контейнер. Рекурсия.
Автоматическое обновление контейнеров. Watchtower периодически проверяет, появились ли новые версии образов, скачивает их и пересоздаёт контейнеры. Удобно, но опасно: автоматическое обновление может сломать работающую систему. Для критичных сервисов (Home Assistant, Zigbee2MQTT) лучше обновлять вручную, проверив changelog. Diun — альтернатива, которая только уведомляет о доступных обновлениях, но не обновляет автоматически. Безопаснее.
С Docker резервное копирование сводится к двум вещам: файл docker-compose.yml и директории с данными (volumes / bind mounts).
Скопировали docker-compose.yml и все примонтированные директории — у вас полный бэкап всей инфраструктуры. Перенесли на другой сервер, запустили docker compose up -d — всё восстановилось.
Автоматизировать можно через cron + rsync, Borg Backup, Restic или любой другой инструмент резервного копирования. Главное — регулярность и хранение копий на отдельном носителе (NAS, внешний диск, облако).
Порог входа. Docker — это не «установил и забыл». Нужно понимать концепции образов, контейнеров, томов, сетей. Для человека без опыта администрирования Linux — кривая обучения ощутима. Но одного вечера с документацией обычно хватает для базовых навыков.
Потребление ресурсов. Docker добавляет минимальный оверхед по сравнению с «голыми» приложениями. Но каждый контейнер несёт внутри себя свои библиотеки — суммарный объём может быть значительным (гигабайты дискового пространства на десяток контейнеров). На Raspberry Pi с SD-картой — место может стать проблемой. SSD решает.
Проброс оборудования. USB-устройства (Zigbee-координатор, Coral TPU), GPU, Bluetooth-адаптеры — всё это нужно явно пробросить в контейнер. Иногда это тривиально (devices), иногда — требует дополнительной настройки (udev rules, драйверы на хосте).
Не для всего. Сетевое оборудование (OpenWrt на роутере), firmware устройств (Tasmota, ESPHome) — это не Docker. Docker — для серверных приложений на Linux-хосте.
Docker — это стандарт развёртывания сервисов умного дома. Не единственный способ, но самый практичный. Изоляция, воспроизводимость, простота обновления и отката — всё это превращает хаос из десятка разнородных приложений в управляемую, предсказуемую инфраструктуру.
Один docker-compose.yml описывает весь ваш умный дом: от MQTT-брокера до видеорегистратора с ИИ. Один файл, который можно хранить в Git, версионировать, копировать на новый сервер. Это не просто удобство — это дисциплина, которая спасает часы при неизбежном переезде, восстановлении или расширении системы.
Если вы ещё не используете Docker — попробуйте. Начните с Mosquitto и Zigbee2MQTT. Два контейнера, десять строк в docker-compose.yml, пять минут до работающей системы. А дальше — затянет.
Статья подготовлена на основе документации Docker, Docker Compose и материалов сообщества Home Assistant. Все упомянутые торговые марки принадлежат их правообладателям. Материал носит информационный характер и не является рекламой.