Docker Management · 12 min read · Sep 22, 2025
Come installare e utilizzare Portainer per la gestione di Docker con Nginx Proxy Manager

Portainer è una soluzione di gestione dei container open-source per Docker, Kubernetes e Nomad che semplifica l’avvio, la creazione e l’esecuzione di container in modo semplice. Fornisce un dashboard basato sul web per gestire container, immagini, reti e volumi.
In questo tutorial, imparerai a installare e configurare la soluzione di gestione dei container Portainer su un server Linux e usarla per creare e gestire container Docker per eseguire diverse app. Imparerai anche a mettere questi container dietro Nginx utilizzando il gestore proxy Nginx.
Prerequisiti
- Un server Linux che esegue Ubuntu / Debian / Cent OS / Rocky Linux 8 / Alma Linux.
- Un utente non root con privilegi sudo.
- Un Nome di Dominio Completo (FQDN) che punta al server per Portainer (
portrainer.example.com) e Nginx Proxy Manager (npm.example.com).
Passo 1 - Configurare il Firewall
Cent OS/Rocky Linux/Alma Linux
Dovresti avere installato il firewall Firewalld. Controlla lo stato del firewall.
$ sudo firewall-cmd --state
running
Apri le porte 80, 9443 e 443. Portainer utilizza la porta 9443 per esporre la sua interfaccia web tramite HTTPS. Nginx Proxy Manager utilizza la porta 81 per la sua interfaccia.
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=9443/tcp
$ sudo firewall-cmd --permanent --add-port=81/tcp
Ricarica il firewall per abilitare le modifiche.
$ sudo firewall-cmd --reload
Ubuntu/Debian
I sistemi Ubuntu e Debian utilizzano ufw (Uncomplicated Firewall) per impostazione predefinita.
Controlla se il firewall è in esecuzione.
$ sudo ufw status
Se è in esecuzione, apri le porte 80, 9443 e 443.
$ sudo ufw allow 80
$ sudo ufw allow 443
$ sudo ufw allow 9443
$ sudo ufw allow 81
Apri la porta SSH se il firewall non è in esecuzione.
$ sudo ufw allow "OpenSSH"
Abilita il firewall se non è in esecuzione.
$ sudo ufw enable
Se è in esecuzione, ricaricalo per applicare le modifiche.
$ sudo ufw reload
Passo 2 - Installare Docker
Cent OS/Rocky Linux/Alma Linux
Esegui il seguente comando per installare Docker.
$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io
Ubuntu
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Debian
$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
Abilita e avvia il servizio Docker.
$ sudo systemctl start docker --now
Aggiungi il tuo nome utente al gruppo Docker.
$ sudo usermod -aG docker $USER
Disconnettiti dal sistema e riconnettiti per applicare la modifica.
Passo 3 - Installare Docker Compose
Scarica e installa il binario di Docker compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Applica i permessi di esecuzione al binario.
$ sudo chmod +x /usr/local/bin/docker-compose
Passo 4 - Installare Portainer
Crea una directory per Portainer.
$ mkdir ~/portainer
Passa alla directory.
$ cd ~/portainer
Crea e apri il file Docker Compose per la modifica.
$ nano docker-compose.yaml
Incolla il seguente codice in esso.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
ports:
- 9443:9443
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Esaminiamo il file Docker compose.
- Stiamo estraendo l’ultima versione della Portainer Community Edition da Docker Hub. La Portainer Community Edition è gratuita, mentre la loro edizione Business richiede una licenza a pagamento. Puoi estrarre l’edizione Business, ma ti verrà chiesto il codice di licenza per usarla.
- Abbiamo nominato il nostro container come
portainerper scopi di identificazione e collegamento. - La politica di riavvio è impostata su
alwaysin modo che il container rimanga attivo durante l’avvio. - L’impostazione
privileged: trueè per consentire a Portainer di accedere al socket Docker e funzionare in un contesto privilegiato poiché stiamo usando SELinux. Se non stai usando SELinux, puoi rimuovere questa impostazione. Questa impostazione dà al container Portainer accesso a tutto il sistema host, incluso l’accesso all’hardware. Quindi, abilita questa impostazione solo quando sai cosa stai facendo. - La sezione
volumesmappa la cartella sull’host alle cartelle nel container utilizzando i Bind mounts. Abbiamo esposto la directory~/portainer/dataal container per memorizzare eventuali dati pertinenti e l’API del socket Docker per la gestione dei container. L’etichetta:Zdice a Docker che stiamo eseguendo SELinux sul nostro host. Se non hai SELinux abilitato, dovresti rimuovere l’etichetta.
Avvia Portainer.
$ docker-compose up -d
Controlla lo stato del container.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
916411e8d12e portainer/portainer-ce:latest "/portainer" 5 seconds ago Up 4 seconds 8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp portainer
Passo 5 - Accedere e configurare Portainer
Apri l’URL https:// nel tuo browser, e vedrai la seguente schermata.

Ti verrà chiesto di creare un nuovo utente amministratore. Aggiungi i dettagli del tuo utente. Deseleziona la casella Consenti la raccolta di statistiche anonime se ti interessa la privacy. Clicca sul pulsante Crea utente per avviare l’installazione e creare un nuovo account amministratore.
Successivamente, verrai portato alla seguente schermata del dashboard.

Dopo pochi secondi, si aggiornerà automaticamente e ti mostrerà la seguente schermata.

Mostrerà l’ambiente locale in cui Portainer è in esecuzione. Clicca sull’ambiente locale per iniziare.

La maggior parte delle sezioni sono autoesplicative. La sezione Stacks aiuta a creare container utilizzando file Docker compose. Puoi distribuire container direttamente utilizzando la categoria Containers nella barra laterale. Puoi configurare l’attuale ambiente docker attraverso la sezione Hosts. La sezione App Templates viene fornita con file Docker compose preinstallati per installare le applicazioni più comuni. Puoi anche creare modelli personalizzati.
La sezione Settings ti consente di configurare varie impostazioni come l’aggiunta di registri Docker personalizzati, l’aggiunta di più host per Docker swarm, la configurazione dell’accesso degli utenti, il backup dei dati e la personalizzazione di Portainer.
Passo 5 - Mettere Portainer dietro un reverse proxy utilizzando Nginx Proxy Manager (NPM)
Prima di procedere, mettiamo Portainer dietro un reverse proxy utilizzando Nginx Proxy Manager. Nginx Proxy Manager è un’applicazione Docker che fornisce un’interfaccia di gestione web per configurare Nginx come host reverse proxy. Può anche essere utilizzato come host di reindirizzamento o di streaming.
Installare NPM
Il primo passo è creare una rete per Nginx Proxy Manager (NPM). Apri la sezione Networks e clicca sul pulsante Add Network per creare una nuova rete.

Dai un nome alla rete e lascia tutte le impostazioni invariati. Clicca sul pulsante Create the network per terminare.

Visita la sezione Stacks e crea un nuovo stack utilizzando il pulsante Add stack.

Nomina lo stack come nginx-proxy-manager e incolla il seguente codice in esso.
version: "3.3"
services:
npm-app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: npm-app
restart: unless-stopped
ports:
- '80:80' # Public HTTP Port
- '443:443' # Public HTTPS Port
- '81:81' # Admin Web Port
# Aggiungi qualsiasi altra porta di streaming che desideri esporre
# - '21:21' # FTP
environment:
DB_MYSQL_HOST: "npm-db"
DB_MYSQL_PORT: 3306
DB_MYSQL_USER: "npm"
DB_MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
DB_MYSQL_NAME: "npm"
# Decommenta la riga qui sotto se IPv6 non è abilitato sul tuo host
# DISABLE_IPV6: 'true'
volumes:
- ./npm-data:/data:Z
- ./letsencrypt:/etc/letsencrypt:Z
depends_on:
- npm-db
networks:
- npm-network
- npm-internal
npm-db:
image: 'mariadb:latest'
container_name: npm-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: 'npm'
MYSQL_USER: 'npm'
MYSQL_PASSWORD: ${DB_MYSQL_PASSWORD}
volumes:
- ./npm-data/mysql:/var/lib/mysql:Z
networks:
- npm-internal
networks:
npm-internal:
npm-network:
external: true

Abbiamo impostato due variabili di ambiente per impostare le password del database e dell’utente root MySQL. Portainer può essere utilizzato per impostare segreti utilizzando variabili di ambiente. Scorri verso il basso nella pagina e clicca sul pulsante Add environment variable per aggiungere password forti.

Clicca sul pulsante Deploy the stack per creare e avviare il container NPM.
Accedere a NPM
Apri l’URL https:// nel tuo browser, e vedrai la seguente schermata. Inserisci le seguenti credenziali predefinite per accedere.
Indirizzo email: [email protected] Password: changeme
Successivamente, ti verrà immediatamente chiesto di impostare un nome e un indirizzo email. Clicca sul pulsante Save, e ti verrà chiesto di creare una nuova password. Clicca di nuovo sul pulsante Save per iniziare.

Visita Hosts >> Proxy Hosts e clicca sul pulsante Add Proxy Host.

Inserisci il nome di dominio come portainer.example.com. Scegli lo schema come https. Inserisci il nome del container come Forward Hostname e 9443 come Forward port. Seleziona le opzioni Block Common Exploits e Websockets Support.

Passa alla scheda SSL e seleziona Request a new SSL Certificate dal menu a discesa. Seleziona le opzioni Force SSL e HTTP/2 Support per proteggere e ottimizzare la tua connessione SSL. Inserisci l’indirizzo email per ricevere notifiche di rinnovo e accetta i termini di servizio. Clicca sul pulsante Save per terminare la configurazione del Proxy Host per Portainer.
Collegare Portainer al Container NPM
Abbiamo impostato l’host proxy, ma il container non è ancora collegato alla rete NPM. Torna al dashboard di Portainer, visita la sezione Containers e seleziona il container portainer.
Seleziona npm-network dal menu a discesa nella sezione Connected networks e clicca sul pulsante Join network per aggiungere il container Portainer alla rete del gestore proxy.

Potresti ricevere un errore, ma aggiorna la pagina e dovresti vedere il container aggiunto alla rete NPM.

Dovresti essere in grado di accedere a Portainer utilizzando l’URL https://portainer.example.com nel tuo browser.
Puoi seguire una procedura simile per mettere NPM dietro un URL accessibile pubblicamente come https://npm.example.com come discusso nel nostro tutorial su Nginx Proxy Manager.
Ora che hai impostato un URL pubblico per Portainer, puoi rimuovere la porta 9443 esposta. Per farlo, torna al Terminale e passa alla directory di portainer.
$ cd ~/portainer
Apri il file Docker compose per la modifica.
$ nano docker-compose.yaml
Rimuovi la sezione delle porte commentandola, come mostrato di seguito.
version: "3.3"
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
privileged: true
volumes:
- ./data:/data:Z
- /var/run/docker.sock:/var/run/docker.sock:Z
#ports:
# - 9443:9443
networks:
- npm-network
networks:
npm-network:
external: true
Salva il file premendo Ctrl + X e inserendo Y quando richiesto.
Qui, abbiamo aggiunto i dettagli della rete NPM perché dovremo riavviare il container Portainer.
Ferma il container Portainer.
$ docker-compose down --remove-orphans
Avvia di nuovo il container con la configurazione aggiornata.
$ docker-compose up -d
Passo 6 - Distribuire un container utilizzando il Modello di App
Portainer fornisce diversi modelli predefiniti per avviare applicazioni direttamente con una configurazione minima.

Visita la sezione App Templates e seleziona un modello qualsiasi. Dagli un nome e seleziona la rete da utilizzare. Usa la sezione delle opzioni avanzate per distribuire porte, reti e mount di volume personalizzati.
Clicca sul pulsante Deploy the container per terminare la distribuzione della tua applicazione. Qui stiamo distribuendo il container Redis.

Passo 7 - Gestire i Container
Gestiamo un container esistente. Apri la pagina dei container e vedrai tutti i container in esecuzione.

Clicca sul container hw-redis recentemente creato per procedere.

In alto, puoi vedere un elenco di azioni che puoi eseguire su un container in esecuzione. Puoi fermare e uccidere il container. Ricreare creerà il container da zero. L’opzione Duplicate/Edit ti permetterà di creare un altro container identico permettendoti di cambiare le impostazioni prima di lanciarlo.
Lo Stato del Container mostra il tempo di esecuzione, l’indirizzo IP e altri dettagli sul container.
L’opzione Logs mostra l’output del comando docker logs. Poiché l’output del comando non è memorizzato nella cache, ogni volta che aggiorni la pagina, il comando viene eseguito da zero.

L’opzione Inspect esegue il comando docker inspect sul container e mostra il suo output.

L’opzione Stats ti mostra l’utilizzo del container in tempo reale.

Puoi avviare la console del Container utilizzando l’opzione Console. Ti verrà chiesto il comando e l’utente di sistema da eseguire.

Premi il pulsante Connect per avviare la console.

L’opzione Attach esegue il comando docker attach.
Ci sono altre opzioni nella pagina dei dettagli del Container. Puoi creare un’immagine utilizzando un container esistente. Altre opzioni includono la modifica della politica di riavvio di un container e la connessione o disconnessione di una rete a un container esistente.
Allegare un Container Esterno a Portainer
Creare qualsiasi container al di fuori di Portainer apparirà all’interno di esso purché sia creato sullo stesso sistema in cui Portainer è in esecuzione. Questo è possibile perché Portainer è collegato a Docker utilizzando il websocket.
Testiamo eseguendo il container Docker Hello World.
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Controlla l’elenco dei container nel terminale. Stiamo usando il flag -a per mostrare l’elenco di tutti i container, inclusi quelli fermati. Puoi vedere il nome del container come sad_williamson.
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5fa46b85d594 hello-world "/hello" 3 minutes ago Exited (0) 3 minutes ago sad_williamson
.....
Ora, controlla la pagina dei Container di Portainer, e il container hello world apparirà come fermato nell’elenco con lo stesso nome.

Conclusione
Questo conclude il nostro tutorial su come installare e utilizzare Portainer per la gestione di Docker e Nginx Proxy Manager. Esploreremo la creazione di immagini docker, la creazione di container personalizzati e l’uso di Portainer con Docker swarm in un prossimo tutorial. Se hai domande, postale nei commenti qui sotto.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.