Prima o poi arriva quel momento. Hai scritto un programma, sul tuo computer funziona, lo porti altrove e improvvisamente gli manca una libreria, un interprete, forse una figura paterna. Tu dici «ma da me parte». Il computer dell’altro risponde con un traceback. Il dialogo finisce lì.
Docker serve anche a rendere questa conversazione meno frequente: impacchettiamo applicazione e dipendenze in un’immagine e da quella facciamo partire dei container. Non risolve i bug. Li rende più facili da trasportare, che è comunque una forma di progresso.
Il nostro piano in tre puntate
Oggi installiamo e configuriamo Docker su Debian e Arch. Nella seconda puntata apriamo il primo container e impariamo a capire quando sta lavorando e quando sta semplicemente facendo scena. Nella terza costruiamo un piccolo catalogo di Gunpla: Vue.js davanti, FastAPI in mezzo, PostgreSQL dietro. Tre container per dei robottini Gundam. Finalmente un uso della tecnologia che posso spiegare senza una slide con scritto «sinergia».
Immagine, container e quella faccenda del kernel
L’immagine è il modello, il container è un’istanza in esecuzione di quel modello. Puoi creare più container dalla stessa immagine. Il volume è dove metti i dati che devono durare più del container. Una rete permette ai servizi di parlarsi.
Su Linux i container condividono il kernel dell’host: non sono macchine virtuali complete. L’isolamento aiuta, ma non è un campo di forza di una colonia spaziale. Qui usiamo Docker Engine su una macchina Debian o Arch con systemd, non serve Docker Desktop. Serve un utente con sudo e una connessione a Internet.
Debian: il repository ufficiale
I comandi seguenti sono per Debian 12 o 13. Su una macchina già attrezzata controlla prima eventuali pacchetti concorrenti: docker.io, docker-compose, docker-doc, docker-buildx, podman-docker, containerd e runc. Se presenti, pianificane la rimozione prima di mescolare repository. Il server aziendale non è il posto ideale per improvvisare un cambio di motore durante il concerto.
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/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 > /dev/null <<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
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginIl repository segue il codename della distribuzione. Non sostituirlo a caso con il nome di una release trovato in un tutorial del 2019: il copia e incolla è comodo, la necromanzia dei pacchetti meno. La procedura completa e i conflitti sono nella documentazione Docker per Debian.
Arch: pochi comandi, aggiornamento completo
sudo pacman -Syu docker docker-compose docker-buildxUsiamo i repository ufficiali, senza AUR per sport. L’aggiornamento completo evita di trasformare una rolling release in un collage di epoche geologiche. Il pacchetto si chiama docker-compose; il comando che useremo è docker compose, con lo spazio. Riferimenti: Docker e Compose nei repository Arch.
Accendiamo il motore, su entrambe
sudo systemctl enable --now docker
sudo systemctl status docker --no-pager
sudo docker version
sudo docker compose version
sudo docker run --rm hello-worldVersion deve mostrare client e server. Hello-world stampa un messaggio e termina: un container può fare una cosa, finirla e andare a casa. Una professionalità quasi commovente. Se non raggiungi il daemon, controlla servizio e permessi; se non scarichi l’immagine, controlla rete, DNS e proxy.
Permessi: la comodità ha le chiavi di casa
Negli esempi iniziamo con sudo. Puoi continuare così. L’alternativa comune è aggiungere il tuo utente al gruppo docker:
sudo usermod -aG docker "$USER"Poi esci dalla sessione e rientra, e verifica con docker info. Quel gruppo concede privilegi equivalenti a root: fallo soltanto per utenti fidati. Non è una soluzione correggere il socket con chmod 666. Per evitare un daemon con privilegi root esiste anche la modalità rootless, che richiede una configurazione dedicata.
Due impostazioni mentali prima del decollo
Pubblicheremo le porte su 127.0.0.1: il laboratorio sarà raggiungibile dal tuo computer. Una porta Docker pubblicata su tutte le interfacce può aggirare le aspettative che hai sulle regole di ufw; per questo non apriamo cose a caso. E i dati importanti andranno nei volumi, perché cancellare un container non deve cancellare il lavoro del pomeriggio.
Se hai ottenuto il saluto di hello-world, basta così. Nessun cluster, nessuna certificazione, nessuno che pronuncia «orchestrazione» con voce da documentario. Nella prossima puntata diamo una pagina web al nostro scatolone.
