Portainer is a free, self-hosted web dashboard for Docker, Swarm, and Kubernetes: instead of memorizing docker run flags or SSH-ing in to check what’s running, you get a browser UI listing every container, image, volume, and network on a host, with one-click start, stop, or redeploy. It ships as a single container that talks to the Docker socket, or to remote hosts through its own lightweight agent.
License: Portainer Community Edition is licensed under the zlib License, confirmed directly from the LICENSE file in the portainer/portainer GitHub repo, not assumed from a badge, a short, permissive license close in spirit to MIT.
Quick facts: Official site portainer.io · GitHub portainer/portainer, 37,400+ stars · Current release 2.39.2 LTS · Docker image portainer/portainer-ce, Verified Publisher, 1B+ pulls; official docs pin the :lts tag.
Why bother with a GUI for Docker?
Docker’s CLI is fine until a homelab grows past a handful of containers and half the mental model lives in shell history. Portainer’s own GitHub page describes it as making Docker and Kubernetes management easy, and that’s mostly true in practice: glance at a host and see everything running on it, paste YAML into a text box to deploy a stack instead of SSH-ing in, or hand a less CLI-comfortable housemate a login instead of your terminal. It doesn’t replace Docker, just the CLI in front of it.
What Portainer actually manages
One Portainer Server instance can manage more than the host it runs on. Each Docker host, Swarm cluster, or Kubernetes cluster it connects to is an environment, and a single login can juggle several through a small Portainer Agent container on each remote host. Inside an environment, Portainer covers containers, images, volumes, networks, and Stacks, docker-compose files deployed straight from the browser. Community Edition also ships one-click templates for self-hosted apps.
Installing Portainer CE with Docker
The project publishes an official image on Docker Hub, and the Community Edition install docs give a one-command deploy. First, create the data volume:
docker volume create portainer_data
Then run the server container:
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
For anything meant to stick around, use Portainer’s own compose file:
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:lts
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
ports:
- 9443:9443
- 8000:8000 # Remove if you do not intend to use Edge Agents
volumes:
portainer_data:
name: portainer_data
networks:
default:
name: portainer_network
docker compose up -d
Either way, Portainer is reachable at https://your-server-ip:9443, over a self-signed certificate your browser will flag. Port 8000 only matters for the optional Edge Agent tunnel.
Mounting the Docker socket is not a small permission. Whoever controls Portainer’s container effectively controls the Docker host itself, since /var/run/docker.sock grants root-equivalent access to everything Docker can do. Don’t expose Portainer’s port straight to the internet: put it behind a reverse proxy with its own authentication, or keep it to the LAN and a VPN like Tailscale.
First run: setup token and the Environment Wizard
- Grab the setup token from the logs:
docker logs portainer, then find thesetup_token=line. CE requires it for the first admin account. - Open https://your-server-ip:9443, paste the token, and create the admin account. The username defaults to admin; the password needs at least 12 characters.
- The Environment Wizard launches automatically and detects the local Docker environment. Click Get Started, or Add Environments first for additional remote hosts through the Agent.
- From the dashboard, Containers, Images, Volumes, Networks, and Stacks are each one click away.
Hardware: Portainer runs light: a single Go binary, no separate database to provision, comfortable on a Raspberry Pi or the smallest homelab VPS. The load it adds is the dashboard itself, not the containers it manages. Our homelab setup guide for beginners covers the hardware trade-offs.
Homelab use cases
The obvious first move is putting every existing container in one dashboard instead of remembering which SSH session goes with which box: Ollama, Open WebUI, or n8n‘s workflow containers each get a status view and a restart button without a terminal. Stacks also turn Portainer into a deploy tool, paste a docker-compose.yaml and it comes up without opening a shell. It matters most once a homelab spans more than one box: a NAS and a mini PC can both report to one login through the Agent instead of two separate consoles. Pair it with Uptime Kuma watching the same containers from the outside, one manages them, the other flags when one goes down.
Portainer CE vs Business Edition
Portainer’s marketing nudges most visitors toward Business Edition, free for up to three nodes but still requiring an account and license key. Community Edition needs none of that, at the cost of features the company reserves for registered users:
| Category | Community Edition | Business Edition |
|---|---|---|
| Cost | Free, open source | Free ≤3 nodes, paid beyond |
| Account / license key | None required | Required |
| RBAC, LDAP / OAuth / SSO | Not included | Included |
| GitOps auto-deploy from Git | Not included | Included |
Portainer’s own GitHub README is upfront about the split: Business Edition “builds on the open-source base and includes a range of advanced features and functions (like RBAC and Support) that are specific to the needs of business users.”
Portainer: pros and cons
- Free and open source under the zlib License; Community Edition needs no account or license key
- One dashboard for Docker, Swarm, and Kubernetes, across several hosts through the Agent
- Stacks turn docker-compose deploys into a paste-and-click operation, no shell required
- Requires mounting the Docker socket: root-equivalent host access, not a casual decision
- RBAC, SSO, and GitOps auto-deploy are Business Edition only
- Kubernetes support is less polished than Docker’s
Alternatives worth knowing about
Dockge is the closest thing to a spiritual rival: a lighter, docker-compose-only manager from the same developer behind Uptime Kuma, whose README says its creator found Portainer’s Stack deployments occasionally unreliable. Its own FAQ admits it isn’t a full replacement: no single-container management, no volumes or networks browser.
Rancher, from SUSE, solves a different problem: Kubernetes-first cluster governance, not a single Docker host, and it’s the heavier tool of the two.
FAQ
Is Portainer free?
Community Edition is, fully, under the zlib License with no account required. Business Edition is free for up to three nodes too, but needs an account and license key; beyond that, it’s paid.
What port does Portainer use by default?
9443, for the HTTPS web UI on a self-signed certificate. Port 8000 is also exposed by default, for the optional Edge Agent tunnel, and can be dropped if unused.
Does Portainer replace Docker Compose?
No, it sits on top of it. Stacks in Portainer are docker-compose files deployed and managed through the UI instead of a terminal; the compose syntax underneath doesn’t change.
Portainer earns its spot in most homelabs the way a good file manager earns its spot on a desktop: it doesn’t do anything the CLI couldn’t, just fast enough that people actually do it. Our homelab setup guide for beginners covers the Docker basics it depends on, and if n8n, Ollama, or Open WebUI are already running, Portainer is a five-minute way to stop SSH-ing in to check on them. The Docker & Containers category rounds out the rest.