Vai al paragrafo

Cos'è Docker?

Copia URL

Docker è un progetto della community open source, ma il termine è anche il nome dell'azienda principale che lo sostiene, Docker Inc. Inoltre si usa con riferimento agli strumenti che l'azienda supporta formalmente. Il fatto che le tecnologie e l'azienda condividano lo stesso nome può creare confusione.

Ecco una breve spiegazione:

  • Il software IT "Docker" è una tecnologia di containerizzazione pensata per la creazione e l'utilizzo dei container Linux®.
  • La community Docker open source si impegna per migliorare queste tecnologie a vantaggio di tutti gli utenti.
  • L'azienda, Docker Inc., si avvale del lavoro della community Docker, ne incrementa la sicurezza e ricondivide tali progressi con l'intera community. Inoltre, supporta le tecnologie migliorate e potenziate per i clienti enterprise.

Con Docker, puoi trattare i container come macchine virtuali modulari estremamente leggere. E questi container offrono un'ottima flessibilità di creazione, distribuzione, copia e spostamento da un ambiente all'altro, al fine di ottimizzare le app per il cloud.

La tecnologia Docker si avvale del kernel Linux e delle funzionalità del kernel, come Cgroups e gli spazi dei nomi, per isolare i processi in modo da poterli eseguire in maniera indipendente. La finalità dei container è proprio eseguire più processi e app in maniera indipendente, per fare un uso migliore dell'infrastruttura, mantenendo al contempo la sicurezza che contraddistingue i sistemi separati.

Gli strumenti per i container, incluso Docker, offrono un modello di deployment basato su immagini, che semplifica la condivisione di un'applicazione, o di una serie di servizi, con tutte le relative dipendenze tra i vari ambienti. Inoltre Docker automatizza il deployment dell'applicazione, o della serie di processi che compongono un'app, all'interno dell'ambiente containerizzato.

Questi strumenti basati sui container Linux, che rendono Docker unico e intuitivo, offrono agli utenti un accesso senza precedenti alle app, la possibilità di eseguire deployment rapidi e il controllo sulle versioni e sulla loro distribuzione.

Nonostante talvolta vengano confusi, Docker non è un container Linux tradizionale. Inizialmente, la tecnologia Docker si basava sulla tecnologia LXC, che la maggior parte delle persone associa ai container Linux "tradizionali", ma ormai si è allontanata da quella dipendenza. LXC era utile per la virtualizzazione leggera, ma non offriva un'esperienza ottimale agli utenti o agli sviluppatori. La tecnologia Docker offre molto più della possibilità di eseguire container: semplifica anche il processo di creazione e consolidamento dei container, l'invio delle immagini e il controllo delle versioni delle immagini, tra le altre cose.

Docker vs lxc

I container Linux tradizionali si avvalgono di un sistema di inizializzazione in grado di gestire più processi, il che fa sì che intere applicazioni possano essere eseguite come una sola. La tecnologia Docker favorisce la suddivisione delle applicazioni nei singoli processi che le compongono e offre gli strumenti per farlo. Questo approccio granulare ha i suoi vantaggi.

Modularità

L'approccio Docker alla containerizzazione si concentra sulla capacità di "smontare" una parte di un'applicazione per aggiornarla o ripararla, senza dover "smontare" l'intera app. Oltre a questo approccio basato sui microservizi, puoi condividere i processi tra più app proprio come avviene con la Service-Oriented Architecture (SOA).

Livelli e controllo della versione delle Docker images

Ogni file immagine Docker è composto da più livelli combinati in una singola immagine. Quando l'immagine cambia, si crea un livello. Ogni volta che un utente specifica un comando, ad esempio di esecuzione o di copia, viene creato un nuovo livello.

Docker riutilizza questi livelli per la creazione di nuovi container, accelerando così il processo di creazione. Le modifiche intermedie vengono condivise tra le immagini, migliorando ulteriormente la velocità, la dimensione e l'efficienza. Un altro elemento intrinseco della creazione di livelli è il controllo della versione: a ogni nuova modifica, puoi avvalerti di un registro delle modifiche integrato che ti offre pieno controllo sulle immagini dei container.

Rollback

Probabilmente l'aspetto più interessante della creazione di livelli è il rollback. Ogni immagine presenta dei livelli. Non ti piace l'attuale iterazione di un'immagine? Puoi ripristinarla alla versione precedente. Ciò consente uno sviluppo agile e aiuta a ottenere l'integrazione e il deployment continui (CI/CD).

Deployment rapido

In passato, la configurazione, l'esecuzione e il provisioning di un nuovo hardware richiedevano giorni, con un impegno gravoso in termini economici e di risorse. I container basati su Docker possono ridurre il tempo di deployment a pochi secondi. Creando un container per ciascun processo, puoi condividere rapidamente tali processi con nuove app. E, non essendo necessario l'avvio del sistema operativo per aggiungere o spostare un container, i tempi di deployment si riducono notevolmente. Oltre al taglio dei tempi di deployment, puoi creare ed eliminare in modo facile ed economico e senza alcun timore i dati creati dai container.

Insomma, la tecnologia Docker è un approccio basato su microservizi più granulare e controllabile, che attribuisce maggiore valore all'efficienza.

Docker, da solo, è in grado di gestire singoli container. Quando si iniziano a utilizzare sempre più container e app containerizzate, suddivisi in centinaia di pezzi, la gestione e l'orchestrazione possono diventare difficili. Prima o poi, avrai bisogno di fare un passo indietro e raggruppare i container per l'erogazione dei servizi (reti, sicurezza, telemetria e altri) tra tutti i container. Ed è qui che entra in gioco Kubernetes.

 

Con Docker, non ti avvali delle stesse funzionalità simil-UNIX che ti offrono i container Linux tradizionali, tra cui la possibilità di utilizzare processi come cron o syslog all'interno del container, in concomitanza con l'app. Vi sono anche limitazioni su aspetti come la ripulitura dei processi nipoti una volta conclusi i processi figli, un aspetto che i container Linux tradizionali gestiscono in maniera intrinseca. È possibile ovviare a queste problematiche modificando il file di configurazione e impostando queste funzionalità sin dall'inizio, anche se potrebbe non essere chiaro in un primo momento.

Inoltre, ci sono altri dispositivi e sottosistemi Linux senza spazio dei nomi, tra cui i dispositivi SELinux, Cgroups e /dev/sd*. Ciò significa che se l'autore di un attacco ottiene il controllo su questi sottosistemi, l'host è compromesso. Lo svantaggio di questi sottosistemi leggeri risiede nella vulnerabilità creata nel momento in cui il kernel dell'host viene condiviso con i container. Ciò non si verifica nel caso delle macchine virtuali, che sono molto più isolate dal sistema host.

 

Anche il daemon Docker può essere motivo di preoccupazione sotto il profilo della sicurezza. Per utilizzare ed eseguire container Docker, è molto probabile che utilizzi il daemon Docker, un runtime permanente per i container. Il daemon Docker richiede privilegi root, pertanto bisogna prestare particolare attenzione a chi accede a questo processo e a dove il processo risiede. Ad esempio, un daemon locale presenta una superficie di attacco più limitata rispetto a uno che si trova in una posizione più accessibile al pubblico, come un web server.

I 10 fatti principali che ogni leader cloud deve conoscere su Kubernetes e sui container

Scarica l'analisi per avere accesso a una guida approfondita sull'adozione di Kubernetes.

Keep reading

Article

What's a Linux container?

A Linux container is a set of processes isolated from the system, running from a distinct image that provides all the files necessary to support the processes.

Article

Containers vs VMs

Linux containers and virtual machines (VMs) are packaged computing environments that combine various IT components and isolate them from the rest of the system.

Article

What is container orchestration?

Container orchestration automates the deployment, management, scaling, and networking of containers.

Scopri di più sui container

Prodotti

Una piattaforma container enterprise-ready basata su Kubernetes, che consente di automatizzare le operazioni nell'intero stack tecnologico per gestire deployment di cloud ibrido, multicloud e all'edge.

Risorse

Formazione

Corso di formazione gratuito

Running Containers with Red Hat Technical Overview

Corso di formazione gratuito

Containers, Kubernetes and Red Hat OpenShift Technical Overview

Corso di formazione gratuito

Developing Cloud-Native Applications with Microservices Architectures

Illustration - mail

Ricevi contenuti simili

Iscriviti a Red Hat Shares, la nostra newsletter gratuita.