Содержание
С помощью Docker вы можете развернуть свою контейнеризированную среду, используя простой код Docker Compose, и даже объединять эти приложения в стеки, которые можно запускать и останавливать по желанию. Давайте рассмотрим 10 проектов на Docker, которые можно реализовать за выходные и которые действительно пригодятся.
1. Gitea для самохостинга репозиториев Git
Собственный репозиторий кода — это отличный способ начать изучать DevOps и инфраструктуру как код. Это поможет быстро освоить команды Git и рабочие процессы DevOps. Конечно, следующий вопрос — какое решение выбрать для хостинга? Здесь Gitea быстро набирает популярность, поскольку она легковесна и почти идентична GitHub, с которым многие уже знакомы. Лично я предпочитаю GitLab, но если вы ищете Docker-решение для локального репозитория своего кода, Gitea — отличный вариант для начала.
Вы можете использовать пример Docker Compose ниже, чтобы начать работу с Gitea.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
version: '3' services: gitea: image: gitea/gitea:latest container_name: gitea environment: - USER_UID=1000 - USER_GID=1000 volumes: - ./gitea:/data ports: - "3000:3000" - "222:22" restart: always |
2. Netdata для мониторинга
Netdata — одно из самых простых решений для мониторинга вашей домашней лаборатории. Она легко устанавливается с помощью легковесного агента на Linux и Windows, а также собирает метрики Docker-контейнеров и Kubernetes. Мне нравится, что это простой контейнер, который можно быстро развернуть.
Пример команды Docker run для Netdata (укажите свой токен и ID комнаты):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
docker run -d --name=netdata \ --pid=host \ --network=host \ -v netdataconfig:/etc/netdata \ -v netdatalib:/var/lib/netdata \ -v netdatacache:/var/cache/netdata \ -v /:/host/root:ro,rslave \ -v /etc/passwd:/host/etc/passwd:ro \ -v /etc/group:/host/etc/group:ro \ -v /etc/localtime:/etc/localtime:ro \ -v /proc:/host/proc:ro \ -v /sys:/host/sys:ro \ -v /etc/os-release:/host/etc/os-release:ro \ -v /var/log:/host/var/log:ro \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ -v /run/dbus:/run/dbus:ro \ --restart unless-stopped \ --cap-add SYS_PTRACE \ --cap-add SYS_ADMIN \ --security-opt apparmor=unconfined \ -e NETDATA_CLAIM_TOKEN= \ netdata/netdata:stable |
3. Nginx Proxy Manager для SSL на всём
Один из лучших проектов, которые можно развернуть, — это Nginx Proxy Manager. Я рекомендую его всем, кто начинает работать с домашними лабораториями, так как он предоставляет простой GUI для управления SSL-сертификатами Docker-контейнеров и позволяет легко получать сертификаты Lets Encrypt. Наличие SSL на контейнерах с веб-интерфейсами делает всё более безопасным и совместимым с другими решениями, которые могут плохо работать с самоподписанными сертификатами.
Пример Docker Compose для развёртывания:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
version: '3' services: npm: image: jc21/nginx-proxy-manager:latest container_name: npm ports: - "80:80" - "81:81" - "443:443" volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt restart: always |
4. Vaultwarden для самохоста менеджера паролей
Если вам нужен менеджер паролей, где вы контролируете все данные и никто другой не имеет доступа к вашим секретам, самохостинг — отличное решение. Vaultwarden — один из самых известных менеджеров паролей, зарекомендовавший себя как безопасный и надёжный.
Пример Docker Compose для Vaultwarden:
|
1 2 3 4 5 6 7 8 9 10 11 |
version: '3' services: vaultwarden: image: vaultwarden/server:latest container_name: vaultwarden volumes: - ./vw-data:/data ports: - "8080:80" restart: always |
5. Watchtower для автоматического обновления контейнеров
Если вам нужно решение для управления жизненным циклом Docker-контейнеров, то это Watchtower. Watchtower проверяет ваши контейнеры на наличие обновлений по расписанию. Если обновление найдено, он останавливает контейнер, загружает новый образ и перезапускает контейнер с теми же настройками. Для Docker Swarm есть аналог — Shepherd, который делает то же самое для сервисов.
Пример Docker Compose для Watchtower (параметр cleanup удаляет старые образы):
|
1 2 3 4 5 6 7 8 9 10 11 12 |
version: '3' services: watchtower: image: containrrr/watchtower container_name: watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_POLL_INTERVAL=300 restart: always |
6. Dozzle для анализа логов контейнеров
Dozzle — это инструмент, который я недавно открыл для себя. Он позволяет быстро просматривать логи контейнеров на разных хостах без необходимости входить на серверы и вручную запускать docker logs.
Пример Docker Compose для Dozzle:
|
1 2 3 4 5 6 7 8 9 10 11 |
version: '3' services: dozzle: image: amir20/dozzle:latest container_name: dozzle ports: - "8888:8080" volumes: - /var/run/docker.sock:/var/run/docker.sock restart: always |
7. Portainer — лучший GUI для Docker
Если вам нужен лучший инструмент для управления Docker-контейнерами, то это Portainer. Есть и другие бесплатные решения, но ни одно из них не сравнится с Portainer по функциональности и удобству. Разверните его в рамках выходного проекта, и вы сразу оцените преимущества удобного управления.
Portainer также отлично подходит для работы с Docker Swarm, делая это решение более удобным.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
version: '3' services: portainer: image: portainer/portainer-ce:latest container_name: portainer ports: - "9443:9443" volumes: - /var/run/docker.sock:/var/run/docker.sock - ./portainer-data:/data restart: always |
8. OpenWebUI + Ollama для самохостинга AI
Эта пара решений — то, с чем я экспериментировал последние месяцы. Самохостинг собственного AI-сервера — это потрясающе: не нужно беспокоиться о стоимости API у крупных облачных провайдеров, и вы контролируете свои данные.
Развернуть собственный AI проще, чем кажется. С OpenWebUI и Ollama вы получите опыт, похожий на ChatGPT, но в своей домашней лаборатории.
Пример Docker Compose для развёртывания AI:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
version: '3.8' services: ollama: image: ollama/ollama container_name: ollama volumes: - ollama:/root/.ollama ports: - "11434:11434" restart: unless-stopped openwebui: image: ghcr.io/open-webui/open-webui:main container_name: openwebui depends_on: - ollama environment: - OLLAMA_BASE_URL=http://ollama:11434 ports: - "3000:3000" volumes: - openwebui:/app/backend/data restart: unless-stopped volumes: ollama: openwebui: |
9. Home Assistant для умного дома
Home Assistant — это стандарт де-факто для самохоста решений умного дома. Это комплексная система управления всеми устройствами умного дома с единым интерфейсом.
Пример Docker Compose для Home Assistant (с дополнительными контейнерами для пересылки сообщений):
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
version: '3.8' services: homeassistant: image: ghcr.io/home-assistant/home-assistant:stable container_name: homeassistant user: "1001:1001" restart: unless-stopped network_mode: "service:proxy" # attach to Traefik sidecar for SSL depends_on: - mosquitto volumes: - /srv/homeassistant/config:/config:rw - homeassistant_db:/config/home-assistant_v2.db environment: - TZ=America/Chicago secrets: - api_key healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8123/api/health || exit 1"] interval: 1m timeout: 10s retries: 3 cap_drop: - ALL cap_add: - CHOWN - SETUID - SETGID mosquitto: image: eclipse-mosquitto:latest container_name: mosquitto restart: unless-stopped networks: homenet: volumes: - /srv/mosquitto/config:/mosquitto/config:ro - /srv/mosquitto/data:/mosquitto/data - /srv/mosquitto/log:/mosquitto/log ports: - "1883:1883" influxdb: image: influxdb:2.6 container_name: influxdb restart: unless-stopped networks: homenet: volumes: - influxdb_data:/var/lib/influxdb2 environment: - INFLUXDB_ADMIN_USER=admin - INFLUXDB_ADMIN_PASSWORD_FILE=/run/secrets/influxdb_admin_password secrets: - influxdb_admin_password ports: - "8086:8086" grafana: image: grafana/grafana:9.5 container_name: grafana restart: unless-stopped networks: homenet: volumes: - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD_FILE=/run/secrets/grafana_admin_password secrets: - grafana_admin_password ports: - "3000:3000" networks: homenet: driver: macvlan driver_opts: parent: eth0 ipam: config: - subnet: 192.168.1.0/24 gateway: 192.168.1.1 volumes: homeassistant_db: influxdb_data: grafana_data: |
10. N8N для автоматизации рабочих процессов
n8n — один из самых крутых инструментов автоматизации. Он позволяет легко автоматизировать рабочие процессы, избавляя от рутины. Это как ваш собственный Zapier, который работает с практически любым API. Вы можете использовать его для автоматизации обновлений Git, email-уведомлений, перемещения файлов или даже триггеров Home Assistant.
Базовый Docker Compose для n8n:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
version: '3' services: n8n: image: n8nio/n8n:latest container_name: n8n ports: - "5678:5678" environment: - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=admin - N8N_BASIC_AUTH_PASSWORD=changeme - TZ=America/New_York volumes: - ./n8n-data:/home/node/.n8n restart: always |
Заключение
Развернув эти проекты, вы узнаете много нового о контейнеризации, самохостинге и управлении современной инфраструктурой. Напишите в комментариях, используете ли вы какие-то из этих решений или можете порекомендовать другие.











