Linux27 agosto 2026 17 visualizzazioni

Installare Docker su un VPS Linux (2026)

Installare Docker su un VPS Linux (2026)

Prerequisiti

Prima di iniziare, i seguenti elementi devono essere già in posto:

  • Accesso SSH protetto da chiave: guida chiave SSH
  • Firewall UFW configurato: guida UFW (leggere anche la sezione Docker e UFW qui sotto prima di esporre delle porte)
  • Un utente non root con privilegi sudo, oppure accesso root diretto
  • OS: Debian 13 (Trixie) o Ubuntu 24.04 LTS

Passo 1: Aggiungere il repository ufficiale Docker

Non installare il pacchetto docker.io fornito da Debian/Ubuntu: è in ritardo rispetto alle versioni ufficiali. Utilizzare il repository di Docker Inc. per ottenere docker-ce, la versione mantenuta attivamente.

Su Debian 13

Fonte: docs.docker.com/engine/install/debian/

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(. /etc/os-release && echo "$VERSION_CODENAME")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Su Ubuntu 24.04

Fonte: docs.docker.com/engine/install/ubuntu/

sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

sudo apt update

Passo 2: Installare Docker Engine e Docker Compose

sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Questo comando installa contemporaneamente:

  • docker-ce: il motore Docker
  • docker-ce-cli: l'interfaccia a riga di comando
  • containerd.io: il runtime dei container
  • docker-buildx-plugin: il plugin di build multipiattaforma
  • docker-compose-plugin: Docker Compose v2 (comando docker compose, senza trattino)

Verificare l'installazione:

docker --version
docker compose version

Nota importante su Docker Compose: il plugin v2 si chiama docker compose (due parole, senza trattino). Il vecchio binario standalone docker-compose (con trattino) è la versione v1, deprecata da luglio 2023 e non installata qui. Fonte: docs.docker.com/compose/migrate/

Attivare Docker all'avvio del sistema:

sudo systemctl enable docker.service
sudo systemctl enable containerd.service

Fonte: docs.docker.com/engine/install/linux-postinstall/

Passo 3: Configurare l'accesso non root

Aggiungere l'utente al gruppo docker

Per impostazione predefinita, i comandi Docker richiedono sudo. Per eseguirli senza sudo, aggiungere l'utente al gruppo docker:

sudo usermod -aG docker $USER
newgrp docker

Il comando newgrp docker applica la modifica nella sessione corrente senza disconnessione. Fonte: docs.docker.com/engine/install/linux-postinstall/

Avvertenza di sicurezza sul gruppo docker

Passo 4: Primo container di test

Verificare che l'installazione funzioni con l'immagine ufficiale hello-world:

docker run hello-world

Docker scarica l'immagine da Docker Hub se non è presente localmente, avvia un container, mostra un messaggio di conferma e si arresta. Un output contenente "Hello from Docker!" conferma che l'installazione è operativa.

Docker e UFW: la trappola da conoscere

Cosa succede concretamente

Avviare un container con docker run -p 8080:80 nginx apre la porta 8080 su tutte le interfacce di rete del VPS, compreso l'IP pubblico, anche se UFW non autorizza quella porta. Fonte: docs.docker.com/engine/network/packet-filtering-firewalls/

La buona pratica: bind su 127.0.0.1

Per esporre una porta solo in locale (accessibile dal VPS ma non da Internet), effettuare il bind sull'interfaccia di loopback:

# Comando docker run
docker run -p 127.0.0.1:8080:80 nginx

# In un compose.yml
ports:
  - "127.0.0.1:8080:80"

La porta 8080 è quindi accessibile solo dal VPS stesso (tramite un reverse proxy Nginx per esempio), e non dall'esterno.

Per le porte che devono restare pubbliche

Utilizzare la catena DOCKER-USER di iptables per filtrare il traffico prima che Docker lo elabori. Aggiungere una regola in /etc/ufw/after.rules o configurare direttamente iptables. La documentazione ufficiale descrive questo approccio in dettaglio: Restrict connections to the Docker host.

Raccomandazione pratica

Per un VPS che ospita servizi web tramite Docker:

  • Effettuare il bind di tutti i container su 127.0.0.1 per impostazione predefinita
  • Mettere un reverse proxy Nginx davanti (porte 80 e 443 gestite da Nginx, non direttamente da Docker)
  • Aprire solo le porte 80 e 443 in UFW (guida UFW)
  • Non esporre mai direttamente le porte dei database (3306, 5432, 6379) sull'IP pubblico

Manutenzione dei container

Pulire le risorse inutilizzate

Docker accumula immagini, container arrestati, volumi e reti orfane. Pulire regolarmente:

# Rimuovere tutti i container arrestati, le immagini non utilizzate, le reti orfane
docker system prune

# Includere anche i volumi non utilizzati (attenzione: rimozione definitiva)
docker system prune --volumes

Consultare i log di un container

# Mostrare i log del container
docker logs nome_container

# Monitoraggio in tempo reale
docker logs -f nome_container

# Limitare il numero di righe mostrate
docker logs --tail 100 nome_container

Aggiornare Docker Engine

sudo apt update
sudo apt upgrade docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

Aggiornare un'immagine Docker

# Scaricare l'ultima versione dell'immagine
docker pull nome_immagine:tag

# Ricreare il container con la nuova immagine
docker compose pull
docker compose up -d

Quale configurazione VPS per Docker?

Utilizzo RAM raccomandata Offerta OuiHeberg
Da 1 a 3 container leggeri (sito, bot, API) 4 GB VPS Linux 04G: 7,00 € IVA incl./mese
Stack completo (app + database + cache) 8 GB Vedere la gamma VPS Linux
Più progetti o servizi pesanti 16 GB+ Vedere la gamma VPS Linux

Queste stime presuppongono container in produzione standard. Le esigenze variano secondo le immagini utilizzate e il traffico simultaneo.

Domande frequenti

Qual è la differenza tra docker.io e docker-ce?

docker.io è il pacchetto Docker fornito dai repository Debian/Ubuntu. È spesso in ritardo rispetto alle versioni ufficiali e non riceve gli aggiornamenti altrettanto rapidamente. docker-ce (Community Edition) è il pacchetto mantenuto direttamente da Docker Inc. tramite il suo repository ufficiale. Questa guida utilizza docker-ce.

Docker Compose v2 è compatibile con i vecchi file docker-compose.yml?

Sì. Il formato dei file compose.yml (o docker-compose.yml) è compatibile tra v1 e v2. L'unica differenza visibile è il comando: docker compose (v2, plugin) sostituisce docker-compose (v1, binario standalone). La sintassi dei file resta identica per la grande maggioranza dei casi d'uso.

Come verificare che Docker funzioni dopo il riavvio del VPS?

sudo systemctl status docker

Se Docker è configurato con systemctl enable docker.service, si avvia automaticamente. Verificare anche che i container siano configurati con la politica di riavvio appropriata nel compose.yml: restart: unless-stopped o restart: always.

Si può usare Docker senza accesso root?

Sì, tramite la modalità rootless. Docker può funzionare interamente senza privilegi root, il che riduce la superficie di attacco. La configurazione è più complessa e documentata qui: docs.docker.com/engine/security/rootless/

Come proteggere ulteriormente il daemon Docker?

Configurare Fail2ban per proteggere l'accesso SSH al VPS è un primo passo: vedere la guida Fail2ban. Per Docker stesso, non esporre mai il socket Docker (/var/run/docker.sock) a container non affidabili, e non attivare l'API Docker TCP senza TLS mutuo.

Docker installato? Prima della messa in produzione, ripassate la protezione del vostro VPS dalla A alla Z.