Managing multiple Docker services on a home server can quickly become overwhelming if you rely only on the command line. In this guide, we’ll walk through how to use Portainer—an intuitive web-based management interface—to take control of your Docker containers, images, volumes, and networks. Whether you’re hosting Pi-hole, Home Assistant, or your own embedded dashboards, Portainer makes management easier and more efficient.
Why Manage Docker with Portainer?
Docker is a fantastic tool for running lightweight, isolated services on a home server, but once you start hosting more than a few services, the docker ps
, docker logs
, and docker exec
commands become cumbersome.
Portainer provides a user-friendly web UI for Docker and Docker Compose. It allows you to:
- Monitor container status and resource usage
- Deploy and stop containers with one click
- Set up and manage Docker volumes and networks
- Pull and update container images
- View container logs in your browser
- Deploy full stacks using Compose files
- Manage access with user authentication
If you’re running a personal home lab or embedded development environment, Portainer gives you full visibility and control over your infrastructure with minimal effort.
Prerequisites
Before we begin, make sure your home server:
- Runs Ubuntu Server (or any Linux distro with Docker installed)
- Has Docker and Docker Compose already set up
- Is connected to your home network with a static IP
- Can be accessed via SSH or physically
If you're already running multiple Docker services, Portainer can manage them right away—no need to reconfigure.
Installing Portainer on Your Home Server
Follow these steps to install Portainer CE (Community Edition) using Docker.
Step 1: Create a Docker volume for Portainer
docker volume create portainer_data
This volume stores all Portainer configurations, user data, and settings.
Step 2: Run the Portainer container
docker run -d \
--name=portainer \
--restart=unless-stopped \
-p 8000:8000 \
-p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce
- Port 9000: Portainer web interface
- Port 8000: Portainer agent communication port
Now open a browser and navigate to:
http://<YOUR_SERVER_IP>:9000
You will be prompted to set an admin password and connect to the local Docker environment.
Exploring the Portainer Dashboard
After logging in, you'll land on the home screen. Click on the "Local" Docker environment to access your containers and services.
Features include:
Containers
- View running/stopped containers
- Start, stop, restart, or remove containers
- See logs in real-time
- Enter the container terminal (exec)
- Monitor CPU and RAM usage
Images
- See all pulled images
- Delete unused ones
- Pull new images from Docker Hub or a private registry
Volumes
- Create and manage named volumes
- Inspect or delete old data volumes
Networks
- View existing networks (bridge, host, custom)
- Inspect containers in each network
Stacks (Compose)
- Deploy full stacks using
docker-compose.yml
- Restart or stop all services at once
- Monitor and manage multi-container applications
Use Case: Deploying a Service Stack via Portainer
Let's deploy Pi-hole and Home Assistant using Docker Compose and manage them in Portainer.
Step 1: Prepare your docker-compose.yml file
Create a folder on your server:
mkdir ~/home-stack && cd ~/home-stack
Add the following content to docker-compose.yml
:
services:
pihole:
image: pihole/pihole
container_name: pihole
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80"
environment:
- WEBPASSWORD=changeme
- TZ=Australia/Sydney
volumes:
- ./pihole:/etc/pihole
restart: unless-stopped
homeassistant:
image: ghcr.io/home-assistant/home-assistant:stable
container_name: homeassistant
network_mode: host
volumes:
- ./hass_config:/config
restart: unless-stopped
Step 2: Deploy the stack using Portainer
- Go to the "Stacks" section in Portainer
- Click "Add stack"
- Name the stack, for example
home-stack
- Paste your Compose file contents into the editor
- Click "Deploy the stack"
Your services will now appear in the container list and can be managed via the stack view.
Keep Services Updated Automatically with Watchtower
Watchtower checks for newer versions of images and automatically restarts your containers.
Install Watchtower:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
This way, your services stay up-to-date without manual intervention.
Accessing Services with Domain Names
If you’re running multiple services (e.g., Pi-hole, Grafana, Node-RED), remembering port numbers becomes tedious.
Use a reverse proxy like Nginx Proxy Manager or Traefik to:
- Route services to human-readable URLs
- Serve content with HTTPS using Let's Encrypt
- Simplify access for family or colleagues
Example:
http://pihole.local
https://homeassistant.mydomain.com
Add Authentication and Access Control
Portainer supports:
- Admin and standard users
- Environment-based access
- Role-based permissions (Business Edition)
You can also enable OAuth, LDAP, or other auth integrations to secure access to your home server.
Auto-Start Services on Boot
Use the restart: unless-stopped
option in Docker Compose to auto-start containers. You can also use systemd
to ensure services are restored after a reboot.
Example systemd
unit:
[Unit]
Description=Start Docker Stack
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/home/youruser/home-stack
ExecStart=/usr/local/bin/docker compose up -d
ExecStop=/usr/local/bin/docker compose down
Restart=always
[Install]
WantedBy=multi-user.target
Enable it:
sudo systemctl enable docker-home-stack.service
Backup Strategy for Portainer and Docker Data
To protect your services and settings:
What to Backup | How |
---|---|
Portainer configuration | Volume: portainer_data |
Compose files | Save YAML files |
Volume-mounted directories | Use rsync , duplicati , or restic |
Automate your backups with a cron job or a backup container.
Bonus: Add Monitoring
For observability, consider:
- Grafana + Prometheus: for performance metrics
- Uptime Kuma: for service uptime monitoring
Both are Docker-based and integrate well with Portainer stacks.
Final Thoughts
Managing Docker containers via the command line works, but once your home server starts hosting more services, you need a better interface. Portainer simplifies container management, improves visibility, and helps you stay in control with minimal effort.
With Portainer, you can:
- Monitor and manage all your services
- Deploy or stop applications easily
- Keep services updated and secure
- Organize your infrastructure like a pro
If you’re hosting embedded project dashboards, OTA servers, or self-hosted tools, Portainer is an essential part of your home lab stack.