Docker è una piattaforma open source che consente agli sviluppatori di creare, implementare, eseguire, aggiornare e gestire i container.
I container sono componenti standardizzati ed eseguibili che combinano il codice sorgente dell'applicazione con le librerie e le dipendenze del sistema operativo necessarie per eseguire tale codice in qualsiasi ambiente.
È importante notare che quando si parla di Docker, di solito ci si riferisce a Docker Engine, il runtime per la creazione e l'esecuzione di container. Docker fa riferimento anche a Docker, Inc.1, l'azienda che vende la versione commerciale di Docker. Si riferisce anche al progetto open source Docker2, al quale Docker, Inc. e numerose altre organizzazioni e individui contribuiscono.
I container semplificano lo sviluppo e l'implementazione di applicazioni distribuite. Sono diventati sempre più popolari man mano che le organizzazioni passano allo sviluppo cloud-native e agli ambienti ibridi multicloud. Gli sviluppatori possono creare container senza Docker lavorando direttamente con le funzionalità integrate in Linux® e in altri sistemi operativi, ma Docker rende la containerizzazione più rapida e semplice. In questo momento, Docker ha riportato che oltre 20 milioni di sviluppatori utilizzano la piattaforma ogni mese3. Come altre tecnologie di containerizzazione, tra cui Kubernetes, Docker svolge un ruolo fondamentale nello sviluppo del software moderno, in particolare nell'architettura dei microservizi.
A differenza dell'approccio monolitico tradizionale di un'applicazione di grandi dimensioni, strettamente accoppiata, i microservizi offrono un framework architettonico cloud-native. Questo framework si compone di una singola applicazione da numerosi componenti o servizi più piccoli, liberamente accoppiati e distribuibili in modo indipendente. Ogni servizio può essere containerizzato utilizzando Docker, semplificando l'implementazione e consentendo ai team di implementare nuove versioni e scalare le applicazioni in base alle esigenze.
I container sono resi possibili dalle funzionalità di isolamento e virtualizzazione dei processi integrate nel kernel Linux. Queste funzionalità includono gruppi di controllo (Cgroups) per l'allocazione delle risorse tra processi e spazi dei nomi per limitare l'accesso o la visibilità di un processo ad altre risorse o aree del sistema.
I container consentono a più componenti dell'applicazione di condividere le risorse di una singola istanza del sistema operativo host. Questa condivisione è simile al modo in cui un hypervisor consente a più macchine virtuali (VM) di condividere unità di elaborazione centrale (CPU), memoria e altre risorse di un singolo server hardware.
La tecnologia dei container offre tutte le funzioni e i vantaggi delle macchine virtuali (VM), tra cui l'isolamento delle applicazioni e la scalabilità a costi contenuti, oltre ad altri vantaggi significativi:
Le organizzazioni che utilizzano i container segnalano numerosi altri vantaggi, tra cui una migliore qualità delle app, una risposta più rapida ai cambiamenti del mercato e altro ancora.
Docker è lo strumento di containerizzazione più utilizzato, con una quota di mercato pari all'82,84%.4 Docker oggi è così popolare che "Docker" e "container" sono utilizzati in modo intercambiabile. Tuttavia, le prime tecnologie legate ai container erano disponibili da anni, addirittura da decenni5, prima che Docker fosse rilasciato pubblicamente come open source nel 2013.
In particolare, nel 2008, LinuXContainers (LXC) è stato implementato nel kernel Linux, abilitando completamente la virtualizzazione per una singola istanza di Linux. Sebbene LXC sia attualmente ancora utilizzato, sono disponibili tecnologie del kernel Linux più recenti. Ubuntu, un moderno sistema operativo Linux open source, offre anche questa funzionalità. Docker consente agli sviluppatori di accedere a queste funzionalità di containerizzazione native utilizzando semplici comandi e di automatizzarle attraverso una application programming interface (API).
L'utilizzo di Docker rispetto al più vecchio e meno compatibile LXC presenta numerosi vantaggi.
Mentre i container LXC fanno spesso riferimento a configurazioni specifiche della macchina, i container Docker vengono eseguiti senza modifiche su qualsiasi desktop, data center o ambiente di cloud computing.
Con Docker, gli sviluppatori possono combinare più processi all'interno di un unico container. Questa flessibilità consente di creare un'applicazione che può continuare a funzionare anche se una delle sue parti viene disattivata per consentire un aggiornamento o una riparazione.
Docker è in grado di creare automaticamente un container in base al codice sorgente dell'applicazione.
Docker può tenere traccia delle versioni di un'immagine del container, eseguire il rollback alle versioni precedenti e tracciare chi ha creato una versione e come. Docker può inoltre caricare solo le versioni delta (versioni parziali dei moduli software) tra una versione esistente e una nuova.
Gli sviluppatori possono accedere a un registro open source all'interno del quale sono presenti migliaia di container forniti dagli utenti.
Oggi, la containerizzazione Docker funziona anche con Microsoft Windows Server e Apple MacOS. Gli sviluppatori possono eseguire i container Docker su qualsiasi sistema operativo. Tutti i principali fornitori di servizi cloud (CSP), tra cui Amazon Web Services (AWS), Microsoft Azure, Google Cloud Services e IBM Cloud®, offrono servizi specifici per aiutare gli sviluppatori a creare, implementare ed eseguire applicazioni containerizzate con Docker.
Docker utilizza un'architettura client/server. Di seguito è riportata un'analisi dettagliata dei componenti principali associati a Docker, insieme ad altri termini e strumenti Docker.
Host Docker: un host Docker è una macchina fisica o virtuale con Linux (o un altro sistema operativo compatibile con Docker-Engine).
Docker Engine: si tratta di un'applicazione client/server che include il daemon Docker, un'API Docker che interagisce con il daemon e un'interfaccia della riga di comando (CLI) che si interfaccia con il daemon.
Daemon Docker: il daemon di Docker è un servizio che crea e gestisce immagini Docker utilizzando i comandi del client. Fondamentalmente, il daemon di Docker ha funzione di centro di controllo per l'implementazione del Docker.
Client Docker: il client Docker fornisce la CLI che accede all'API di Docker (un'API REST) per comunicare con il daemon di Docker tramite socket Unix o un'interfaccia di rete. Il client può essere collegato a un daemon in remoto, oppure uno sviluppatore può eseguire il daemon e il client sullo stesso sistema informatico.
Oggetti Docker: gli oggetti Docker sono i componenti di una implementazione Docker che aiutano a creare pacchetti e distribuire applicazioni. Includono immagini, container, reti, volumi, plug-in e altro ancora.
Container Docker: i container Docker sono le istanze attive in esecuzione delle immagini Docker. Mentre le immagini Docker sono file di sola lettura, i container sono contenuti attivi, effimeri ed eseguibili. Gli utenti possono interagire con loro e gli amministratori possono modificare le impostazioni e le condizioni utilizzando i comandi Docker.
Immagini Docker: le immagini Docker contengono il codice sorgente dell'applicazione eseguibile e tutti gli strumenti, le librerie e le dipendenze che il codice dell'applicazione deve eseguire come container. Quando uno sviluppatore esegue l'immagine Docker, questa diventa un'istanza (o più istanze) del container.
La creazione di immagini Docker da zero è possibile, ma la maggior parte degli sviluppatori le estrae da repository comuni. Gli sviluppatori possono creare più immagini Docker da una singola immagine di base, condividendo le caratteristiche comuni del proprio stack.
Le immagini Docker sono costituite da livelli, e ogni livello corrisponde a una versione dell'immagine. Ogni volta che uno sviluppatore apporta modifiche a un'immagine, viene creato un nuovo livello superiore e questo livello superiore sostituisce il livello superiore precedente come versione corrente dell'immagine. I livelli precedenti vengono salvati per i rollback o per essere utilizzati nuovamente in altri progetti.
Ogni volta che viene creato un container da un'immagine Docker, viene creato un nuovo livello, chiamato livello container. Le modifiche apportate al container, ad esempio l'aggiunta o l'eliminazione di file, vengono salvate nel livello del container e queste modifiche esistono solo mentre il container è in esecuzione.
Questo processo iterativo di creazione di immagini aumenta l'efficienza complessiva in quanto è possibile eseguire più istanze di container attivi da una singola immagine di base. In questo caso, viene utilizzato uno stack comune.
Creazione di Docker: la creazione di Docker è un comando con strumenti e funzioni per la creazione di immagini Docker.
File Dockerfile: ogni container Docker inizia con un semplice file di testo contenente le istruzioni per la creazione dell'immagine del container Docker. Dockerfile automatizza il processo di creazione di immagini Docker. È fondamentalmente un elenco di istruzioni CLI che Docker Engine eseguirà per assemblare l'immagine. L'elenco dei comandi Docker è vasto ma standardizzato: le operazioni Docker funzionano allo stesso modo indipendentemente dal contenuto, dall'infrastruttura o da altre variabili di ambiente.
Documentazione di Docker: la documentazione di Docker, o documenti Docker, si riferisce alla libreria ufficiale di risorse, manuali e guide di Docker per la creazione di applicazioni containerizzate.
Docker Hub: Docker Hub6 è il repository pubblico di immagini Docker, che si autodefinisce la più grande libreria e community al mondo per le immagini container7. Contiene oltre 100.000 immagini di container provenienti da fornitori di software commerciali, progetti open source e singoli sviluppatori. Docker Hub include immagini prodotte da Docker, Inc., immagini certificate appartenenti al Docker Trusted Registry e migliaia di altre immagini.
Tutti gli utenti di Docker Hub possono condividere liberamente le proprie immagini. Possono inoltre scaricare immagini base predefinite dal filesystem di Docker come punto di partenza per qualsiasi progetto di containerizzazione.
Esistono altri archivi di immagini, tra cuiGitHub8. GitHub è un servizio di hosting di repository noto per gli strumenti di sviluppo di applicazioni e come piattaforma che promuove collaborazione e comunicazione. Gli utenti di Docker Hub possono creare un repository (repo) in grado di contenere numerose immagini. Il repository può essere pubblico o privato e collegato a un account GitHub o BitBucket.
Docker Desktop: Docker Desktop è un'applicazione per Mac o Windows che include Docker Engine, client Docker CLI, Docker Compose, Kubernetes e altri ancora. Fornisce inoltre l'accesso a Docker Hub.
Registro Docker: un registro Docker è un sistema scalabile di storage e di distribuzione open-source per immagini Docker. Consente agli sviluppatori di tenere traccia delle versioni delle immagini nei repository utilizzando l'assegnazione di tag per l'identificazione. Questo monitoraggio e identificazione vengono eseguiti utilizzando Git, uno strumento di controllo della versione.
Plug-in Docker: gli sviluppatori utilizzano i plug-in per rendere Docker Engine ancora più funzionale. Diversi plug-in Docker che supportano l'autorizzazione, il volume e la rete sono inclusi nel sistema di plug-in Docker Engine; è possibile caricare anche plug-in di terze parti.
Estensioni Docker: le estensioni Docker consentono agli sviluppatori di utilizzare strumenti di terze parti all'interno di Docker Desktop per aumentare le proprie funzioni. Le estensioni per gli strumenti per sviluppatori includono lo sviluppo di app Kubernetes, la sicurezza, l'osservabilità e altro ancora.
Docker Compose: gli sviluppatori possono utilizzare Docker Compose per gestire applicazioni multicontainer, in cui tutti i container vengono eseguiti sullo stesso host Docker. Docker Compose crea un file YAML (.YML) che specifica quali sono i servizi inclusi nell'applicazione e può implementare ed eseguire container con un unico comando. Dal momento che la sintassi YAML è indipendente dalla lingua, i file YAML possono essere utilizzati in programmi scritti in Java, Python, Ruby e numerosi altri linguaggi.
Gli sviluppatori possono usare Docker Compose anche per definire volumi persistenti per lo storage, specificare nodi di base e documentare e configurare le dipendenze di servizio.
Quando si eseguono solo alcuni container, la gestione di un'applicazione all'interno di Docker Engine, di fatto il runtime del settore, è piuttosto semplice. Tuttavia, per le implementazioni che comprendono migliaia di container e centinaia di servizi, è quasi impossibile monitorare e gestire i cicli di vita dei container senza uno strumento di orchestrazione dei container.
Mentre Docker include il proprio strumento di orchestrazione (chiamato Docker Swarm), Kubernetes è lo standard del settore. Altre piattaforme di orchestrazione dei container popolari includono Apache, Mesos e Nomad.
Kubernetes è una piattaforma di orchestrazione di container open source che deriva da Borg, un progetto sviluppato per uso interno di Google. Presentato al pubblico nel 2014, Kubernetes pianifica e automatizza le attività fondamentali per la gestione delle architetture basate su container, tra cui implementazione dei container, aggiornamenti, rilevamento dei servizi, provisioning dello storage, bilanciamento del carico, monitoraggio dello stato di salute e altro ancora. Nel 2015, Google ha donato Kubernetes alla Cloud Native Computing Foundation (CNCF)9, l'hub open source e indipendente dal fornitore di computing cloud-native.
Inoltre, l'ecosistema di strumenti open source per Kubernetes, tra cui Istio, Knative e Tekton, consente alle organizzazioni di implementare una platform-as-a-service (PaaS) ad alta produttività per applicazioni containerizzate. Questo ecosistema offre anche una velocità di risposta più rapida per il serverless computing.
Fondata nel 2015 dopo che Docker ha donato la specifica dell'immagine del container e il codice runtime runc, l'Open Container Initiative (OCI)10 è un progetto della Linux Foundation impegnato a creare standard di settore aperti sul runtime e sul formato dell'immagine del container. L'OCI è composta da aziende leader, tra cui Docker, IBM e Red Hat®. Supporta l'innovazione aiutando le organizzazioni a evitare il blocco da fornitore.
Sebbene Docker sia la tecnologia di container più conosciuta e utilizzata, l'ecosistema più ampio si è standardizzato su containerd e altre alternative, tra cui LXC, CRI-O, Podman e altri ancora. Nel 2017, Docker ha donato il progetto containerd alla CNCF. Containerd è un runtime per container standard del settore che utilizza runc ed è il runtime per container principale di Docker Engine.
La complessità dei workload containerizzati richiede l'implementazione e il mantenimento di controlli di sicurezza per proteggere i container e la loro infrastruttura sottostante. Le pratiche di sicurezza dei container Docker sono progettate per proteggere le applicazioni containerizzate da rischi quali violazioni di sicurezza, malware e attori malevoli.
Dal momento che i container Docker sono isolati l'uno dall'altro e dal sistema host, hanno un elevato livello di sicurezza intrinseco. Tuttavia, questo isolamento non è assoluto. La sicurezza di Docker ruota attorno a un framework olistico zero-trust che comprende il runtime, la creazione e l'orchestrazione dei container.
La necessità di Docker e di altri sistemi di sicurezza relativi ai container ha aumentato la popolarità di DevSecOps. Si tratta di un approccio alla sicurezza che automatizza l'integrazione delle pratiche di sicurezza in ogni fase del ciclo di vita dello sviluppo del software, dalla progettazione iniziale all'integrazione, al collaudo, alla consegna e all'implementazione. Inoltre, le best practice per la sicurezza di Docker includono strumenti e soluzioni di sicurezza per container di terze parti, tra cui la scansione e il monitoraggio, che possono rilevare i problemi di sicurezza prima che questi abbiano un impatto sulla produzione.
La portabilità di Docker semplifica e velocizza il processo di migrazione al cloud da diversi ambienti, sia che si tratti di spostare dati, applicazioni e workload da un data center on-premise a un'infrastruttura basata sul cloud o da un ambiente cloud a un altro.
Secondo Statista, oltre l'85% delle grandi organizzazioni globali utilizza i microservizi per lo sviluppo delle proprie applicazioni11. Docker semplifica l'implementazione delle app in quanto ogni microservizio può essere containerizzato e gestito in modo indipendente, eliminando così la necessità per gli sviluppatori di configurare e gestire ambienti specifici.
Docker è ideale per le pipeline di integrazione costante e distribuzione costante (CI/CD) in quanto fornisce un ambiente coerente per testare e implementare le applicazioni, riducendo possibili errori durante l'implementazione.
La combinazione di microservizi come approccio di sviluppo software e Docker crea una solida base per i team DevOps. Consente loro di adottare pratiche agili in modo da poter iterare e sperimentare rapidamente, il che è fondamentale per offrire software e servizi alla velocità richiesta dal mercato.
Una tecnologia containerizzata leggera come Docker semplifica lo spostamento delle applicazioni in ambienti diversi. Tutti i principali provider cloud service offrono servizi di sviluppo e gestione correlati a Docker che supportano l'esecuzione di Docker in ambienti di hybrid cloud, che unificano le impostazioni on-premise, cloud pubblico, cloud privato ed edge. Docker può essere facilmente implementato su un'infrastruttura IT multicloud, che si riferisce ai cloud service di più fornitori di cloud.
Container as a service (CaaS) consente agli sviluppatori di gestire e implementare applicazioni containerizzate, semplificando l'esecuzione di container Docker su larga scala. Tutti i principali CSP offrono il CaaS come parte dei loro portfolio di servizi cloud, insieme all'infrastructure as a service (IaaS), al software as a service (SaaS) e così via.
Docker accelera lo sviluppo dell'intelligenza artificiale e del machine learning con uno sviluppo delle applicazioni veloce, semplice e mobile, accelerando l'innovazione e il time to market. Inoltre, Docker Hub ospita centinaia di immagini AL/ML che supportano ulteriormente i team di sviluppo AL/ML. Nel 2023, Docker ha lanciato Docker AI12, che offre agli sviluppatori una guida automatica e specifica del contesto quando modificano un file Docker o Docker Compose.
Comprendi in che modo le aziende leader utilizzano la tecnologia basata su container per promuovere l'innovazione, la scalabilità e l'efficienza. Scarica subito la tua copia.
Scopri come una strategia di hybrid cloud può supportare la flessibilità, la sicurezza e la crescita della tua azienda. Esplora gli insight degli esperti e i case study dal mondo reale che spiegano perché le aziende leader stanno effettuando questo passaggio.
Docker semplifica la distribuzione delle applicazioni con container leggeri e portatili, garantendo uniformità, scalabilità ed efficienza in tutti gli ambienti. Semplifica i tuoi processi e migliora le prestazioni con Docker oggi stesso.
Sei pronto a trasformare la tua azienda con soluzioni avanzate basate sui dati? Esplora come le tecnologie all'avanguardia di IBM possono aiutarti a sfruttare la potenza dei dati, semplificare le operazioni e ottenere un vantaggio competitivo.
Esplora come Kubernetes consente alle aziende di gestire applicazioni su larga scala, migliorare l'efficienza delle risorse e ottenere cicli di distribuzione del software più rapidi. Scopri come l'adozione di Kubernetes può ottimizzare l'infrastruttura IT e aumentare l'efficienza operativa.
Migliora la disponibilità, la scalabilità e la sicurezza della tua infrastruttura esplorando le soluzioni di bilanciamento del carico di IBM. Passa alla fase successiva del percorso verso la gestione fluida del traffico.
Red Hat OpenShift on IBM Cloud è una OpenShift Container Platform (OCP) completamente gestita.
Le soluzioni basate su container eseguono e scalano workload containerizzati con sicurezza, innovazione open source e implementazione rapida.
Sblocca nuove funzionalità e promuovi l'agilità aziendale con i servizi di consulenza cloud di IBM. Scopri come creare insieme soluzioni, accelerare la trasformazione digitale e ottimizzare le prestazioni attraverso strategie di hybrid cloud e partnership di esperti.
1 About Docker, Docker
2 Open Source Projects, Docker
3 Docker Builds, Docker
4 Top 5 containerization technologies in 2024, 6sense
5 A Brief History of Containers: From the 1970s Till Now, Aqua, January 10, 2020
6 Docker Hub, Docker
7 Overview of Docker Hub, Docker
8 GitHub
9 Cloud Native Computing Foundation
11 Global Usage of Microservices in Organizations 2021, by Organization Size, Statista, 2023
12 Docker announces Docker AI Boosting Developer Productivity Through Context-Specific, Automated Guidance, Docker, 2023