DockerHomeLab
management

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.

By Editorial · · 8 min read

The Docker CLI is powerful, but there are times when a visual interface makes life easier — seeing all your containers at a glance, managing volumes, pulling new images, inspecting logs without memorizing flags. Portainer CE gives you all of this through a browser, and it runs as a Docker container itself.

This guide covers a clean Portainer installation, the most useful features, and how to use it alongside your existing Compose stacks.

What Portainer CE Is (and Isn’t)

Portainer CE (Community Edition) is a free, open-source Docker management interface. It runs locally and connects to your Docker daemon. You access it through a browser at https://your-server:9443.

It is not a cloud service and does not require an account. All data stays on your server.

Portainer has a paid tier (Business Edition) with additional features like edge agents and RBAC. CE is sufficient for homelab use.

Installation

Standalone (No Traefik)

If you just want Portainer accessible via its built-in port:

mkdir -p ~/services/portainer
cd ~/services/portainer

Create docker-compose.yml:

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    ports:
      - "8000:8000"
      - "9443:9443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

Start it:

docker compose up -d

Access Portainer at https://your-server-ip:9443. Accept the self-signed certificate warning on first visit.

If you have Traefik set up for automatic HTTPS, add labels to the Compose file instead:

services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portainer.rule=Host(`portainer.yourdomain.com`)"
      - "traefik.http.routers.portainer.entrypoints=websecure"
      - "traefik.http.routers.portainer.tls.certresolver=letsencrypt"
      - "traefik.http.services.portainer.loadbalancer.server.port=9000"
    networks:
      - traefik-proxy

volumes:
  portainer_data:

networks:
  traefik-proxy:
    external: true

Note: Portainer listens on port 9000 (HTTP) and 9443 (HTTPS). Behind Traefik, point to port 9000 and let Traefik handle TLS.

First-Time Setup

On first access, Portainer prompts you to create an admin password. Set a strong one — Portainer has full access to your Docker daemon.

After login, you’re presented with environment selection. Choose Docker (local) to manage the Docker daemon on the same host.

The Dashboard

The home screen shows your environments. Click the local Docker environment to enter the dashboard.

The left sidebar shows:

Managing Compose Stacks

Portainer’s Stacks view is the most useful feature for homelab use. It shows your running Compose stacks and lets you:

Deploying a New Stack from the UI

  1. Go to Stacks → Add stack
  2. Choose Web editor
  3. Paste your docker-compose.yml content
  4. Click Deploy the stack

Portainer starts the containers and shows you the result. Useful for one-off deployments without SSH.

Importing an Existing Stack

If you started containers with docker compose up -d on the CLI, Portainer calls these “orphaned containers” — it didn’t create them, so they’re listed under Containers but not under Stacks.

To bring them under Portainer management:

  1. Stop the stack via CLI: docker compose down
  2. Create a new stack in Portainer with the same Compose content
  3. Deploy it

Going forward, manage it through Portainer.

Viewing Logs

Click any container name to see its details page. The Logs tab shows container logs with optional real-time following — the same as docker logs -f, but in the browser.

You can filter by keyword, download the log, and control how many lines to show.

Updating Containers

When a new image version is available:

  1. Go to Containers → select the container
  2. Click Recreate
  3. Check Pull latest image
  4. Click Recreate

Portainer stops the container, pulls the new image, and starts a fresh container with the same configuration. Your volumes (data) are preserved.

For Compose stacks, use Stacks → select stack → Pull and redeploy.

Exec Console

The Console tab on a container detail page opens an interactive terminal in the container — same as docker exec -it container-name /bin/sh.

Useful for:

Monitoring Resource Usage

The Stats tab shows real-time CPU and memory usage for a container. Not as detailed as Grafana or cAdvisor, but sufficient for quick checks.

For a fleet-level view, the Containers list shows CPU and memory columns for all containers at once.

When to Use CLI vs Portainer

Portainer is great for:

The CLI is better for:

Use both. They’re not mutually exclusive, and they see the same Docker state.

#portainer #docker #docker-compose #gui #management #homelab

Related

Comments