
Portainer: una UI web per Docker (e come si confronta con le alternative)
Cos'è Portainer, come installarlo in pochi minuti e come si confronta con Docker Desktop, Rancher, Lens e Dockge.
Cos’è Portainer
Portainer è una UI web per gestire ambienti Docker (e Kubernetes). Invece di ricordarsi docker ps, docker inspect e destreggiarsi tra file docker-compose.yml via SSH, hai una dashboard dove vedi container, immagini, volumi, reti e stack, e puoi agire su di essi con qualche click.
Non è solo “estetica” sopra la CLI: gestisce anche cose che a mano sono davvero scomode, come amministrare più host Docker da un unico posto, fare il deploy di stack da un repo Git, configurare RBAC per un team, oppure avere una vista live di log e utilizzo risorse senza dover fare SSH.
Esiste in due versioni:
- Portainer CE (Community Edition) — gratuita, open source, copre la stragrande maggioranza dei casi d’uso self-hosted.
- Portainer BE (Business Edition) — a pagamento, aggiunge cose come SSO/OAuth, RBAC più granulare e supporto.
Per un homelab o un piccolo team che gestisce qualche host Docker, la CE basta e avanza.
Installare Portainer
Far girare Portainer è, in pratica, solo un container Docker. La one-liner ufficiale:
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 \
--name portainer --restart=unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
-v /var/run/docker.sock:/var/run/docker.sockdà a Portainer accesso al daemon Docker locale — è così che gestisce l’host su cui gira.portainer_dataè un volume nominato che conserva la configurazione di Portainer stesso (utenti, endpoint, impostazioni) tra un aggiornamento e l’altro.- La porta
9443serve la UI in HTTPS (c’è anche un’opzione HTTP semplice sulla9000se termini il TLS altrove).
Una volta avviato, apri https://<tuo-host>:9443, crea l’utente admin al primo accesso, e sei dentro.
Se preferisci usare Compose (comodo se Portainer è uno dei tanti servizi nel tuo stack):
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: unless-stopped
ports:
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
volumes:
portainer_data:
Per gestire host Docker remoti, si fa il deploy del leggero Portainer Agent su ciascuno di essi e lo si collega dall’istanza Portainer principale — senza dover esporre il socket Docker direttamente in rete.
Ho scritto anche una guida separata su come aggiornare in sicurezza un’istanza Portainer esistente senza perdere container o volumi.
Cosa ottieni una volta avviato
- Gestione container: avvio/stop/restart, ispezione, exec in una shell, tail dei log, statistiche CPU/memoria — tutto dal browser.
- Stack: deploy di file
docker-compose.ymldirettamente dalla UI, incollando il file, oppure direttamente da un repo Git (con auto-redeploy opzionale al push, davvero comodo per setup self-hosted di piccole dimensioni). - Multi-environment: gestisci più host Docker (o cluster Kubernetes, o Docker Swarm) da un’unica istanza Portainer tramite l’agent.
- Template: deploy in un click per app comuni (Nginx, Postgres, WordPress, ecc.) dalla sezione App Templates.
- Controllo accessi: utenti, team e permessi per singola risorsa — utile nel momento in cui più di una persona tocca lo stesso host.
- Supporto Kubernetes: Portainer gestisce anche cluster K8s, anche se se Kubernetes è il tuo target principale, strumenti più specializzati tendono ad adattarsi meglio (approfondiamo sotto).
Confronto con le alternative
| Strumento | Ambito | Ideale per | Svantaggio |
|---|---|---|---|
| Portainer | Docker, Swarm, Kubernetes | Homelab self-hosted, team piccoli/medi, Docker multi-host | UI un po’ datata; supporto K8s secondario rispetto a Docker |
| Docker Desktop | Solo Docker, macchina locale | Sviluppo locale sul proprio laptop | Non adatto a host remoti/produzione; costi di licenza per aziende più grandi |
| Rancher | Kubernetes-first (anche un po’ Docker) | Team che gestiscono Kubernetes su larga scala | Pesante, eccessivo se non fai davvero K8s |
| Lens | Solo Kubernetes | Sviluppatori che vivono di kubectl/K8s ogni giorno | App desktop, non una UI web condivisa per il team |
| Dockge | Solo stack Docker Compose | Gestione stack Compose minimale e veloce | Nessun multi-host, nessun RBAC, feature set molto più ristretto |
| Yacht / CapRover | Docker (Yacht) / deploy in stile PaaS (CapRover) | Setup molto piccoli, hosting semplice di app | Community più piccole, meno feature rispetto a Portainer |
Se il tuo mondo è Docker puro su uno o qualche host e vuoi una vera UI web multi-utente senza adottare Kubernetes, Portainer è la scelta di default — è maturo, ben documentato, e la CE copre quasi tutto ciò di cui un piccolo team ha bisogno.
Se sei tutto su Kubernetes, Rancher (per la gestione di cluster/fleet) o Lens (per una vista locale orientata allo sviluppatore) ti serviranno meglio — il supporto K8s di Portainer c’è ma non è il suo punto di forza.
Se vuoi solo il minimo indispensabile per gestire un paio di stack Compose e niente di più, Dockge è più leggero e immediato, ma lo superi nel momento in cui ti serve più di un host o più di un utente.
E se lavori solo in locale sulla tua macchina di sviluppo, Docker Desktop (o Rancher Desktop / OrbStack su macOS) è più semplice che tirare su Portainer per qualcosa che non uscirà mai dal tuo laptop.
Se stai anche eseguendo WordPress su Docker, dai un’occhiata a wpdockerize, uno strumento che ho creato per generare l’intero stack in pochi secondi.
Buon divertimento! 😃

Co-Fondatore & CTO presso PAPION. Senior full-stack engineer specializzato in React, TypeScript, Node.js e sicurezza applicativa.