Best Docker Compose Apps for Your Homelab in 2026
The 20 best services to run in Docker on your home server, with ready-to-use Compose snippets and honest assessments of setup complexity and ongoing maintenance.
Docker Compose is the entry point for most homelab self-hosting. You write a YAML file, run docker compose up -d, and you have a service running. The hard part is knowing which services are worth your time.
This list covers 20 services that consistently earn their place on home servers — services that are actively maintained, have good Docker images, and provide real value compared to their cloud alternatives. Each entry includes a complexity rating and a minimal Compose snippet to get started.
Password Management
Vaultwarden
Complexity: Low | Replaces: 1Password, Bitwarden cloud
Vaultwarden is a Bitwarden-compatible server written in Rust. Lightweight enough to run on a Raspberry Pi. The official Bitwarden apps connect to it seamlessly.
services:
vaultwarden:
image: vaultwarden/server:latest
container_name: vaultwarden
restart: unless-stopped
volumes:
- ./data:/data
environment:
- WEBSOCKET_ENABLED=true
labels:
# Traefik labels if you're using it
- "traefik.enable=true"
- "traefik.http.routers.vw.rule=Host(`vault.yourdomain.com`)"
- "traefik.http.routers.vw.entrypoints=websecure"
- "traefik.http.routers.vw.tls.certresolver=letsencrypt"
Requires HTTPS for the browser extension to work. Set up a reverse proxy first.
Media
Jellyfin
Complexity: Medium | Replaces: Plex, Netflix (for your own media library)
Jellyfin is a fully open-source media server with no paid tiers. Streams movies, TV, music, and photos to any device. Hardware transcoding requires extra configuration but dramatically reduces CPU load.
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
environment:
- JELLYFIN_PublishedServerUrl=https://media.yourdomain.com
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media:/media:ro # mount your media library
devices:
- /dev/dri:/dev/dri # for Intel/AMD GPU transcoding
Immich
Complexity: Medium-High | Replaces: Google Photos
Immich is the best self-hosted Google Photos alternative available. Mobile apps for iOS and Android with automatic backup. AI-powered face recognition and object tagging runs locally.
Immich uses multiple containers (server, microservices, machine learning, database, Redis). Use the official Compose file from the Immich documentation — it’s maintained and updated with each release.
File Storage and Sync
Nextcloud
Complexity: Medium-High | Replaces: Google Drive, Dropbox, Google Docs
Full cloud storage suite with file sync, collaborative editing, calendar, contacts, and hundreds of apps. Heavier than most homelab services but worth it if you want the full Google Workspace replacement.
Use the official Nextcloud AIO (All-in-One) image for the easiest setup — it handles the database and caching configuration automatically.
Syncthing
Complexity: Low | Replaces: Dropbox (sync only, no server required)
Decentralized file sync between devices. No server required — Syncthing on your home server plus Syncthing on your laptop syncs files directly. Simpler than Nextcloud if you just need sync without the web interface.
services:
syncthing:
image: syncthing/syncthing:latest
container_name: syncthing
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
volumes:
- ./config:/var/syncthing
- /home/user/sync:/sync
ports:
- "8384:8384"
- "22000:22000/tcp"
- "22000:22000/udp"
Networking
Pi-hole
Complexity: Low | Replaces: No direct equivalent (DNS-level ad blocking)
Network-wide ad blocking via DNS. Every device on your network benefits without any client-side configuration. Sets up in 5 minutes.
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
environment:
- WEBPASSWORD=changethis
- TZ=America/New_York
volumes:
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80"
cap_add:
- NET_ADMIN
Nginx Proxy Manager
Complexity: Low | Replaces: Traefik (simpler, UI-driven)
A GUI for Nginx reverse proxy with automatic Let’s Encrypt certificates. If Traefik feels complex, NPM gives you the same outcome through a web interface with no YAML configuration.
services:
npm:
image: jc21/nginx-proxy-manager:latest
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "81:81" # web UI
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Home Automation
Home Assistant
Complexity: Medium | Replaces: SmartThings, HomePod (as hub)
The de facto standard for home automation. Supports thousands of integrations: smart lights, thermostats, sensors, presence detection. The community is large and the documentation is excellent.
services:
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
restart: unless-stopped
privileged: true
network_mode: host # required for device discovery
volumes:
- ./config:/config
- /etc/localtime:/etc/localtime:ro
network_mode: host is required for proper local device discovery. This means it doesn’t play well with Traefik — access it directly via its port (8123 by default).
Monitoring
Uptime Kuma
Complexity: Very Low | Replaces: UptimeRobot, Better Uptime
Checks whether your services are up and sends alerts when they go down. Dead simple to set up, covers HTTP, TCP, DNS, and ping checks.
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "3001:3001"
Grafana + Prometheus
Complexity: High | Replaces: Datadog, New Relic (for infrastructure metrics)
Full metrics stack. Prometheus scrapes metrics from your services and infrastructure; Grafana visualizes them in dashboards. High setup effort, but unbeatable visibility once it’s running.
Use a pre-built stack like dockprom from the community — it includes Prometheus, Grafana, cAdvisor (container metrics), and Node Exporter (host metrics) in one Compose file.
Downloads
qBittorrent
Complexity: Low | Replaces: Desktop torrent client
Web-accessible torrent client. Useful for automated download stacks when paired with Sonarr/Radarr.
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- WEBUI_PORT=8080
volumes:
- ./config:/config
- /mnt/downloads:/downloads
ports:
- "8080:8080"
- "6881:6881"
- "6881:6881/udp"
Sonarr / Radarr
Complexity: Medium | Replaces: Manual TV/movie tracking
Automated TV show and movie download management. Integrates with qBittorrent (or other clients) and Jellyfin for a fully automated media pipeline. The *arr stack (Sonarr, Radarr, Prowlarr, Readarr) covers most media types.
Utilities
Vaultwarden (already listed)
Dashdot / Homer / Homarr
Complexity: Very Low | Dashboard for your homelab services
A homepage for your self-hosted services — links to all your URLs in one place. Homer is the most popular, Homarr has a more modern UI with Docker integration.
services:
homarr:
image: ghcr.io/ajnart/homarr:latest
container_name: homarr
restart: unless-stopped
volumes:
- ./config:/app/data/configs
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "7575:7575"
Paperless-ngx
Complexity: Medium | Replaces: Physical filing cabinets + document scanning subscriptions
Scans, OCRs, and organizes documents. Upload a PDF, and it’s searchable by content. Invaluable for going paperless with tax documents, contracts, and receipts.
Mealie
Complexity: Low | Replaces: Recipe apps
Self-hosted recipe manager. Import recipes from URLs automatically, build meal plans, generate shopping lists.
What to Run First
If this is your first homelab, start with:
- Pi-hole — instant network-wide benefit, very simple
- Vaultwarden + Traefik — teaches you reverse proxy, gives you a password manager
- Uptime Kuma — keeps you informed when other services go down
Add Jellyfin and Home Assistant once you’re comfortable with the basics. Save the monitoring stack (Grafana/Prometheus) until you have enough services running to justify it.
Related
Traefik + Docker Compose: Automatic HTTPS for Every Service
Set up Traefik as a reverse proxy with Docker Compose and get automatic Let's Encrypt HTTPS certificates for every service on your homelab.
Portainer: The Best GUI for Managing Docker on Your Homelab
Install and configure Portainer CE to manage Docker containers, images, networks, and volumes through a browser-based dashboard — no command line required.
Docker Compose Networking: Bridge, Host, and Custom Networks Explained
Understand Docker Compose networking — how containers find each other, how to isolate services, and how to expose only what needs exposing.