Portainer CE: Guida all'installazione con Docker Compose
Portainer è una piattaforma di gestione per container Docker e Kubernetes che semplifica l'orchestrazione e l'amministrazione dei container attraverso un'interfaccia grafica intuitiva.
Grazie a Portainer, anche chi ha poca esperienza con la riga di comando può gestire container, volumi, network e stack con pochi clic.
Requisiti:
- Docker e Docker Compose;
- Dominio (opzionale);
- Pangolin (opzionale);
Iniziamo...
Portainer è composto da due elementi, il Server, l'Agente. Entrambi gli elementi funzionano come contenitori Docker leggeri su un motore Docker.
Assicuriamoci di aver installato Docker e Docker compose, verifichiamo l'installazione da terminale dando questo comando:
docker -v
Riceveremo una risposta simile a questa:

A questo punto creiamo una cartella nella home del nostro utente chiamata "portainer", digitiamo da terminale questo comando:
mkdir portainer
Accediamo alla cartella:
cd portainer/
Creiamo un file chiamato docker-compose.yml, utilizzando nano:
nano docker-compose.yml
Incolliamo il seguente contenuto:
services:
portainer-ce:
image: portainer/portainer-ce:latest # Scaricherà sempre l'ultima versione
container_name: portainer-ce
ports:
- 9000:9000 # Porta HTTP per la Web-UI
- 8000:8000 # Porta TCP per la connessione degli Agenti
volumes:
- ./portainer_data:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
Procediamo salvando il file premendo la combinazione di tasti CTRL + X e successivamente confermiamo con "Y".
A questo punto effettuiamo il download dell'immagine di Portainer:
docker compose pull

Adesso possiamo procedere avviando il container:
docker compose up -d
A questo punto possiamo accedere su Portainer accedendo alla pagina web:
http://IP:9000/
La prima volta dobbiamo creare un nuovo utente admin, cambiamo username e decidiamo una password SICURA da almeno 12 caratteri.
Ci ritroveremo davanti una schermata simile a questa:

BINGO! Abbiamo Portainer in funziona collegato al "demone docker", da qui possiamo iniziare adesso a gestire i nostri container, eliminare immagini, volumi e network non più utilizzati e molto altro.
Collegare altre istanze Docker a Portainer
La cosa più fantastica di Portainer (secondo me) è il fatto di poter collegare qualsiasi istanza di Docker ad un unica WebUI (Portainer) e quindi gestire tutti i nostri container, i volumi ecc ecc.
Esistono 4 diversi modi per poter collegare Portainer a docker:
• Portainer Agent: utilizza il contenitore Portainer Agent per comunicare con l'istanza del server Portainer e fornire l'accesso alle risorse del nodo.
• API: Si connette direttamente all'API REST di Docker per gestire container e risorse senza bisogno di agent aggiuntivi;
• Socket: Utilizza il socket Unix di Docker (/var/run/docker.sock
) per un accesso locale diretto e ad alte prestazioni, ma richiede privilegi elevati;
• Edge Agent Standard: Ideale per connettere host remoti in modo sicuro, utilizzando una connessione crittografata tra il nodo e il server Portainer;
In questo Tutorial utilizzeremo la tecnologia Edge Agent Standard, più semplice e più sicuro per i nostri scopi.
Rechiamoci nella pagina principale e dal menù sulla sinistra "Enviroment-related" clicchiamo successivamente su "Enviroment" e sul bottone a destra "+ Add enviroment", dal menù che si apre clicchiamo su "Docker Standalone" e successivamente su start wizard:

Successivamente clicchiamo sulla voce "Edge Agent Standard" ed inseriamo un nome per il nostro server (può essere un nome qualsiasi) e clicchiamo su Create:

Scorriamo in basso fino ad arrivare alla sezione "Docker Standalone", copiamo il contenuto all'interno della pagina (per intenderci dove c'è scritto docker run -d \) ed incolliamolo all'interno del server che vogliamo collegare a portainer.
A questo punto ci ritroveremo nella schermata iniziale la nostra istanza Docker perfettamente collegata.
Attenzione!! Questa procedura funziona SOLO ED ESCLUSIVAMENTE per server collegati all'interno della nostra stessa rete locale, più avanti vedremo come collegare anche eventuali VPS
Collegare Portainer a Pangolin per l'accesso da fuori casa
Immaginiamo di avere l'esigenza di doverci collegare da fuori casa su Portainer, per gestire o stoppare qualche container, qui entra in gioco il nostro amatissimo Pangolin, la procedura è la medesima a qualsiasi altro servizio.
Colleghiamoci alla nostra istanza di Pangolin e creiamo una nuova "Resource" dal menù contestuale in alto a sinistra, successivamente sul bottone "+ Add Resource":

Clicchiamo su Create e modifichiamo sin da subito la sezione "Authentication" disabilitandola, adesso aggiungiamo un Target dal menù "Connectivity" inserendo IP e PORTA della macchina dove gira Portainer ed abilitiamo SSL (https).
Adesso dal nostro browser saremo in grado di avviare l'app attraverso:
https://portainer.dominio.com/
Collegare un istanza Docker esterna con Pangolin
Immaginiamo di avere 3 VPS con docker installato sparse per il mondo (Europa, America ecc.), in questo caso il collegamento come è logico che sia non può avvenire attraverso la LAN casalinga e quindi una domanda sorgerebbe spontanea...
Come colleghiamo i nostri servizi docker alla nostra istanza Portainer?
Quando effettuiamo un collegamento attraverso l'edge agent standard portainer farà un check all'istanza (web ui) sulla porta 9000 e comunicherà con esso attraverso una connessione tcp (non http o https) tramite la porta 8000.
Per poter effettuare un collegamento solo TCP attraverso Pangolin dobbiamo andare a modificare alcune configurazioni nella nostra installazione.
Per prima cosa andiamo sulla dashboard della nostra istanza Pangolin e creiamo una nuova risorsa, inseriamo un nome a nostro piacimento ed eliminiamo la spunta dalla voce "HTTP Resource", a questo punto decidiamo il protocollo "TCP" e selezioniamo la porta "8000" ecco un esempio:

Nel momento in cui creiamo la risorsa, ci verrà mostrato a video un messaggio con delle righe da aggiungere alla nostra configurazione di Pangolin, quindi a questo punto accediamo al terminale dove abbiamo installato pangolin e dirigiamoci nella directory dove si trovano i file di configurazione:
cd pangolin/
Andiamo a modificare il file di configurazione di Traefik, digitiamo il seguente comando:
sudo nano config/traefik/traefik_config.yml
Modifichiamo la voce entryPoints così come segue:
entryPoints:
tcp-8000:
address: ":8000/tcp"
web:
address: ":80"
websecure:
address: ":443"
transport:
respondingTimeouts:
readTimeout: "30m"
http:
tls:
certResolver: "letsencrypt"
Salviamo il file con il comando CTRL+X e confermiamo con "Y". A questo punto andiamo a modificare il file principale del container con il seguente comando:
sudo nano docker-compose.yml
Scorriamo fino a trovare il servizio "gerbil", nella voce "port" andiamo ad aggiungere la porta 8000, ecco un esempio di come l'ho fatto io:
ports:
- 51820:51820/udp
- 8000:8000
- 443:443 # Port for traefik because of the network_mode
- 80:80 # Port for traefik because of the network_mode
Salviamo il file con il comando CTRL+X e confermiamo con "Y". Adesso aggiungiamo una nuova regola sulla nostra VPS per consentire il traffico TCP sulla porta 8000, dal terminale digitiamo:
sudo ufw allow 8000/tcp comment "Allow Portainer Edge Agent from anywhere"
Adesso possiamo tornare sulla nostra dashboard di Pangolin ed impostare un Target nella risorsa TCP appena creata:

A questo punto quando andremo ad aggiungere un agent su Portainer ci basterà inserire il nostro hostname: "portainer.dominio.com" e la connessione avverrà automaticamente:
