Lo sviluppo di applicazioni spesso comporta la gestione di database complessi, linguaggi di programmazione, framework, dipendenze e altro ancora. Inoltre, potreste avere problemi di compatibilità quando lavoate con diversi sistemi operativi (OS). Ognuna di queste variabili può avere un impatto negativo sul vostro flusso di lavoro.

Per risolvere questi problemi, potete iniziare a usare Docker. Questo strumento vi permette di creare e gestire applicazioni in ambienti containerizzati. In definitiva, Docker può eliminare molte complicate operazioni di configurazione e rendere lo sviluppo più semplice ed efficiente.

In questo articolo risponderemo alla domanda “cos’è Docker?” e vi spiegheremo come funziona. Poi vi mostreremo alcuni dei suoi principali casi d’uso e come iniziare a lavorarci anche se siete principianti. Iniziamo!

Cos’È Docker?

Cos’è esattamente Docker? È una piattaforma open-source per lo sviluppo di applicazioni in una sandbox. I suoi ambienti virtualizzati leggeri sono noti come container:

Il sito web di Docker con il motto Develop Faster, Run anywhere
Docker

I container esistono dal 1979, ma Docker li ha resi più accessibili. Con Docker, chi sviluppa può costruire, testare e distribuire le proprie applicazioni localmente o su un server di produzione.

Dal rilascio di Docker 1.0 nel 2014, ha standardizzato l’uso dei container sia per i singoli sviluppatori che per le aziende. Oggi conta oltre 13 milioni di utenti, tra cui importanti aziende come Netflix, Target e Adobe:

Schermata delle aziende che usano Docker, tra cui Adobe, AT&T, Blue Apron e Netflix
Aziende che usano Docker

Inoltre, di anno in anno Docker è sempre più adottato. Secondo Datadog, quasi il 25% delle aziende ha iniziato a usare Docker per monitorare le proprie applicazioni. Dal 2015, questa percentuale è cresciuta di 3-5 punti percentuali ogni anno:

Grafico su una linea temporale dal 2014 al 2018 che mostra l’incremento nelle percentuali di utilizzo di Docker: da 3 a 5 punti percentuali ogni anno
Aumenta l’utilizzo di Docker da parte delle aziende (Fonte: Datadog)

Come possiamo vedere, Docker è diventato una piattaforma popolare per lo sviluppo e il deployment di applicazioni. Per capire meglio la sua popolarità, vediamo come funziona il software Docker.

Docker vs Macchine Virtuali

Con Docker è possibile impacchettare un’applicazione in un’unità standardizzata, che può essere utilizzata per lo sviluppo del software. Questa unità, o container, include la codifica e le dipendenze dell’applicazione in modo che possa essere facilmente eseguita su qualsiasi ambiente informatico.

Prima di Docker, le aziende usavano spesso macchine virtuali (VM) per eseguire le applicazioni. Queste possono emulare i computer fisici, consentendo a chi sviluppa di trasformare un server in più server. Tuttavia, questo approccio può comportare alcuni svantaggi.

Ogni macchina virtuale contiene una copia completa del sistema operativo e dell’applicazione, oltre ai file binari e alle librerie necessarie. Questi file possono occupare decine di GB su un computer. Inoltre, la virtualizzazione dell’hardware per un sistema operativo guest può richiedere un notevole overhead.

Invece di virtualizzare l’hardware, i container virtualizzano il sistema operativo. In Docker, i container sono astrazioni a livello di app che possono contenere sia codice che dipendenze. Sulla stessa macchina, più container possono essere eseguiti come processi isolati:

Illustrazione che mette a confronto Docker e le Virtual Machines
Confronto tra Docker e le macchine virtuali (Fonte: ResearchGate)

Di conseguenza, i container Docker occupano in genere meno spazio. Inoltre, possono contenere più applicazioni senza un numero eccessivo di macchine virtuali e sistemi operativi.

Come Funziona Docker?

Immaginate di dover spedire un carico da un luogo all’altro. Nell’era moderna, potete farlo facilmente con i container. Questi container tengono insieme determinati oggetti in un ambiente sigillato, consentendo il trasporto su navi, treni o aerei.

Docker funziona in modo molto simile. In parole povere, Docker ha standardizzato il metodo di sviluppo e distribuzione del software.

Docker funziona con i container. Questi possono avere componenti riutilizzabili come Python, Node, dipendenze e altro ancora. In questo modo potete distribuire i container ovunque senza preoccuparvi dei problemi di compatibilità.

All’inizio Docker può risultare complicato, quindi vediamo tutti i componenti principali di questo software. Una volta comprese queste caratteristiche chiave, sarete in grado di ottimizzare lo sviluppo delle vostre applicazioni!

Motore Docker

Docker Engine è la tecnologia client-server per la creazione e la containerizzazione di applicazioni in Docker. In sostanza, supporta tutte le attività necessarie per l’esecuzione di un’applicazione basata su container:

Diagramma sul funzionamento di Docker e delle sue tre parti attive: client, docker host e registry
Diagramma sul funzionamento di Docker (Fonte: Docker)

Questi sono i componenti principali del motore Docker:

  • Docker Daemone: Gestisce le immagini Docker, i container, le reti e i volumi. Inoltre, ascolta le richieste dell’API Docker e le elabora.
  • Docker Engine REST API: Un’API sviluppata da Docker che interagisce con il daemon.
  • Docker CLI: l’interfaccia a riga di comando per comunicare con il daemon Docker.

Con Docker Engine potete eseguire applicazioni containerizzate su qualsiasi infrastruttura. Questa configurazione contribuisce al runtime per container leader del settore di Docker.

Immagine Docker

Un’immagine Docker è un pacchetto di software eseguibile che include tutto il codice sorgente, le dipendenze e gli strumenti necessari per eseguire un’applicazione. Le immagini sono modelli di sola lettura che forniscono istruzioni per la creazione di un container.

Potete comprendere meglio le immagini Docker considerandole come dei progetti. Esse contengono delle istantanee di ciò che un container includerà quando verrà eseguito.

In un’immagine ci sono più livelli sovrapposti. Se volete creare un’immagine di un server web, per esempio, potete includere Ubuntu Linux all’inizio. Poi potete sovrapporre Apache e PHP.

Quando create un’immagine Docker, è meglio posizionare i livelli più variabili più in alto nello stack. In questo modo, se doveste apportare una modifica, non dovrete ricostruire l’intera immagine.

Container Docker

Come abbiamo detto in precedenza, i container sono parti fondamentali di Docker. In parole povere, un container Docker è un’area isolata in cui un’applicazione può essere eseguita senza influenzare il resto del sistema. Questa unità di software impacchetta tutto il codice e le dipendenze in modo da poterlo trasferire facilmente da un’applicazione all’altra.

Ecco alcuni vantaggi dell’uso dei container Docker:

  • Standard: Sebbene i container esistano da decenni, Docker ha creato lo standard industriale per il loro utilizzo. I container Docker sono incredibilmente portatili e facili da usare.
  • Leggeri: Poiché i container condividono il kernel del sistema operativo, non è necessario un sistema operativo diverso per ogni applicazione. Di conseguenza, le vostre applicazioni possono essere eseguite in modo più efficiente e ridurre i costi di server e licenze.
  • Sicuri: A differenza delle macchine virtuali, i container isolano le applicazioni, rendendole più sicure. Con Docker, i vostri container avranno funzionalità di isolamento predefinite.

In definitiva, i container Docker offrono più vantaggi delle macchine virtuali. Anche se isolano e allocano le risorse in modo simile, i container sono solitamente più portatili, efficienti e sicuri.

Docker Compose

Docker Compose è uno strumento progettato per eseguire più container come un unico servizio. Se la vostra applicazione richiede sia NGINX che MySQL, Docker Compose vi permette di creare un unico file che avvia entrambi i container. In questo modo si evita di doverli avviare separatamente.

Ecco i tre passaggi fondamentali per usare Docker Compose:

  1. Create un file Docker per definire l’ambiente dell’applicazione in modo che possa essere riprodotto.
  2. Definite tutti i servizi della vostra applicazione in un file docker-compose.yml in modo che possano essere eseguiti in un ambiente isolato.
  3. Usate il comando Docker Compose per avviare ed eseguire la vostra applicazione.

Essenzialmente, Docker Compose permette a più container di essere eseguiti in modo isolato. Tuttavia, possono interagire tra loro quando necessario.

Per esempio, Compose può aiutarvi a creare e configurare le dipendenze dei servizi della vostra applicazione, come database, cache o API di servizi web.

Profilo Docker

Un Dockerfile è un documento di testo che contiene le istruzioni per la creazione di immagini Docker. Leggendo questo file, Docker costruirà automaticamente nuove immagini.

Il comando docker build crea un’immagine a partire da un Dockerfile e da un contesto. Questo contesto è un insieme di file che si trova in un percorso o in un URL specificato.

Per prima cosa, inserite il seguente comando:

docker build

Questo invia l’intero contesto al daemon Docker. Per puntare a un file Docker nel vostro file system, usate questo comando:

docker build -f /path/to/a/Dockerfile

Se la compilazione ha successo, potete specificare un repository e un tag dove volete salvare la nuova immagine:

docker build -t shykes/myapp

Successivamente, il daemon Docker eseguirà una convalida del file Docker. Se c’è un problema di sintassi, restituirà un errore.

Docker Desktop

Per iniziare a usare Docker sul vostro ambiente Mac, Linux o Windows, potete installare Docker Desktop. Si tratta di un’interfaccia semplice e facile da usare per gestire container, applicazioni e immagini sul vostro computer:

Pagina web da cui scaricare Docker Desktop
Docker Desktop

Con Docker Desktop, non dovrete usare la riga di comando per eseguire operazioni essenziali. Questo può accelerare il flusso di lavoro dello sviluppo:

Schermata dell’interfaccia di Docker Desktop
Bacheca di Docker Desktop

Inoltre è dotato di un Marketplace di estensioni integrato che facilita l’utilizzo di strumenti per sviluppatori di terze parti. Questi includono software per il debug, il test e la sicurezza delle applicazioni:

Pagina di Docker dedicata al Marketplace delle estensioni
Docker Desktop Extensions Marketplace

Inoltre, Docker Desktop è gratuito per l’uso personale e per le piccole imprese. Tuttavia, tenete presente che le aziende più grandi dovranno acquistare un abbonamento, a partire da 5 dollari al mese.

Docker Hub

Docker Hub è una piattaforma dove potete trovare e condividere immagini di container. È il più grande repository di immagini di container al mondo, con risorse provenienti da sviluppatori della comunità, progetti open-source e fornitori indipendenti di software (ISV):

Schermata di Docker Hub
Docker Hub

Ecco alcune funzioni incluse in Docker Hub:

  • Repository per il push e il pull delle immagini dei container
  • Creazione di team e organizzazioni con accesso ai repository privati
  • Immagini ufficiali di Docker
  • Immagini di Docker Verified Publisher
  • Creazione di immagini di container da GitHub o Bitbucket e invio a Docker Hub
  • Attivazione di azioni con i webhook

Per iniziare a usare Docker Hub, dovrete creare il vostro primo repository. Dovrete semplicemente dargli un nome e specificarne la visibilità:

Pagina di Docker Hub da cui creare un repository
Creare un repository Docker Hub

A questo punto, potete scaricare Docker Desktop e iniziare a prelevare e inviare immagini di container da Docker Hub. Vedrete questi push sotto il tag latest nel vostro nuovo repository.

Per Cosa Si Usa Docker?

Docker è stato progettato principalmente per DevOps e developer. Questo strumento consente a chi lavora nello sviluppo di creare, personalizzare e distribuire applicazioni come container portatili e leggeri. Questa configurazione impacchetta tutte le dipendenze in un’unica unità che può essere eseguita praticamente su qualsiasi sistema operativo.

Ecco un tipico caso d’uso di Docker:

  1. Gli sviluppatori scrivono il codice a livello locale e lo condividono con i loro team usando i container Docker.
  2. Portano l’applicazione in un ambiente di test dove è facile eseguire test automatici e manuali.
  3. Quando vengono individuati dei bug, gli sviluppatori li risolvono nell’ambiente di sviluppo. Per testare le modifiche, le distribuiscono nuovamente nell’ambiente di test.
  4. Dopo che gli sviluppatori hanno risolto il bug, l’immagine aggiornata viene inviata all’ambiente di produzione.

Grazie a questo flusso di lavoro, potete testare un nuovo software senza eseguire un’installazione manuale. Per esempio, potreste trovare difficile e noioso configurare un server MySQL. Potete invece usare la CLI di Docker per eseguire questo compito con un solo comando.

Dato che Docker ha una propria CLI, i principianti possono usarla per imparare a usare la linea di comando. Dopo aver configurato Docker in un ambiente Linux, potete iniziare a usare i comandi Linux. In questo modo potrete eseguire le attività di amministrazione del sistema in modo più rapido ed efficiente.

Inoltre, se volete iniziare a sviluppare siti WordPress locali e offline, potete usare Docker per installare DevKinsta. La nostra suite di sviluppo è basata su Docker e vi permette di creare e gestire siti come singoli container:

Schermata della scheda Siti di DevKinsta con i siti WordPress containerizzati
I siti WordPress containerizzati di DevKinsta

Rispetto ad altri strumenti di sviluppo locale, DevKinsta usa meno risorse mantenendo prestazioni quasi native. Con un sito DevKinsta alimentato da Docker, potete sviluppare WordPress in modo rapido e sicuro. Inoltre, DevKinsta rende più facile l’invio di email di prova e l’esecuzione di altre attività amministrative.

Pro e Contro dell’Uso di Docker

Ora che avete capito quali sono i componenti principali di Docker, discutiamo i suoi principali vantaggi e svantaggi. Poi potrete decidere se vi sarà utile per la gestione delle vostre applicazioni software.

Vantaggi

Quando lavorate nello sviluppo, alcune attività possono diventare noiose e ripetitive se eseguite manualmente. Con i container Docker potete programmare l’automazione di queste attività. L’utilizzo di cron job può ridurre significativamente il vostro carico di lavoro e ottimizzare il vostro tempo.

Inoltre, Docker è altamente portatile. Permette a tutti i membri del team di sviluppo di lavorare sulle applicazioni, anche su server, macchine o sistemi operativi diversi. Questa configurazione può eliminare molti dei problemi che derivano dalle incompatibilità di piattaforma.

Rispetto alle macchine virtuali, i container Docker consentono di risparmiare spazio. Sebbene Docker e le macchine virtuali funzionino in modo simile, Docker è molto più leggero.

Inoltre, Docker ha una solida comunità. Partecipando agli eventi della comunità Docker, potete incontrare e connettervi con altri utenti Docker sia di persona che online:

Homepage della community di Docker
Community Docker

Potrete anche consultare i numerosi forum della comunità di Docker. Se siete principianti, queste discussioni possono aiutarvi a ottenere consigli sull’uso di questa piattaforma.

Controindicazioni

Come abbiamo già detto, Docker può essere più efficiente delle macchine virtuali. Tuttavia, l’esecuzione delle applicazioni su un server fisico è solitamente molto più veloce.

Docker può anche comportare una curva di apprendimento ripida. Non è stato progettato per eseguire applicazioni con un’interfaccia grafica (GUI). Ciò significa che dovrete imparare la linea di comando, il che può essere difficile per i principianti.

Infine, i container Docker vengono eseguiti sul sistema operativo di un host. Il computer host può essere compromesso se in questi container si nasconde un software dannoso.

Come Iniziare a Usare Docker

Per iniziare a usare Docker, dovete visitare il sito web principale. Quindi, scaricate la versione compatibile con il sistema operativo del vostro computer.

Se avete un computer Mac, dovrete scegliere la versione di Docker per chip Intel o Apple. Ci sono anche opzioni per gli utenti Windows e Linux.

Una volta aperto il file scaricato, verrà installato Docker Desktop sul vostro computer. Successivamente, aprite Docker Hub e create un nuovo account:

Modulo di Docker in cui inserire nome e email per creare l’account
Creare un account su Docker

Ora potete aprire Docker Desktop e accedere. Poi aprite la riga di comando o la finestra di bash ed eseguite questo comando:

docker run -d -p 80:80 docker/getting-started

Una volta eseguita questa operazione, vedrete un nuovo contenitore nella bacheca di Docker Desktop. Il suo nome sarà generato in modo casuale per il vostro account:

Schermata di Docker con la lista dei container creati
Nuovo container Docker

Avrete anche una nuova immagine Docker. Se andate nella scheda Images, vedrete che è in uso un’immagine docker/getting-started:

Nuova immagine Docker
Nuova immagine Docker

Ora avete tutto ciò che vi serve per iniziare a gestire i vostri container locali!

Riepilogo

Se dovete gestire più applicazioni, Docker può essere uno strumento efficace per organizzarle in modo indipendente. Grazie all’uso dei container, Docker può aiutarvi a sviluppare ogni applicazione senza il rischio di conflitti tra linguaggi di programmazione, librerie o framework.

Sebbene Docker sia spesso più efficiente di una macchina virtuale (VM), lavorare su un server fisico può essere più veloce. Poiché si basa anche su un’interfaccia a riga di comando, Docker potrebbe non essere la scelta ideale per i principianti assoluti.

Come sviluppatori e sviluppatrici di WordPress, è probabile che abbiate bisogno di creare rapidamente ambienti di test locali. Usando DevKinsta, potete creare siti WordPress basati su Docker. Così potrete iniziare a sviluppare temi e plugin senza conflitti!