Installazione di Docker su Ubuntu: APT, Snap, Rootless – Guida completa 2026

Scegli il percorso di installazione di Docker corretto su Ubuntu.

Indice

L’installazione di Docker su Ubuntu dovrebbe essere semplice, ma nella pratica diverse opzioni “a forma di Docker” competono per lo stesso nome comando, ognuna con packaging, comportamenti di aggiornamento e implicazioni di sicurezza diversi.

Questa guida confronta ogni principale percorso di installazione in modo che tu possa scegliere quello più adatto alla tua macchina.

Le opzioni che incontrerai includono:

  • docker.io dai repository di Ubuntu
  • docker-ce dal repository APT ufficiale di Docker
  • Docker da Snap
  • Docker Desktop
  • pacchetti .deb scaricati manualmente
  • lo script di convenienza di Docker
  • Rootless Docker

docker workplace

Anche se forniscono tutti strumenti per i container, non sono pacchetti intercambiabili. La scelta migliore dipende dal fatto che la macchina sia una postazione da sviluppatore, un runner CI, un server piccolo, una macchina per self-hosting o un host di produzione. Il mio consiglio di default è calmo ma fermo: per la maggior parte degli utenti tecnici su macchine Ubuntu normali, installare Docker Engine dal repository APT ufficiale di Docker. Usa docker.io di Ubuntu solo quando l’integrazione con la distribuzione è più importante del packaging upstream di Docker. Evita il pacchetto Snap a meno che tu non voglia specificamente il comportamento Snap e ne comprenda i limiti. Rootless Docker vale la pena conoscerlo, ma non è automaticamente il default migliore per ogni macchina.

Questa guida spiega i compromessi, copre la sicurezza post-installazione e ti fornisce percorsi di installazione puliti per ciascun metodo. Una volta che Docker Engine è in esecuzione, il Docker Cheatsheet è il tuo riferimento quotidiano per i comandi, e il Docker Compose Cheatsheet copre le configurazioni multi-container. Entrambi si affiancano a Git, VS Code e alle guide CI/CD in Strumenti per Sviluppatori: La Guida Completa ai Flussi di Lavoro Moderni.

Raccomandazione Rapida

La tabella sottostante riassume quale percorso di installazione si adatta alle comuni scenarie.

Caso d’uso Installazione consigliata
Postazione da sviluppatore Repository APT ufficiale di Docker
Runner CI Repository APT ufficiale di Docker, versione bloccata se necessario
Piccolo server self-hosted Repository APT ufficiale di Docker
Server di produzione Repository APT ufficiale di Docker, aggiornamenti controllati
Sistema conservativo solo Ubuntu Pacchetto docker.io di Ubuntu
Esperimento rapido su desktop Docker Desktop o repository APT ufficiale
Configurazione Ubuntu gestita da Snap Docker Snap, con cautela
Forte requisito di daemon non-root Rootless Docker
Host isolato (air-gapped) Pacchetti .deb manuali o mirror interno

Se non hai una ragione speciale per scegliere diversamente, il repository APT ufficiale di Docker è il default.

Cosa Viene Installato

Una configurazione normale di Docker Engine include diverse parti mobili:

  • Daemon Docker: dockerd
  • CLI Docker: docker
  • Runtime dei container: containerd
  • Runtime di basso livello: runc
  • Plugin Buildx: docker buildx
  • Plugin Compose: docker compose

Il moderno Docker Compose è solitamente installato come plugin della CLI Docker. Ciò significa che il comando è:

docker compose version

Non:

docker-compose version

Il vecchio comando docker-compose esiste ancora nelle guide e nei sistemi più vecchi, ma le nuove configurazioni Ubuntu dovrebbero generalmente usare il plugin Compose.

Opzione 1: Installare Docker dal Repository APT Ufficiale di Docker

Questa è la scelta migliore di default per la maggior parte degli sviluppatori e degli utenti DevOps. Ottieni il packaging upstream di Docker, le versioni correnti di Docker Engine, Buildx, il plugin Compose e un percorso di aggiornamento APT normale.

Rimuovi Prima i Pacchetti in Conflitto

Prima di installare Docker CE, rimuovi i pacchetti che potrebbero confliggere con i pacchetti ufficiali di Docker.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

È normale se APT dice che alcuni di questi pacchetti non sono installati.

Questo comando non rimuove le immagini, i container, i volumi o le reti di Docker memorizzati sotto /var/lib/docker. Se vuoi un reset pulito, questo è un passaggio separato e dovrebbe essere fatto deliberatamente.

Aggiungi il Repository APT Ufficiale di Docker

Installa i prerequisiti:

sudo apt update
sudo apt install ca-certificates curl

Crea la directory del keyring:

sudo install -m 0755 -d /etc/apt/keyrings

Scarica la chiave del repository di Docker:

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc

Permetti ad APT di leggere la chiave:

sudo chmod a+r /etc/apt/keyrings/docker.asc

Aggiungi il repository Docker usando il formato .sources deb822:

sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<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

Aggiorna i metadati di APT:

sudo apt update

Installa Docker Engine, Buildx e Compose

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

Controlla il servizio:

sudo systemctl status docker

Se non è in esecuzione:

sudo systemctl start docker

Verifica l’installazione:

sudo docker run hello-world

Controlla le versioni:

docker --version
docker buildx version
docker compose version

A questo punto Docker funziona, anche se hai ancora bisogno di sudo per la maggior parte dei comandi a meno che tu non configuri l’accesso non-root nella sezione post-installazione sottostante.

Opzione 2: Installare Docker dai Repository di Ubuntu

Ubuntu fornisce il pacchetto docker.io, che puoi installare con:

sudo apt update
sudo apt install docker.io docker-compose-v2

Avvia e abilita Docker:

sudo systemctl enable --now docker

Verifica:

sudo docker run hello-world

Quando docker.io di Ubuntu ha Senso

Il pacchetto di Ubuntu può essere una buona scelta quando:

  • Preferisci i pacchetti mantenuti da Ubuntu.
  • Vuoi una versione allineata con il processo di rilascio di Ubuntu.
  • Gestisci molti host Ubuntu con repository standard.
  • Non hai bisogno dell’ultima versione upstream di Docker.
  • Vuoi meno sorgenti APT di terze parti.

Questa è una scelta ragionevole. Non è “sbagliata”.

Quando docker.io di Ubuntu Non è Ideale

Usa il repository ufficiale di Docker invece quando:

  • Vuoi l’upstream Docker Engine corrente.
  • Segui la documentazione stessa di Docker.
  • Ti affidi al comportamento corrente di Buildx e Compose.
  • Vuoi i nomi dei pacchetti Docker CE.
  • Stai debuggando problemi contro la documentazione upstream di Docker.
  • Hai bisogno di una parità prevedibile della versione Docker tra distribuzioni.

Il mio pregiudizio: per le macchine da sviluppatore e gli host pesanti sui container, usa il repository APT ufficiale di Docker. Per le macchine Ubuntu gestite in modo conservativo, docker.io è accettabile.

Opzione 3: Installare Docker con Snap

Lo snap di Docker si installa con un singolo comando, ma la semplicità non significa sempre un comportamento prevedibile su un server o su una macchina da sviluppo.

sudo snap install docker

I pacchetti Snap hanno il proprio modello di packaging, comportamento di aggiornamento, presupposti di confinamento e layout del filesystem. Questo va bene per molte app desktop, ma Docker Engine è già un runtime dei container a livello di sistema, quindi lo strato extra Snap può sorprendere le persone. Se gestisci altro software con Snap, il Snap Package Manager Cheatsheet spiega canali, confinamento e comportamento di aggiornamento in più dettaglio.

Quando Docker Snap ha Senso

Docker Snap può essere ragionevole quando:

  • Gestisci intenzionalmente il software con Snap.
  • Stai usando Ubuntu Core o un ambiente pesante su Snap.
  • Vuoi aggiornamenti automatici in stile snap.
  • Stai sperimentando e non ti interessa di allinearti alle istruzioni APT upstream di Docker.

Perché Evito Solitamente Docker Snap

Evito solitamente lo snap di Docker per l’uso da sviluppo e server perché:

  • La maggior parte della documentazione di Docker presuppone il layout standard di Docker Engine.
  • I percorsi di risoluzione dei problemi possono differire dalle installazioni APT.
  • La gestione dei servizi può sembrare meno trasparente.
  • Gli aggiornamenti automatici di Snap possono essere inconvenienti per il software infrastrutturale.
  • Alcuni dettagli su bind mount, socket e integrazione host possono sorprenderti.

Se Docker è centrale nel tuo flusso di lavoro, installalo come infrastruttura piuttosto che come un’app desktop occasionale — anche quando un’installazione Snap sembra allettante in superficie.

Opzione 4: Installare Docker da Pacchetti .deb Manuali

L’installazione manuale .deb è utile quando:

  • La macchina non può usare repository APT esterni.
  • Stai costruendo un processo di installazione offline.
  • Fai il mirror dei pacchetti internamente.
  • Hai bisogno di un controllo rigoroso dei cambiamenti.

Il compromesso è la manutenzione, perché devi scaricare e installare manualmente i nuovi pacchetti ogni volta che aggiorni.

Un’installazione manuale solitamente richiede questi pacchetti:

  • containerd.io
  • docker-ce
  • docker-ce-cli
  • docker-buildx-plugin
  • docker-compose-plugin

Installali con:

sudo dpkg -i ./containerd.io_*.deb \
  ./docker-ce_*.deb \
  ./docker-ce-cli_*.deb \
  ./docker-buildx-plugin_*.deb \
  ./docker-compose-plugin_*.deb

Poi correggi le dipendenze mancanti se necessario:

sudo apt --fix-broken install

Verifica:

sudo systemctl status docker
sudo docker run hello-world

Le installazioni .deb manuali non sono la mia prima scelta, ma rimangono valide per ambienti controllati o isolati (air-gapped) dove l’approvazione esplicita dei pacchetti è più importante della convenienza.

Opzione 5: Usare lo Script di Convenienza di Docker

Docker fornisce uno script di convenienza:

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Puoi anteprima cosa farebbe:

sudo sh get-docker.sh --dry-run

Lo script di convenienza è utile per macchine di test descartabili, demo, laboratori e ambienti temporanei, ma non lo userei come metodo di installazione principale per sistemi di produzione. Uno script che configura repository e installa pacchetti in modo non interattivo è comodo, ma l’infrastruttura a lungo termine merita passaggi espliciti e revisionabili — quindi per gli host di produzione, usa direttamente il metodo del repository APT.

Docker Desktop vs Docker Engine su Ubuntu

Docker Desktop per Linux è un prodotto diverso da Docker Engine. Docker Engine è il runtime lato server e il flusso di lavoro CLI che la maggior parte degli utenti dei server Linux si aspetta, mentre Docker Desktop aggiunge un’interfaccia grafica, integrazioni Desktop e un’esperienza del prodotto più simile all’uso di Docker su macOS e Windows.

Usa Docker Desktop quando:

  • Vuoi un’esperienza Docker grafica.
  • Vuoi funzionalità Desktop.
  • Ti stai allineando con un team che standardizza su Docker Desktop.
  • Non ti dispiace lo strato extra.

Usa Docker Engine quando:

  • Stai eseguendo un server.
  • Vuoi un runtime nativo Linux semplice.
  • Preferisci i servizi gestiti da systemd.
  • Stai costruendo infrastruttura CI, DevOps o self-hosted.
  • Non hai bisogno dell’interfaccia grafica.

Per un pubblico di blog tecnico avanzato, Docker Engine è solitamente il default più interessante sui server Linux e sugli host CI.

Post-Installazione: Eseguire Docker Senza Sudo

Dopo l’installazione, questo funziona:

sudo docker ps

Ma questo potrebbe fallire:

docker ps

Questo perché il daemon Docker ascolta su un socket Unix posseduto da root. La correzione comune è aggiungere il tuo utente al gruppo docker.

Crea il gruppo se necessario:

sudo groupadd docker

Aggiungi il tuo utente:

sudo usermod -aG docker $USER

Applica la nuova appartenenza al gruppo:

newgrp docker

Oppure effettua logout e login di nuovo.

Testa:

docker run hello-world

Nota Importante sulla Sicurezza Riguardo al Gruppo Docker

Il gruppo docker non è un gruppo di convenienza innocuo. Un utente che può controllare il daemon Docker può solitamente ottenere un controllo equivalente a root dell’host, quindi per una macchina da sviluppatore personale questo è spesso accettabile, ma su un server condiviso è una decisione seria di controllo degli accessi. Tratta l’appartenenza al gruppo docker come un accesso amministrativo e, se questo sembra troppo ampio, considera Rootless Docker invece.

Rootless Docker su Ubuntu

Rootless Docker esegue il daemon Docker e i container come utente non-root. Questo non è lo stesso che aggiungere il tuo utente al gruppo docker — con il gruppo docker, il daemon si esegue ancora come root, mentre in modalità rootless il daemon stesso si esegue come il tuo utente.

Quando Rootless Docker ha Senso

Rootless Docker è utile quando:

  • Vuoi ridurre il rischio root a livello di daemon.
  • Sei su una macchina da sviluppo condivisa.
  • Esegui container di proprietà dell’utente.
  • Non hai bisogno di ogni funzionalità avanzata di rete e archiviazione.
  • Vuoi un default più sicuro per carichi di lavoro sperimentali.

Quando Rootless Docker Potrebbe Essere Fastidioso

Rootless Docker può essere meno conveniente quando:

  • Hai bisogno di container privilegiati.
  • Ti affidi al binding di porte basse senza configurazione extra.
  • Hai bisogno di alcuni pattern di networking dell’host.
  • Ti aspetti un comportamento identico a Docker rootful.
  • Stai seguendo guide scritte per installazioni normali di Docker Engine.

La modalità rootless migliora la postura di sicurezza, ma non è priva di attrito rispetto a un’installazione rootful standard.

Installa Rootless Docker

Installa i prerequisiti:

sudo apt update
sudo apt install uidmap

Se hai installato Docker da pacchetti DEB o APT, lo strumento di configurazione rootless dovrebbe essere disponibile:

dockerd-rootless-setuptool.sh install

Se Docker rootful è già in esecuzione e vuoi solo Rootless Docker, disabilita il daemon di sistema:

sudo systemctl disable --now docker.service docker.socket

Potresti anche dover rimuovere il socket rootful:

sudo rm -f /var/run/docker.sock

Dopo aver installato Rootless Docker, lo strumento di configurazione solitamente stampa variabili d’ambiente da aggiungere al tuo profilo shell. Solitamente assomigliano a questo:

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

Il tuo UID potrebbe differire. Controlla l’output esatto dallo strumento di configurazione.

Abilita il lingering se vuoi che il servizio utente si esegua dopo il logout:

sudo loginctl enable-linger $USER

Controlla il servizio utente:

systemctl --user status docker

Esegui un container di test:

docker run hello-world

Docker Rootful vs Rootless Docker

Argomento Docker Rootful Docker Rootless
Utente del daemon root utente normale
Comodità del comando alta media
Compatibilità più alta buona, ma non perfetta
Postura di sicurezza più debole di default migliore di default
Container privilegiati supportati limitati
Porte basse semplice necessita di configurazione extra
Uso server comune possibile, ma pianifica attentamente
Postazione da sviluppatore comune buona per utenti attenti alla sicurezza

Il mio consiglio pratico:

  • Usa Docker rootful normale per una macchina dev personale o un server semplice.
  • Aggiungi solo utenti fidati al gruppo docker.
  • Usa Rootless Docker quando l’isolamento dell’utente è importante.
  • Non fingere che il gruppo docker sia un confine di sicurezza.

Abilita Docker all’Avvio

Su Ubuntu, Docker installato da pacchetti normali solitamente si avvia automaticamente, ma vale la pena confermare dopo un’installazione fresca o una migrazione.

Controlla:

systemctl is-enabled docker
systemctl is-enabled containerd

Abilita manualmente se necessario:

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

Avvia ora:

sudo systemctl start docker

Disabilita l’avvio automatico:

sudo systemctl disable docker.service
sudo systemctl disable containerd.service

Per Rootless Docker, usa il servizio utente:

systemctl --user enable docker
systemctl --user start docker

E abilita il lingering se necessario:

sudo loginctl enable-linger $USER

Installa o Verifica Docker Compose

Con il repository APT ufficiale di Docker, installa Compose come plugin:

sudo apt update
sudo apt install docker-compose-plugin

Verifica:

docker compose version

Se hai installato il pacchetto di Ubuntu, potresti usare:

sudo apt install docker-compose-v2

Preferisci:

docker compose up -d

Rispetto allo stile vecchio:

docker-compose up -d

Il comando con trattino docker-compose appartiene all’era vecchia di Compose standalone. Molti sistemi lo hanno ancora, ma la nuova documentazione dovrebbe usare docker compose.

Controlla Quale Docker Hai Installato

Quando erediti una macchina o debugghi una configurazione rotta, questi comandi aiutano a identificare quale packaging Docker è effettivamente in uso.

Controlla il binario Docker:

which docker

Controlla la proprietà del pacchetto:

dpkg -S "$(which docker)"

Elenca i pacchetti relativi a Docker:

dpkg -l | grep -E 'docker|containerd|runc'

Controlla la policy APT:

apt-cache policy docker-ce docker.io containerd.io docker-compose-plugin docker-compose-v2

Controlla Snap:

snap list | grep docker

Controlla lo stato del servizio:

systemctl status docker
systemctl status containerd

Controlla i dettagli del server Docker:

docker info

Se docker info fallisce senza sudo, controlla la tua appartenenza ai gruppi:

groups

Migra da docker.io Ubuntu a Docker CE

Ferma Docker:

sudo systemctl stop docker

Rimuovi i pacchetti Ubuntu:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc containerd runc

Aggiungi il repository APT ufficiale di Docker usando i passaggi sopra.

Installa Docker CE:

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

Avvia Docker:

sudo systemctl start docker

Controlla i container esistenti:

docker ps -a
docker images
docker volume ls

Normalmente, rimuovere i pacchetti non cancella /var/lib/docker, quindi le tue immagini, container e volumi potrebbero ancora esistere. Tuttavia, fai prima il backup dei dati importanti.

Migra da Docker Snap a Docker CE

Prima ispeziona cosa esiste:

snap list | grep docker
docker info

Ferma i carichi di lavoro e fai il backup dei volumi importanti o dei dati bind-mounted.

Rimuovi lo snap:

sudo snap remove docker

Poi installa Docker CE dal repository APT ufficiale.

Fai attenzione con le ubicazioni dei dati. I pacchetti Snap spesso usano percorsi diversi e regole di confinamento. Non dare per scontato che i dati di Docker Snap appariranno automaticamente sotto il percorso standard /var/lib/docker dopo la migrazione.

Per servizi importanti, esporta o fai il backup dei dati esplicitamente prima di cambiare le sorgenti dei pacchetti.

Blocca una Versione di Docker con APT

Per sistemi simili alla produzione, potresti voler aggiornamenti controllati.

Elenca le versioni disponibili:

apt list --all-versions docker-ce

Installa una versione specifica:

VERSION_STRING="5:29.0.0-1~ubuntu.24.04~noble"

sudo apt install docker-ce=$VERSION_STRING \
  docker-ce-cli=$VERSION_STRING \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin

Blocca i pacchetti Docker:

sudo apt-mark hold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Rimuovi il blocco in seguito:

sudo apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Fai questo quando hai bisogno di finestre di cambiamento prevedibili. Per un laptop personale, potrebbe essere inutile.

Note su Firewall e Networking

Docker modifica le regole di filtraggio dei pacchetti per far funzionare il networking dei container, il che è importante se usi UFW, firewalld, nftables o regole firewall personalizzate.

Punti importanti:

  • Le porte Docker pubblicate potrebbero bypassare le aspettative naive di UFW.
  • Docker usa l’integrazione iptables.
  • Le regole personalizzate dovrebbero tenere conto delle chain create da Docker.
  • L’indurimento del server dovrebbe essere testato con mappature reali delle porte dei container.
  • Non dare per scontato che ufw deny protegga una porta pubblicata da Docker.

Testa le porte esposte da un’altra macchina, non solo da localhost.

Esempio:

docker run --rm -p 8080:80 nginx

Poi da un altro host:

curl http://server-ip:8080

Sui server, il networking di Docker è parte del tuo modello di sicurezza, non un dettaglio di implementazione che puoi ignorare dopo l’installazione.

Errori Comuni e Correzioni

Permission Denied sul Socket Docker

Errore:

permission denied while trying to connect to the Docker daemon socket

Opzioni di correzione:

Usa sudo:

sudo docker ps

Oppure aggiungi il tuo utente al gruppo docker:

sudo usermod -aG docker $USER
newgrp docker

Ricorda che il gruppo docker è equivalente a root nella pratica, quindi tratta l’appartenenza al gruppo come una decisione di accesso privilegiato.

Il Daemon Docker Non è in Esecuzione

Controlla lo stato:

sudo systemctl status docker

Avvialo:

sudo systemctl start docker

Controlla i log:

journalctl -u docker --no-pager -n 100

Pacchetti Docker in Conflitto

Se l’installazione di Docker CE fallisce a causa di conflitti, rimuovi i vecchi pacchetti. Se APT stesso è in uno stato cattivo dopo aver aggiunto il repository Docker, risolvi il problema attraverso Ubuntu APT troubleshooting for broken packages and GPG errors prima di riprovare.

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

Poi riprova:

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

Comando Compose Non Trovato

Controlla Compose moderno:

docker compose version

Installa il plugin:

sudo apt install docker-compose-plugin

Se ti aspettavi il vecchio comando:

docker-compose version

Potresti stare seguendo documentazione vecchia. Preferisci aggiornare il comando a docker compose.

Vecchia Config Docker di Proprietà Root

Se hai eseguito Docker con sudo prima di configurare l’accesso al gruppo, la tua config utente potrebbe essere di proprietà di root.

Correggi la proprietà:

sudo chown "$USER":"$USER" "$HOME/.docker" -R
sudo chmod g+rwx "$HOME/.docker" -R

Oppure rimuovi la config se non ne hai bisogno:

sudo rm -rf "$HOME/.docker"

Verrà ricreata.

Non Riesce a Connettersi a Rootless Docker

Controlla l’ambiente:

echo "$DOCKER_HOST"

Controlla il servizio utente:

systemctl --user status docker

Imposta il percorso del socket se necessario:

export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Aggiungilo al tuo profilo shell solo dopo aver confermato che è corretto.

Disinstalla Docker Engine

Rimuovi i pacchetti Docker CE:

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

Rimuovi i dati di Docker solo se vuoi davvero eliminare immagini, container e volumi:

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Rimuovi i file del repository Docker:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

Aggiorna APT:

sudo apt update

Per Docker Snap:

sudo snap remove docker

Per docker.io Ubuntu:

sudo apt purge docker.io docker-compose-v2

Percorso di Installazione Raccomandato per la Maggior Parte degli Utenti Ubuntu

Per la maggior parte degli utenti tecnici Ubuntu, questo è il percorso pulito:

sudo apt remove docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc

sudo apt update
sudo apt install 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 > /dev/null <<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

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

sudo docker run hello-world

Poi decidi se vuoi accesso al gruppo per comodità o Rootless Docker per isolamento più stretto:

sudo usermod -aG docker $USER
newgrp docker
docker run hello-world

Guida Finale e Opinione

L’installazione di Docker su Ubuntu è una scelta operativa, non solo una scelta di pacchetto. Il metodo che scegli influisce sugli aggiornamenti, sui confini di sicurezza e su quanto strettamente il tuo host corrisponde alla documentazione upstream di Docker.

Le mie regole pratiche sono:

  • Usa il repository APT ufficiale di Docker per la maggior parte delle macchine da sviluppatore e DevOps.
  • Usa docker.io Ubuntu quando la consistenza del repository Ubuntu è più importante della freschezza upstream.
  • Evita Docker Snap per flussi di lavoro container seri a meno che tu non voglia intenzionalmente il comportamento Snap.
  • Evita lo script di convenienza per gli host di produzione.
  • Usa docker compose moderno, non il vecchio docker-compose.
  • Tratta il gruppo docker come accesso privilegiato.
  • Considera Rootless Docker quando l’isolamento dell’utente è importante.
  • Blocca le versioni sui sistemi simili alla produzione.
  • Testa il comportamento del firewall quando pubblichi porte sui server.

L’installazione di Docker più noiosa è solitamente la migliore: repository APT ufficiale, keyring esplicito, plugin Compose, servizio systemd, permessi compresi e nessun layer di packaging misterioso in mezzo. Una volta che l’engine è in posizione, i carichi di lavoro multi-servizio — inclusi stack LLM self-hosted — sono il passo naturale successivo; ad esempio, vedi Ollama in Docker Compose per eseguire modelli locali nei container. Per mantenere uno stack Compose in esecuzione attraverso i riavvii su un singolo server, Run Docker Compose as a Linux Service with systemd passa in rassegna i file unit e le abitudini operative.

Leggi di Più

Iscriviti

Ricevi nuovi articoli su sistemi, infrastruttura e ingegneria AI.