Best Docker Images for Raspberry Pi

A curated list of the best Docker images that run on Raspberry Pi. Covers media servers, ad blockers, dashboards, and more — all ARM-compatible.

Andreas · April 12, 2026 · 7 min read

Introduction

Docker unlocks powerful services on Raspberry Pi—from ad blocking to file sync to monitoring. This guide covers 10+ production-tested images optimized for ARM architecture, with real command examples and resource usage. Each is verified to run on Pi 4 and Pi 5 without excessive memory or CPU drain.

Prerequisites

  • Raspberry Pi 4 (2GB+ RAM) or Pi 5 recommended
  • 32GB+ microSD or USB SSD (SSD strongly preferred for heavy workloads)
  • Docker installed: curl -fsSL https://get.docker.com | sh
  • sudo usermod -aG docker $USER (add user to docker group)

Networking & DNS

Pi-hole (Ad Blocker + DHCP)

Blocks ads and trackers at network level. Replaces your router's DNS.

docker run -d \
  --name pihole \
  -p 53:53/tcp -p 53:53/udp \
  -p 80:80 \
  -e TZ=UTC \
  -e WEBPASSWORD=yourpassword \
  -v pihole_config:/etc/pihole \
  --restart=unless-stopped \
  pihole/pihole:latest

RAM usage: ~60 MB
Access: http://pi-ip/admin (default user: admin)
Notes: Requires port 53 for DNS. Set router's DHCP DNS to your Pi's IP.

WireGuard (VPN)

Lightweight VPN for secure remote access to your homelab.

docker run -d \
  --name wireguard \
  -p 51820:51820/udp \
  -e PUID=1000 \
  -e PGID=1000 \
  -v wireguard_config:/config \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart=unless-stopped \
  linuxserver/wireguard:latest

RAM usage: ~5 MB
Config location: /docker/wireguard_config/wg_confs (extract QR codes from here)

Traefik (Reverse Proxy)

Single entry point for multiple services with auto-HTTPS.

docker run -d \
  --name traefik \
  -p 80:80 \
  -p 443:443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v traefik_config:/etc/traefik \
  --restart=unless-stopped \
  traefik:v2.11

RAM usage: ~40 MB
Use with: Docker labels on other containers for auto-routing

Media & File Sync

Jellyfin (Media Server)

Self-hosted Netflix alternative. Stream films, shows, music from your Pi.

docker run -d \
  --name jellyfin \
  -p 8096:8096 \
  -e TZ=UTC \
  -v jellyfin_config:/config \
  -v jellyfin_cache:/cache \
  -v /media/films:/media/films:ro \
  --restart=unless-stopped \
  jellyfin/jellyfin:latest

RAM usage: ~180 MB (idle), ~400 MB (streaming)
Transcoding: Hardware acceleration available on Pi 4/5 via /dev/video10
Access: http://pi-ip:8096

Nextcloud (File Sync & Collaboration)

Personal cloud storage with sync clients, calendar, contacts.

docker run -d \
  --name nextcloud \
  -p 8080:80 \
  -e NEXTCLOUD_ADMIN_USER=admin \
  -e NEXTCLOUD_ADMIN_PASSWORD=changeme \
  -v nextcloud_data:/var/www/html \
  --restart=unless-stopped \
  nextcloud:27-apache

RAM usage: ~150 MB
Database: Use SQLite for single-Pi or MariaDB for production
SSD required: Heavy disk I/O during syncs

Productivity & Password Management

Vaultwarden (Bitwarden Server)

Self-hosted password manager. Lighter than full Bitwarden.

docker run -d \
  --name vaultwarden \
  -p 8000:80 \
  -e DOMAIN=https://vault.example.com \
  -e SIGNUPS_ALLOWED=false \
  -v vaultwarden_data:/data \
  --restart=unless-stopped \
  vaultwarden/server:latest

RAM usage: ~80 MB
Data: SQLite file stored in /data volume

Monitoring & System Health

Uptime Kuma (Status Page & Monitoring)

Monitor websites and services, public status page.

docker run -d \
  --name uptime-kuma \
  -p 3001:3001 \
  -v kuma_data:/app/data \
  --restart=unless-stopped \
  louislam/uptime-kuma:1

RAM usage: ~80 MB
Access: http://pi-ip:3001

Netdata (System Metrics)

Real-time CPU, RAM, disk, network monitoring dashboard.

docker run -d \
  --name netdata \
  -p 19999:19999 \
  -v /proc:/host/proc:ro \
  -v /sys:/host/sys:ro \
  -v /etc/os-release:/etc/os-release:ro \
  --cap-add=SYS_PTRACE \
  --security-opt apparmor=unconfined \
  --restart=unless-stopped \
  netdata/netdata:latest

RAM usage: ~70 MB
Access: http://pi-ip:19999

Development & Version Control

Gitea (Git Server)

Self-hosted GitHub alternative. Minimal resource footprint.

docker run -d \
  --name gitea \
  -p 3000:3000 \
  -p 222:22 \
  -v gitea_data:/data \
  -e DB_TYPE=sqlite3 \
  --restart=unless-stopped \
  gitea/gitea:latest

RAM usage: ~100 MB
Access: http://pi-ip:3000
SSH: Change port 22 to 222 for external access

Portainer (Docker Management UI)

Web UI for managing containers, images, volumes.

docker run -d \
  --name portainer \
  -p 9000:9000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  --restart=unless-stopped \
  portainer/portainer-ce:latest

RAM usage: ~60 MB
Access: http://pi-ip:9000

Quick Comparison Table

Service Purpose RAM ARM Support Docker Hub
Pi-hole DNS/Ad Block 60 MB Native ARM pihole/pihole
WireGuard VPN 5 MB Native ARM linuxserver/wireguard
Traefik Reverse Proxy 40 MB Multi-arch traefik
Jellyfin Media Server 180-400 MB Native ARM jellyfin/jellyfin
Nextcloud File Sync 150 MB Multi-arch nextcloud
Vaultwarden Password Manager 80 MB Native ARM vaultwarden/server
Uptime Kuma Monitoring 80 MB Multi-arch louislam/uptime-kuma
Netdata System Metrics 70 MB Multi-arch netdata/netdata
Gitea Git Server 100 MB Native ARM gitea/gitea
Portainer Container UI 60 MB Multi-arch portainer/portainer-ce

Troubleshooting

Image won't start on Pi

Check architecture compatibility: docker inspect linuxserver/wireguard | grep -i arch. Should show arm or arm64v8.

Out of memory

Use docker stats to monitor RAM per container. Reduce --memory limits or consider removing heavy services (Nextcloud, Jellyfin with transcoding).

Port already in use

Kill conflicting container: docker ps | grep :80 then docker kill <name> or change port mapping (-p 8080:80 instead of -p 80:80).

Summary

Run these images in Docker Compose stacks for cleaner management. Prioritize SSD storage—Pi-hole and Gitea are lightweight and ideal for learning, while Jellyfin with transcoding and Nextcloud heavy-sync demand better I/O. Start small, monitor with Netdata, and scale up your homelab one service at a time.

Comments