Docker su Linux: guida completa all’installazione

Se stai leggendo l’articolo sui CRM open source, o uno qualsiasi dei prossimi pezzi sul self hosting che pubblicheremo, prima o poi finisci qui. Docker è lo strumento che rende possibile far girare un’app web complessa (un CRM, un cloud personale, un media server) sul tuo Mini PC senza dover installare a mano database, PHP, dipendenze e mezzo sistema operativo dentro l’altro. Isola tutto in un pacchetto autonomo, e se qualcosa va storto lo cancelli e riparti da zero senza aver toccato il resto del sistema.

Non serve essere sistemisti per usarlo. Ti do due strade: una veloce con uno script ufficiale, una manuale con controllo pieno su ogni passaggio. Le ho testate entrambe dal vivo prima di scriverle, comprese le cose che vanno storte. Se stai seguendo questa guida dal terminale, lancia sempre un comando alla volta e guarda l’output prima di andare avanti: è il modo in cui eviti l’unico vero rischio di un tutorial come questo, incollare troppe cose insieme e non capire più cosa ha funzionato e cosa no.

Una cosa da chiarire subito per chi arriva da Windows o Mac: su Linux non serve Docker Desktop. Quello è un programma pensato per far girare Docker dentro una macchina virtuale su sistemi che non hanno il kernel Linux sotto. Su Linux hai Docker Engine nativo, più leggero e diretto, ed è quello che installiamo in questa guida.

Cos’è Docker in due frasi, non una di più

Un container è un ambiente isolato che contiene un’app e tutto ciò che le serve per funzionare, staccato dal resto del tuo sistema. Non è una macchina virtuale, è molto più leggero: parte in secondi, non minuti, e consuma una frazione delle risorse. Se hai letto la guida sui CRM open source, è esattamente il motivo per cui puoi far girare EspoCRM o Twenty sul tuo Mini PC senza dover configurare Apache, PHP e MySQL a mano. 👉 Leggi qui: CRM open source: i migliori per gestire i clienti

Metodo 1: lo script di comodo, la via veloce

Se vuoi la scorciatoia e non ti interessa avere il controllo fine su ogni pacchetto, questa è la strada che consiglio a chi parte da zero. Docker fornisce uno script ufficiale che rileva da solo la tua distro e installa tutto in due comandi:

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

Due cose da sapere prima di usarlo. Primo, Docker stesso non lo consiglia per ambienti di produzione, perché non hai controllo su quale versione installa e modifica il sistema senza chiederti conferma passo passo. Per il tuo Mini PC di casa è un compromesso più che ragionevole. Secondo, il rilevamento della distro non è infallibile: su Linux Mint, per esempio, lo script arriva a rilevare “Debian trixie” invece di Ubuntu o Mint. Non è un problema pratico, i pacchetti funzionano comunque, ma non stupirti se vedi un nome diverso da quello della tua distro reale nell’output.

Dopo lo script, manca ancora un passaggio: a differenza dell’installazione manuale, lo script non aggiunge automaticamente il tuo utente al gruppo docker. Vai direttamente alla sezione “I passaggi dopo l’installazione” più sotto, valgono identici per entrambi i metodi.

Metodo 2: installazione manuale, controllo pieno

Se preferisci sapere esattamente cosa viene installato e da dove, o vuoi scegliere tu la versione, segui questa strada invece dello script.

Su Debian, Ubuntu e derivate

sudo apt update
sudo apt install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") 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 docker-buildx-plugin docker-compose-plugin

Se sei su Linux Mint, guarda bene quella riga: uso ${UBUNTU_CODENAME:-$VERSION_CODENAME} e non solo $VERSION_CODENAME. Il motivo è tecnico ma importante: Mint si presenta al sistema con il proprio nome in codice (per esempio zena), non con quello della base Ubuntu su cui è costruito. Il repository di Docker però conosce solo i nomi in codice Ubuntu (noble, jammy e così via), quindi se usi solo $VERSION_CODENAME su Mint ottieni un errore 404 in fase di apt update, perché il sistema cerca un repository per zena che non esiste. La variabile UBUNTU_CODENAME esiste apposta per queste situazioni: su Mint contiene il nome Ubuntu corretto, su Ubuntu puro coincide comunque con VERSION_CODENAME, quindi il comando funziona identico su entrambi senza bisogno di distinguerli a mano.

Sei su Debian invece che Ubuntu? Cambia ubuntu in debian in due punti, non uno solo: sia nel comando curl che scarica la chiave (download.docker.com/linux/debian/gpg) sia nella riga del repository apt (download.docker.com/linux/debian). Se cambi solo la seconda e lasci la prima con ubuntu, l’installazione può comunque funzionare per puro caso ma è sbagliata e prima o poi ti dà problemi in fase di aggiornamento.

Su Arch, EndeavourOS e derivate

Qui Arch vince nettamente in semplicità, indipendentemente dal metodo: Docker è nel repository ufficiale, niente chiavi GPG da aggiungere a mano, e lo script di comodo qui non serve perché non lo copre comunque.

sudo pacman -Syu
sudo pacman -S docker docker-compose docker-buildx

Il pacchetto docker-compose su Arch installa sia il binario standalone sia il plugin moderno, quindi con un solo comando sei a posto su entrambi i fronti.

I passaggi dopo l’installazione, uguali per entrambi i metodi

Da qui in avanti la procedura è identica, che tu abbia usato lo script o il metodo manuale.

Avvia e abilita il servizio. Con lo script di comodo questo passaggio è già fatto per te. Con il metodo manuale, o per esserne sicuro in ogni caso:

sudo systemctl enable --now docker

Aggiungi il tuo utente al gruppo docker, altrimenti dovrai scrivere sudo davanti a ogni comando per sempre:

sudo usermod -aG docker $USER

Dopo questo comando la sessione attuale del terminale non lo sa ancora, il gruppo si applica solo alle sessioni nuove. Hai due strade: disconnetti la sessione e rientra (o riavvia), oppure, se vuoi verificare subito senza uscire, lancia:

newgrp docker

Questo apre una nuova sessione di shell con il gruppo già applicato, senza dover fare logout. Tieni presente che newgrp vale solo per quella finestra di terminale: se ne apri una nuova senza aver fatto prima un logout vero, ti ritrovi di nuovo permission denied e devi ripetere newgrp lì dentro.

Verifica che tutto funzioni:

docker run hello-world

Attenzione qui: l’output di questo comando può essere lungo, con righe su “Pulling from library/hello-world” e simili prima del messaggio finale. Cerca la riga “Hello from Docker!” in mezzo al testo: se c’è, ha funzionato tutto, anche se il resto dell’output ti sembra confuso o pieno di roba. Non serve che sia l’unica cosa stampata a schermo.

Una cosa da sapere subito, non dopo

Essere nel gruppo docker equivale ad avere accesso root sulla macchina, non è un dettaglio da poco. Chiunque possa lanciare comandi Docker può montare l’intero filesystem dentro un container e leggere o scrivere ovunque. Se il tuo Mini PC è solo tuo va benissimo, ma non aggiungere al gruppo docker un utente di cui non ti fidi al 100%, ed evita di esporre il demone Docker su una porta di rete raggiungibile da internet. Se in futuro ti serve gestirlo da remoto, passa sempre da un tunnel SSH. Se vuoi approfondire l’accesso da remoto in generale, ne parliamo qui: 👉 Leggi qui: Controllo remoto su Linux: quale alternativa a TeamViewer

Docker Compose: perché userai quasi sempre questo, non docker run

Per un container singolo basta docker run, ma i software che installerai davvero (CRM, cloud personale, media server) sono quasi sempre combinazioni di più container che lavorano insieme, tipo l’app più il suo database. Qui entra Docker Compose: descrivi tutto lo stack in un file docker-compose.yml e lo avvii con un comando solo.

Proviamolo con un esempio innocuo, un piccolo server web. Segui questi passaggi uno alla volta, non incollarli tutti insieme nel terminale.

Primo, crea una cartella dedicata ed entraci dentro:

mkdir test-docker
cd test-docker

Secondo, apri un editor di testo per creare il file di configurazione:

nano docker-compose.yml

Lo schermo del terminale cambia aspetto: è normale, sei entrato dentro l’editor, non è un errore. È qui, dentro nano, non nella shell, che incolli questo contenuto:

yaml

services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"

Non incollare mai queste righe direttamente nel prompt della shell: il terminale proverebbe a eseguire ogni riga come un comando e ti risponderebbe “comando non trovato”, perché quello è il contenuto di un file, non una sequenza di comandi.

Dopo aver incollato, salva ed esci da nano: Ctrl+O per salvare, Invio per confermare il nome del file, Ctrl+X per uscire e tornare alla shell.

Terzo, verifica che il file sia stato salvato correttamente prima di andare avanti:

cat docker-compose.yml

Deve mostrarti esattamente le quattro righe che hai scritto. Solo a questo punto, lancia:

docker compose up -d

Se tutto va bene vedrai conferma dell’immagine scaricata, della rete creata e del container avviato. Apri il browser su localhost:8080 e vedrai la pagina di benvenuto di Nginx. Per spegnere tutto e ripulire:

docker compose down

Nota sul comando: usa sempre docker compose con lo spazio, non docker-compose con il trattino. Il secondo è il vecchio tool standalone scritto in Python, ancora presente su molti sistemi ma non più la strada consigliata.

Dove finiscono i tuoi dati: i volumi

Questo è il punto che non puoi permetterti di saltare se stai per installare un CRM o qualsiasi cosa con dati importanti dentro. Un container, di default, è effimero: se lo cancelli, tutto quello che c’era dentro sparisce con lui, database compreso. I volumi risolvono il problema salvando i dati fuori dal container, in uno spazio che sopravvive anche se il container viene ricreato.

Nell’esempio degli articoli sui CRM avrai notato righe come questa dentro i file di configurazione ufficiali:

yaml

volumes:
  - espocrm-data:/var/www/html/data

Quella riga dice a Docker “salva questi dati fuori dal container, in un volume persistente chiamato espocrm-data“. Finché non cancelli anche il volume esplicitamente, i tuoi dati restano al sicuro anche se distruggi e ricrei il container cento volte. Per vedere quali volumi hai sul sistema:

docker volume ls

Tenere Docker pulito nel tempo

Con l’uso, container fermati, immagini vecchie e reti inutilizzate si accumulano e occupano spazio sul tuo Mini PC, soprattutto se hai poco storage. Per ripulire senza toccare quello che stai ancora usando:

docker system prune

Questo comando chiede conferma prima di cancellare, e per design non tocca i volumi (quindi i tuoi dati restano intatti), solo container fermati, immagini non referenziate e reti inutilizzate. Se invece vuoi aggiornare un servizio già installato all’ultima versione dell’immagine, dalla cartella con il suo docker-compose.yml:

docker compose pull
docker compose up -d

Da qui in poi

Con questi passaggi hai tutto quello che ti serve per seguire qualsiasi guida di self hosting sul sito, a partire dai CRM open source di cui abbiamo parlato. 👉 Leggi qui: CRM open source: i migliori per gestire i clienti

Se ancora non hai deciso su cosa far girare tutto questo, dai un’occhiata alla guida sulla degooglizzazione, molti dei servizi che trovi lì si autoospitano esattamente con lo stesso procedimento visto qui. 👉 Leggi qui: Degooglizzazione su Linux

NiPoGi E3B

NiPoGi E3B

AMD 7430U · 16 GB LPDDR4 · 512 GB SSD

Testato
€429,00 su Amazon
Vedi su Amazon →
Testato da IncastroPC
Raspberry Pi 4

Raspberry Pi 4

Quad-Core Cortex A72 · 4 GB LPDDR4 · 64 GB

€159,99 su Amazon
Vedi su Amazon →

Non perderti i prossimi consigli

Guide, recensioni e novità su Linux, Mini PC e open source, dritte sul tuo Telegram. Niente spam, solo quello che vale la pena leggere.

Seguici su Telegram →

IncastroPC partecipa al Programma Affiliazione Amazon EU. Prezzi e disponibilità soggetti a variazione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *