Manage Your Home Server Docker Services with Portainer: A Complete Guide

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

  1. Go to the "Stacks" section in Portainer
  2. Click "Add stack"
  3. Name the stack, for example home-stack
  4. Paste your Compose file contents into the editor
  5. 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.