Home topics Cos'è Docker? Cos'è Docker?
Costruisci su docker all'interno di OpenShift Abbonati per ricevere gli aggiornamenti cloud
Illustrazione con collage di pittogrammi di monitor del computer, server, nuvole, punti

Data di pubblicazione: 6 giugno 2024
Collaboratori: Stephanie Susnjara, Ian Smalley

Cos'è Docker?

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 la distribuzione di applicazioni distribuite. Sono diventati sempre più popolari man mano che le organizzazioni passano allo sviluppo cloud-native e agli ambienti multicloud ibridi. Gli sviluppatori possono creare container senza Docker lavorando direttamente con le funzionalità integrate in Linux® e altri sistemi operativi, ma Docker rende la containerizzazione più rapida e semplice. Al momento della stesura di questo documento, Docker ha riferito che oltre 20 milioni di sviluppatori utilizzano la piattaforma mensilmente3. Come altre tecnologie di containerizzazione, tra cui Kubernetes, Docker svolge un ruolo fondamentale nello sviluppo di software moderno, in particolare nell'architettura dei microservizi.

Che cosa sono i 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 compone 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.

L'AI generativa e il valore dell'hybrid cloud

Scopri come le organizzazioni possono scalare l'impatto dell'AI utilizzando l'hybrid cloud per promuovere i risultati aziendali.

Contenuti correlati

Registrati per ricevere la guida sull'hybrid cloud

Come funzionano i container?

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 a come 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:

  • Peso ridotto: a differenza delle macchine virtuali, i container non portano con sé il carico di lavoro di un'intera istanza del sistema operativo e dell'hypervisor. Includono solo i processi e le dipendenze del sistema operativo necessari per eseguire il codice. Le dimensioni dei container sono misurate in megabyte (rispetto ai gigabyte per alcune macchine virtuali), fanno un uso migliore della capacità hardware e hanno tempi di avvio più rapidi.

  • Maggiore produttività: le applicazioni containerizzate possono essere scritte una sola volta ed essere eseguite ovunque. Rispetto alle macchine virtuali, i container sono più veloci e più facili da implementare, eseguire il provisioning e riavviare.

  • Maggiore efficienza: con i container, gli sviluppatori possono eseguire più volte le stesse copie di un'applicazione sullo stesso hardware di quante possono utilizzando le macchine virtuali. Questa efficienza può ridurre la spesa per il cloud.

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.

Perché utilizzare Docker e perché è così popolare?

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 già 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 un'interfaccia di programmazione delle applicazioni (API) che consente di risparmiare lavoro.

Vantaggi di Docker rispetto a LXC

L'utilizzo di Docker rispetto al più vecchio e meno compatibile LXC presenta numerosi vantaggi.

Portabilità dei container migliorata e senza soluzione di continuità

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.

Aggiornamenti ancora più leggeri e granulari

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 mentre una delle sue parti viene disattivata per consentire un aggiornamento o una riparazione.

Creazione automatizzata di container

Docker è in grado di creare automaticamente un container basato sul codice sorgente dell'applicazione.

Controllo delle versioni del container

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.

Riutilizzo dei container

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.

Architettura, termini e strumenti di 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).

Motore Docker: il motore Docker è un'applicazione client/server composta dal daemon Docker, un'API Docker che interagisce con il daemon e un'interfaccia della riga di comando (CLI) che comunica 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 componenti di una implementazione Docker che aiutano a creare pacchetti e distribuire applicazioni. Includono immagini, container, reti, volumi, plug-in e altro ancora.

Container di documenti: i container di documenti 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 contenitore. 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 e condivideranno gli aspetti 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 poiché è 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.

Quando vogliono, tutti gli utenti Docker Hub possono condividere le proprie immagini. Possono anche scaricare immagini di base predefinite dal file system 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 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 tracciamento e identificazione vengono eseguiti utilizzando Git, uno strumento di controllo della versione.

Plugin 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 estendere 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 servizi sono inclusi nell'applicazione e può implementare ed eseguire container con un unico comando. Poiché 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 anche usare Docker Compose per definire volumi persistenti per lo storage, specificare nodi di base e documentare e configurare le dipendenze di servizio.

Orchestrazione di container e Kubernetes

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 e altro ancora. Nel 2015, Google ha donato Kubernetes alla Cloud Native Computing Foundation (CNCF)9, l'hub open source e indipendente da fornitori del cloud computing.

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.

Standard del settore Docker e dei container

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.

Sicurezza di Docker

La complessità dei workload containerizzati richiede l'implementazione e il mantenimento di controlli di sicurezza che proteggano 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 malintenzionati.

Poiché i container Docker sono isolati l'uno dall'altro e dal sistema host, hanno un livello intrinseco di sicurezza fin dalla progettazione. 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.

Casi d'uso di Docker
Migrazione al cloud

La portabilità di Docker semplifica e velocizza il processo di migrazione su 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.

Architettura a microservizi (microservizi)

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 particolari ambienti.

Integrazione continua e distribuzione continua (CI/CD)

Docker è ideale per le pipeline di integrazione continua e distribuzione continua (CI/CD) poiché fornisce un ambiente coerente per testare e implementare le applicazioni, riducendo possibili errori durante l'implementazione.

DevOps

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.

Implementazione multicloud ibrido

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 servizi cloud di più fornitori di cloud.

Container as a service (CaaS)

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 portafogli di servizi cloud, insieme all'infrastructure as a service (IaaS), al software as a service (SaaS) e così via.

Intelligenza artificiale/apprendimento automatico (AI/ML)

Docker accelera lo sviluppo dell'intelligenza artificiale e dell'apprendimento automatico 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.

Soluzioni correlate
Red Hat OpenShift on IBM Cloud

Scopri come Red Hat OpenShift on IBM Cloud utilizza Red Hat OpenShift in ambienti pubblici e ibridi per una maggiore velocità, reattività al mercato, scalabilità e affidabilità.

Scopri Red Hat OpenShift su IBM Cloud
IBM Cloud Satellite

Utilizza IBM Cloud Satellite per avviare servizi cloud coerenti ovunque, in ambienti on-premise, sull'edge e in ambienti di cloud pubblico.

Esplora IBM cloud satellite
Soluzioni di Hybrid Cloud

Dai slancio al tuo percorso verso il cloud e l'AI. Inizia valutando gli investimenti IT e progettando una base aperta e integrata, accessibile in modo rapido e coerente in tutti gli ambienti digitali.

Esplora le soluzioni di cloud ibrido
IBM Cloud Container Registry

Memorizza e distribuisci le immagini dei container in un registro privato completamente gestito. Invia immagini private per eseguirle comodamente nell'IBM Cloud Kubernetes Service e in altri ambienti di runtime.

Esplora IBM Cloud Container Registry
Fai il passo successivo

Red Hat OpenShift on IBM Cloud offre agli sviluppatori un modo rapido e sicuro per containerizzare e implementare i carichi di lavoro aziendali nei cluster Kubernetes. Delega attività noiose e ripetitive che coinvolgono la gestione della sicurezza, la gestione della conformità, la gestione dell'implementazione e la gestione continua del ciclo di vita.

Scopri Red Hat OpenShift su IBM Cloud Inizia gratuitamente
Note a piè di pagina

1 About Docker (link esterno a ibm.com), Docker

2 Open Source Projects, (link esterno a ibm.com), Docker

3 Docker Builds, (link esterno a ibm.com), Docker

4 Top 5 containerization technologies in 2024, (link esterno a ibm.com), 6sense

5 A Brief History of Containers: From the 1970s Till Now, (link esterno a ibm.com) Aqua, 10 gennaio 2020

6 Docker Hub, (link esterno a ibm.com), Docker

7 Overview of Docker Hub, (link esterno a ibm.com), Docker

8 GitHub, (link esterno a ibm.com)

9 Cloud Native Computing Foundation, (link esterno a ibm.com)

10 Open Container Initiative, (link esterno a ibm.com)

11 Global Usage of Microservices in Organizations 2021, by Organization Size, (link esterno a ibm.com), Statista, 2023

12 Docker announces Docker AI Boosting Developer Productivity Through Context-Specific, Automated Guidance, (link esterno a ibm.com), Docker, 2023