Per gli sviluppatori di software e di applicazioni c’è una nuova piattaforma che rappresenta ormai uno strumento standard e si chiama Docker. Questa piattaforma consente di creare in modo rapido, testare e distribuire qualsiasi tipo di applicazione, perché si basa sull’utilizzo di unità standardizzate chiamate container. Gli sviluppatori possono così usare Docker, che in pratica è un sistema operativo per container, per creare applicazioni pacchettizzate, dove ogni container si comporta proprio come un contenitore in cui si trova tutto il necessario per la corretta esecuzione dell’applicazione che si sta sviluppando: dalle librerie agli strumenti di sistema, dal codice al runtime.
I container si comportano come una macchina virtuale, dove però l’ambiente viene solo parzialmente virtualizzato.
Ogni “contenitore” agisce come ambiente isolato, in cui il sistema operativo non è eseguibile in modo completo, dato che il kernel è condiviso con l’host e virtualizzato a livello software. Queste caratteristiche lo rendono lo strumento ideale per gli sviluppatori e gli amministratori di sistema, che possono tenere sotto controllo le applicazioni, avviarle in modo rapido e testarle su qualsiasi ambiente.
La tecnologia a container si è rivelata negli ultimi anni particolarmente utile, perché ogni container contiene una immagine che può essere predisposta o scaricata in qualsiasi tipo di ambiente.
La piattaforma software Docker è uno strumento per produrre, distribuire ed eseguire i container utilizzando come sistema operativo quello dell’host, così da operare la virtualizzazione solo a livello di software. I processi quindi possono essere isolati ed eseguiti in maniera indipendente, raggiungendo così l’obiettivo dei container, che permettono di eseguire più processi e applicazioni in modo separato, così da sfruttare meglio l’infrastruttura esistente e garantire un livello di sicurezza alto.
Le versioni moderne di Docker si basano su diversi componenti indipendenti: la Docker CLI, cioè la command line che permette l’interazione col terminale e invia i comandi al Docker daemon, che li esegue localmente o su un host remoto. Il componente finale è il runtime, che richiama le funzionalità del kernel e permette l’avvio effettivo del container.
docker run [nome a scelta]
ad esempio, per il nome a scelta si potrà usare “Ciao mondo”. In questo modo, si creerà una prima immagine salvata come “Ciao mondo”, e nella schermata saranno elencate tutte le indicazioni per creare la propria immagine, come ad esempio da dove vengono presi i file nella linea FROM, dove vengono eseguiti nella linea RUN e da dove vengono copiati nelle linee COPY. Una volta che tutte le informazioni e i file sono stati recuperati, si potrà procedere con il comando
docker build -t [nome immagine],
che permette la costruzione dell’immagine mentre il tag -t le assegna il nome scelto. Una volta creata l’immagine, si potrà avviare un “contenitore” utilizzando il comando
docker run -d -p [numero porta host:porta container] [nome immagine],
dove il comando -d permette l’esecuzione in background del container mentre -p indica la mappatura delle porte da utilizzare per visualizzare sul local host l’immagine creata. Da questa immagine di partenza, si potranno poi utilizzare ulteriori comandi per creare le proprie applicazioni con Docker.
Docker è in grado di riutilizzarli per velocizzare la creazione dei container, ma questa struttura permette anche di controllare e monitorare le diverse build in modo facile e rapido, anche utilizzando il rollback: se un’immagine non è soddisfacente, si potrà riportare alla versione precedente. Inoltre, è funzionante in ogni tipo di ambiente e garantisce una distribuzione rapida del software: la fase di configurazione ed esecuzione su un nuovo hardware grazie ai container Docker passa da giorni a pochi secondi.
Con Docker si possono creare container per ogni processo e condividere i processi simili con le nuove applicazioni, così da non dover riavviare il sistema operativo ogni volta che si vuole aggiungere o spostare un container e velocizzare il deployment. Questo rende i container Docker dei pacchetti standardizzati e leggeri da utilizzare, che velocizzano e semplificano di molto il lavoro degli sviluppatori.