Источник: selfhosting.sh
Предварительные условия
- Raspberry Pi 4 (4 ГБ+) или Pi 5 (рекомендуется)
- Установленная 64-разрядная версия Raspberry Pi OS Lite (см. наш руководство по домашнему серверу на Pi)
- NVMe SSD через HAT или USB SSD (избегайте microSD для Docker)
- Доступ по SSH к вашему Pi
Обновлено в марте 2026 года: Проверено с последними образами Docker и конфигурациями.
Важно: Вы должны использовать 64-разрядную версию Raspberry Pi OS. 32-разрядная версия не будет работать с большинством образов Docker. Проверьте:
uname -m
# Должно выдавать: aarch64
Если вы видите armv7l, значит, вы на 32-битной версии. Переустановите Raspberry Pi OS Lite (64-бит).
Получайте конфигурации Docker Compose, выбор оборудования и ярлыки настройки, которые мы не публикуем в статьях. Еженедельно. Без спама.
Подписаться
Установка Docker
Официальный удобный сценарий — самый простой способ:
curl -fsSL https://get.docker.com | sh
Добавьте вашего пользователя в группу Docker (это позволит избежать необходимости использовать sudo для каждой команды Docker):
sudo usermod -aG docker $USER
Выйдите из системы и войдите обратно, чтобы изменения группы вступили в силу, затем проверьте:
docker version
docker compose version
Оба должны показывать информацию о версиях. Docker Compose v2 автоматически включен.
Совместимость образов ARM64
Pi работает на архитектуре ARM64 (aarch64). Большинство популярных самоподдерживаемых приложений публикуют многоплатформенные образы Docker, которые включают сборки ARM64. Когда вы используете docker pull, Docker автоматически выбирает правильную архитектуру.
Гарантированная поддержка ARM64
Эти приложения публикуют официальные образы ARM64:
* Pi-hole — pihole/pihole
* AdGuard Home — adguard/adguardhome
* Home Assistant — ghcr.io/home-assistant/home-assistant
* Vaultwarden — vaultwarden/server
* Nextcloud — nextcloud
* Uptime Kuma — louislam/uptime-kuma
* Jellyfin — jellyfin/jellyfin
* FreshRSS — freshrss/freshrss
* Syncthing — syncthing/syncthing
* Traefik — traefik
* Caddy — caddy
* Gitea / Forgejo — gitea/gitea
* Paperless-ngx — ghcr.io/paperless-ngx/paperless-ngx
* PostgreSQL, MariaDB, Redis, Nginx — все официальные образы поддерживают ARM64
Образы от LinuxServer.io — надежный выбор; LSIO создает все свои образы для ARM64.
Проверка совместимости образов
Перед тем как загрузить образ, проверьте, поддерживает ли он ARM64:
docker manifest inspect <image>:<tag> | grep architecture
# Ищите "arm64" в выводе
Или проверьте Docker Hub — страница образа показывает поддерживаемые архитектуры под "OS/ARCH".
Если образ не поддерживает ARM64
У вас есть три варианта:
1. Найти альтернативный образ. Поиск на Docker Hub по запросу <app-name> arm64 — часто существуют сборки сообщества.
2. Собрать из исходников. Если приложение предоставляет Dockerfile, клонируйте репозиторий и собирайте локально:
git clone https://github.com/org/app.git
cd app
docker build -t app:local .
- Эмуляция с помощью QEMU. Docker может запускать x86-образы на ARM через QEMU, но производительность снижается в 5-10 раз. Нежелательно для продакшена:
docker run --platform linux/amd64 <x86-only-image>
Пример Docker Compose
Создайте каталог проекта и файл docker-compose.yml:
mkdir -p ~/docker && cd ~/docker
Пример стека для домашнего сервера на базе Pi:
services:
pihole:
image: pihole/pihole:2026.02.0
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80/tcp"
environment:
TZ: "America/New_York"
WEBPASSWORD: "changeme"
volumes:
- pihole_data:/etc/pihole
- pihole_dnsmasq:/etc/dnsmasq.d
restart: unless-stopped
vaultwarden:
image: vaultwarden/server:1.35.4
container_name: vaultwarden
ports:
- "8081:80"
environment:
DOMAIN: "https://vault.yourdomain.com"
volumes:
- vaultwarden_data:/data
restart: unless-stopped
uptime-kuma:
image: louislam/uptime-kuma:2.2.1
container_name: uptime-kuma
ports:
- "3001:3001"
volumes:
- uptime_kuma_data:/app/data
restart: unless-stopped
volumes:
pihole_data:
pihole_dnsmasq:
vaultwarden_data:
uptime_kuma_data:
Запустите стек:
docker compose up -d
Проверьте статус:
docker compose ps
Советы по производительности
1. Используйте NVMe или USB SSD хранилище
Файловая система overlay2 Docker генерирует большое количество случайного ввода-вывода. На microSD запуск контейнеров занимает 5-15 секунд. На NVMe — 1-2 секунды. Смотрите раздел хранения в нашем руководстве по домашнему серверу на Pi.
2. Используйте активное охлаждение
Контейнеры Docker под нагрузкой будут нагружать ЦП Pi 5 на постоянной основе. Без активного охлаждения ЦП снижает тактовую частоту с 2.4 ГГц до ~1.8 ГГц. Активный кулер ($5-10) или официальный вентилятор Pi 5 поддерживает полную производительность.
3. Ограничьте использование ресурсов контейнерами
На системе с 4-8 ГБ ОЗУ установите ограничение памяти, чтобы один контейнер не лишал ресурсов другие:
services:
nextcloud:
image: nextcloud:33.0.0
deploy:
resources:
limits:
memory: 1G
4. Используйте tmpfs для временных данных
Подключите /tmp как tmpfs в контейнерах, которые записывают много временных данных (инструменты сборки, транскодирование). Это позволяет сохранять временные записи в ОЗУ вместо того, чтобы изнашивать SSD:
services:
app:
tmpfs:
- /tmp
5. Мониторьте ресурсы
Установите ctop для мониторинга ресурсов контейнера в реальном времени:
docker run --rm -ti \
--name ctop \
-v /var/run/docker.sock:/var/run/docker.sock \
quay.io/vektorlab/ctop:0.7.7
Или используйте docker stats для быстрого обзора:
docker stats --no-stream
Автоматические обновления контейнеров
Watchtower устарел. Репозиторий
containrrr/watchtowerзаархивирован и больше не поддерживается. Используйте DIUN вместо этого — он уведомляет вас, когда обновления доступны, не затрагивая ваши работающие контейнеры.
Используйте DIUN, чтобы получить уведомления, когда доступны обновления образов контейнеров:
services:
diun:
image: crazymax/diun:4.31.0
container_name: diun
restart: unless-stopped
volumes:
- diun-data:/data
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
DIUN_WATCH_SCHEDULE: "0 */6 * * *"
DIUN_PROVIDERS_DOCKER: "true"
volumes:
diun-data:
DIUN проверяет наличие новых версий образов каждые 6 часов и отправляет уведомления через Discord, Slack, email или 20+ других каналов. Вы решаете, когда и как проводить обновления. Смотрите Как самостийно запустить DIUN для полной конфигурации.
Устранение неполадок
”no matching manifest for linux/arm64”
Образ не поддерживает ARM64. Найдите альтернативный образ, соберите из исходников или пропустите это приложение. Не используйте эмуляцию QEMU в продакшене.
Контейнеру не хватает памяти
Проверьте текущее использование с помощью docker stats. Добавьте ограничения памяти. Рассмотрите возможность обновления до мини-ПК с 16 ГБ ОЗУ, если вам постоянно требуется больше 6 ГБ для контейнеров.
Команда Docker Compose не найдена
У вас может быть Docker Compose v1 (docker-compose), а не v2 (docker compose). Переустановите Docker, используя официальный скрипт, чтобы получить v2.
Медленный запуск контейнера
Практически всегда это проблема хранения. microSD слишком медленен для Docker. Перейдите на NVMe SSD. Проверьте:
# Проверьте скорость случайной записи
fio --name=test --rw=randwrite --bs=4k --size=100M --numjobs=1 --runtime=10
# NVMe: 50,000+ IOPS
# microSD: 1,000-3,000 IOPS
FAQ
Могу ли я запустить Docker на Raspberry Pi 3?
В техническом смысле да (требуется 64-разрядная ОС), но с 1 ГБ RAM и гораздо более медленным процессором он ограничен 1-2 очень легковесными контейнерами. Не рекомендуется для хостинга. Лучше взять хотя бы Pi 4 с 4 ГБ.
Docker на Pi против Docker на мини-ПК — в чем разница?
Архитектура (ARM64 против x86_64) влияет на совместимость образов. Производительность ниже на Pi (меньше операций ввода-вывода, меньше RAM, медленнее процессор). Команды Docker и файлы Compose идентичны. См. наше сравнение Pi и мини-ПК.
Должен ли я использовать Portainer или Dockge на Pi?
Оба работают на ARM64. Dockge легче (около 50 МБ RAM) и управляет файлами Docker Compose напрямую. Portainer более функционален (около 150 МБ RAM). На Pi с ограниченной памятью Dockge является лучшим выбором.