Salta al contenuto principale

Docker Demistificato: Cosa È, Perché Usarlo e le Alternative Open Source che Devi Conoscere

Podman

Nel mondo dello sviluppo software moderno, le parole "container" e "Docker" sono ormai onnipresenti. Ma cosa significa esattamente? Perché così tante aziende e sviluppatori lo usano? E, aspetto fondamentale, sapevi che mentre il cuore di Docker è open source, alcuni suoi strumenti non lo sono? In questo articolo, esploreremo Docker dalle basi, guidandoti nell'installazione su GNU/Linux e presentandoti alternative valide e libere per gestire i tuoi container.

Cosa È Docker? (E Cosa Non È)

Docker è una piattaforma che permette di creare, distribuire ed eseguire applicazioni all'interno di container.

Fermati un attimo: container non è sinonimo di virtual machine (VM).
Questa è la confusione più comune. Una VM virtualizza un intero computer, incluso il sistema operativo (OS), risultando in un'istanza "pesante", lenta ad avviarsi e con un notevole consumo di risorse.

Un container Docker, invece, virtualizza solo il software e le sue dipendenze. I container condividono il kernel del sistema operativo host (Linux), ma sono eseguiti in processi isolati. Il risultato?

  • Leggerezza: Immagini di pochi MB invece di GB.

  • Velocità: Avvio in millisecondi.

  • Efficienza: Puoi eseguire decine di container su una singola macchina.

Pensa a un container come una scatola che contiene il tuo codice, le librerie, le variabili d'ambiente e i file di configurazione. Questa scatola può essere eseguita in modo identico sul tuo laptop, su un server di testing o in produzione.

Perché Si Usa Docker? I Vantaggi Principali

  1. Coerenza tra Ambienti: La classica frase "sul mio computer funziona" diventa un ricordo. Il container che sviluppi localmente è identico a quello in produzione.

  2. Isolamento: Ogni applicazione vive nel suo ambiente, con le sue dipendenze. Un aggiornamento di una libreria per l'App A non romperà l'App B.

  3. Rapidità di Deployment: Un'immagine Docker può essere costruita una volta e eseguita ovunque, semplificando e accelerando i processi di CI/CD (Integrazione e Distribuzione Continue).

  4. Scalabilità: È facile avviare più istanze della stessa immagine per bilanciare il carico di lavoro.

  5. Vasto Ecosistema (Hub Docker): Puoi trovare e utilizzare immagini pre-costruite per database, server web, linguaggi di programmazione e molto altro.

Installazione di Docker Engine su GNU/Linux

Qui è importante fare una distinzione fondamentale, specialmente per gli utenti Linux che valorizzano il software libero.

  • Docker Engine: È il motore che esegue e gestisce i container. È software libero e open source (licenza Apache 2.0). Questo è il cuore di tutto.

  • Docker Desktop: È un'applicazione commerciale e proprietaria che include Docker Engine, ma aggiunge un'interfaccia grafica (UI), gestione semplificata e integrazione con Kubernetes. È pensato principalmente per macOS e Windows.

Su GNU/Linux, non abbiamo bisogno di Docker Desktop. Possiamo installare direttamente il motore open source.

Esempio di installazione su Debian/Ubuntu:

  1. Aggiorna gli indici dei pacchetti:

    sudo apt update

  2. Installa i pacchetti necessari:

    sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release

  3.  Aggiungi la chiave GPG ufficiale di Docker:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

  4.  Aggiungi il repository di Docker:

    echo "deb [arch=amd64 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

  5.  Installa Docker Engine:

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io

  6.  Verifica l'installazione:

    sudo docker run hello-world

    Se vedi un messaggio di benvenuto, Docker Engine è installato e funzionante!

Nota: Ricorda di aggiungere il tuo utente al gruppo docker per non dover usare sempre sudo (sudo usermod -aG docker $USER), ma sii consapevole delle implicazioni di sicurezza.

Oltre Docker: Eccellenti Alternative Open Source

Sebbene Docker Engine sia open source, l'ecosistema Docker sta spingendo verso soluzioni proprietarie. Fortunatamente, la comunità ha creato alternative robuste e, in alcuni casi, tecnicamente superiori.

1. Podman: Docker senza Demone

Podman è l'alternativa più discussa e adottata. È progettato per essere un sostituto drop-in per Docker, ma con un'architettura fondamentale diversa.

  • Cos'è: Un motore di container che non utilizza un demone in esecuzione continuativa (daemon-less). Ogni container è avviato come un processo child dell'utente che lo esegue.

  • Punti di Forza:

    • Sicurezza Rootless: Puoi eseguire container senza privilegi di root, riducendo drasticamente la superficie di attacco. Questo è un enorme vantaggio rispetto a Docker.

    • Compatibilità con Docker: Riconosce i comandi docker (ad esempio docker run diventa podman run). Puoi persino creare un alias alias docker=podman.

    • Integrazione con systemd: Puoi gestire i container come servizi systemd in modo nativo.

  • A Chi è Rivolto: A chi cerca una sostituzione diretta e più sicura di Docker, specialmente in ambienti enterprise o per chi è sensibile alle questioni di sicurezza.

2. Rancher Desktop

Se sei un utente di Docker Desktop e cerchi un'alternativa libera e potente, Rancher Desktop è la risposta.

  • Cos'è: Un'applicazione desktop che fornisce un'esperienza completa per la gestione di container e Kubernetes. Sostituisce direttamente Docker Desktop.

  • Punti di Forza:

    • Scegli il Motore: Ti permette di scegliere se usare containerd (con nerdctl) o Podman come motore sottostante.

    • Kubernetes Integrato: Include e gestisce automaticamente un cluster Kubernetes locale, perfetto per sviluppare e testare applicazioni cloud-native.

    • Interfaccia Grafica (UI): Offre una UI per gestire immagini, container e le impostazioni di Kubernetes, proprio come Docker Desktop.

  • A Chi è Rivolto: A sviluppatori che lavorano con Kubernetes e che vogliono un ambiente di sviluppo containerizzato completo e open source, senza compromessi.


Docker ha indubbiamente cambiato il modo in cui concepiamo lo sviluppo e il deployment del software. Comprenderne i principi è essenziale per qualsiasi professionista IT.

Tuttavia, è altrettanto importante essere consapevoli dell'ecosistema in cui si opera. Docker Engine rimane un valido progetto open source, ma per chi cerca alternative più sicure (Podman) o una sostituzione completa e open source di Docker Desktop (Rancher Desktop), il panorama del software libero offre soluzioni eccellenti e pronte per la produzione.

Non esitare a esplorare Podman per i suoi vantaggi in termini di sicurezza o Rancher Desktop per un'eccezionale esperienza di sviluppo con Kubernetes (soprattutto se sei su Mac o Windows). La libertà di scelta è un altro dei grandi vantaggi di lavorare su GNU/Linux.