Nessun risultato trovato

La tua ricerca non ha prodotto risultati.

È consigliabile provare quanto segue per riuscire a trovare quello che stai cercando:

  • Controlla l'ortografia della ricerca per parola chiave.
  • Utilizza sinonimi per la parola chiave digitata, ad esempio prova “applicazione” anziché “software”.
  • Prova una delle ricerche popolari mostrate di seguito.
  • Inizia una nuova ricerca.
Domande di tendenza

Container Docker e servizi cloud per container

Un container è un formato di creazione dei pacchetti che racchiude tutto il codice e le dipendenze di un'applicazione in un formato standard che ne consente l'esecuzione rapida e affidabile in tutti gli ambienti di elaborazione. Un container Docker è un popolare container eseguibile, leggero e autonomo che include tutto il necessario per l'esecuzione di un'applicazione, comprese le librerie, gli strumenti di sistema, il codice e il runtime. Docker è anche una piattaforma software che consente agli sviluppatori di creare, testare e implementare rapidamente applicazioni containerizzate.

Containers as a Service (CaaS) o servizi container sono servizi cloud gestiti che gestiscono il ciclo di vita dei container. I servizi container consentono di orchestrare (avviare, arrestare, ridimensionare) il runtime dei container. Utilizzando i servizi container, puoi semplificare, automatizzare e accelerare lo sviluppo delle applicazioni e il ciclo di vita delle implementazioni.

Negli ultimi anni Docker e i servizi container hanno ottenuto un enorme successo che ha portato a una loro rapida adozione. Docker si è evoluto da tecnologia open source quasi sconosciuta e tecnicamente piuttosto impegnativa nel 2013 ad ambiente di runtime standardizzato ora ufficialmente supportato per molti prodotti aziendali Oracle.

Chi usa Docker?

Docker è un framework di sviluppo di applicazioni aperto progettato per offrire vantaggi a DevOps e sviluppatori. Tramite Docker, gli sviluppatori possono facilmente creare, suddividere in pacchetti, spedire ed eseguire applicazioni come container leggeri, portatili e autosufficienti, eseguibili praticamente ovunque. I container consentono agli sviluppatori di creare un pacchetto di un'applicazione con tutte le sue dipendenze e implementarlo come una singola unità. Fornendo container di applicazioni predefiniti e autosufficienti, gli sviluppatori possono concentrarsi sul codice dell'applicazione e utilizzarlo senza doversi preoccupare del sistema operativo sottostante o del sistema di implementazione.

Inoltre, gli sviluppatori possono sfruttare migliaia di applicazioni container open source già progettate per l'esecuzione all'interno di un container Docker. Per i team DevOps, Docker si presta a toolchain di sviluppo e integrazione continue e riduce i vincoli e le complessità all'interno della loro architettura di sistema relativi all'implementazione e alla gestione delle applicazioni. Con l'introduzione dei servizi cloud di orchestrazione dei container, qualsiasi sviluppatore può sviluppare applicazioni containerizzate localmente nel proprio ambiente di sviluppo, quindi migrare ed eseguire quelle applicazioni containerizzate in produzione su servizi cloud, come i servizi Kubernetes gestiti.

Docker a confronto con Kubernetes

I container Linux esistono dal 2008. Ma prima che i container Docker arrivassero sul mercato nel 2013, non erano molto conosciuti. Con la creazione dei container Docker, l'interesse per lo sviluppo e l'implementazione di applicazioni containerizzate è salito alle stelle. Poiché il numero di applicazioni containerizzate è cresciuto fino a comprendere centinaia di container distribuiti su più server, anche il loro funzionamento è diventato più complesso. Come è possibile coordinare, ridimensionare, gestire e pianificare centinaia di container? È qui che Kubernetes può aiutarti. Kubernetes è un sistema di orchestrazione open source che consente di eseguire carichi di lavoro e container Docker. Permette di gestire le complessità operative quando effettui la migrazione per ridimensionare più container distribuiti su più server. Il motore Kubernetes orchestra automaticamente il ciclo di vita del container, distribuendo i container delle applicazioni nell'infrastruttura di hosting. Kubernetes può ridimensionare rapidamente le risorse, a seconda delle esigenze. Esegue il provisioning, pianifica, elimina e monitora continuamente lo stato dei container.

Nozioni di base su Docker

I concetti fondamentali di Docker sono rappresentati da immagini e container. Un'immagine Docker contiene tutto il necessario per eseguire il software: il codice, un runtime (ad esempio, Java Virtual Machine (JVM)), driver, strumenti, script, librerie, implementazioni e altro.

Un container Docker è un'istanza in esecuzione di un'immagine Docker. Tuttavia, a differenza della virtualizzazione tradizionale con un hypervisor di tipo 1 o di tipo 2, un container Docker viene eseguito sul kernel del sistema operativo host. All'interno di un'immagine Docker non esiste un sistema operativo separato, come illustrato nella Figura 1.

immagine di nozioni di base su docker
Figura 1

Isolamento a confronto con virtualizzazione

Ogni container Docker ha il proprio file system, il proprio stack di rete (quindi il proprio indirizzo IP), il proprio spazio di elaborazione e limitazioni di risorse definite per CPU e memoria. Poiché un container Docker non deve avviare un sistema operativo, si avvia immediatamente. Docker fa riferimento all'isolamento, vale a dire alla separazione delle risorse di un sistema operativo host, al contrario della virtualizzazione, vale a dire la fornitura di un sistema operativo guest al di sopra del sistema operativo host.

VM a confronto con Kubernetes - Infrastruttura di implementazione
immagine del files system incrementale
Figura 2

File system incrementale

Il file system di un'immagine Docker è stratificata, con semantica copy-on-write. Ciò consente l'ereditarietà e il riutilizzo, salva le risorse su disco e consente il download incrementale delle immagini.

Come illustrato nella Figura 2, un'immagine Docker con un'implementazione WebLogic potrebbe essere basata su un'immagine con un dominio Oracle WebLogic Server, che potrebbe essere basata su un'immagine WebLogic, basata su un'immagine JDK (Java Development Kit), che a sua volta è basata su un'immagine di base Oracle Linux.

Docker Registry

Sebbene le immagini Docker siano facili da creare e gli sviluppatori ne apprezzino la semplicità e la portabilità.Tuttavia, è diventato subito evidente che la gestione di migliaia di immagini Docker rappresentava una vera sfida. Docker Registry affronta questa sfida. Docker Registry è uno standard per lo storage e la distribuzione delle immagini Docker. Registry è un repository open source con la licenza permissiva Apache.

Docker Registry consente anche di migliorare il controllo degli accessi e la sicurezza delle immagini Docker archiviate nel suo repository. Gestisce la distribuzione delle immagini e può anche integrarsi con i flussi di lavoro di sviluppo delle applicazioni. Gli sviluppatori possono configurare il proprio Docker Registry o utilizzare un servizio Docker Registry ospitato come Docker Hub, Oracle Container Registry, Azure Container Registry e così via.

Docker Hub è un registro Docker ospitato gestito da Docker. Docker Hub ha oltre 100.000 immagini di container da fornitori di software, progetti open source e dalla community. Docker Hub contiene software e applicazioni da repository ufficiali come NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu e Oracle Linux.

All'avvio di un container, Docker per impostazione predefinita estrae automaticamente l'immagine corrispondente dal Docker Hub pubblico, qualora non fosse disponibile localmente. Inoltre, puoi creare le tue immagini e inviarle a Docker Hub in un repository pubblico o privato.

Figura 3: Screenshot di Docker Registry
Figura 3

Docker come runtime di microservizi

In questi giorni, l'idea di suddividere applicazioni monolitiche in blocchi più piccoli di microservizi sta attirando l'attenzione degli sviluppatori di software.

I microservizi vengono implementati in modo indipendente come un processo, utilizzano protocolli leggeri per comunicare tra loro e ogni servizio possiede i propri dati [7]. Poiché i microservizi seguono un approccio di governance decentralizzato, richiedono una quantità piuttosto elevata di automazione dell'infrastruttura, test automatizzati, pipeline CD completamente automatizzate e team DevOps agili e competenti.

Questo stile architettonico è ancora argomento di una discussione accesa, ma sarebbe ingenuo presumere che un'applicazione suddivisa in microservizi possa essere semplicemente gestita come un insieme di processi. Per citare solo alcuni requisiti, un microservizio deve essere indipendente dall'host e isolato a livello di sistema operativo. Deve essere eseguito entro i limiti delle risorse, deve essere ridimensionato, riavviato in caso di errore e rilevato da e connesso ad altri microservizi tramite un livello di rete definito dal software.

Pertanto, l'esecuzione di un microservizio in un container Docker è un ottimo punto di partenza per raggiungere la maggior parte di questi obiettivi.

Docker - Due dimensioni chiave

Docker cambia il modo in cui creiamo, spediamo ed eseguiamo il software in due diverse dimensioni:

  • Migliora il processo per il recupero affidabile delle applicazioni dallo sviluppo alla produzione.
  • Fornisce un formato immagine standard per passare dall'ambiente on-premise al cloud.

Entrambe le dimensioni sono illustrate più dettagliatamente nei paragrafi seguenti.

Immagine Docker - Dallo sviluppo alla produzione

La creazione di un'immagine Docker con tutte le sue dipendenze potrebbe evitare che questa funzioni solo sulla macchina di sviluppo. L'idea chiave è che un'immagine Docker viene creata automaticamente da una pipeline di creazione da un repository di codice sorgente come Git e inizialmente testata in un ambiente di sviluppo. Questa immagine immutabile verrà quindi archiviata in un registro Docker.

Come mostrato nella Figura 4, la stessa immagine verrà utilizzata per ulteriori test di carico, test di integrazione, test di accettazione e altro ancora. In ogni ambiente, verrà utilizzata la stessa immagine. Piccole ma necessarie differenze ambientali specifiche, come un URL JDBC per un database di produzione, possono essere inserite nel container come file o variabili di ambiente.

screenshot dell'immagine docker
Figura 4

Le statistiche mostrano che il 65% di tutti gli attuali casi d'uso di Docker è in fase di sviluppo e il 48% utilizza Docker per l'integrazione continua [5].

Da on-premise a cloud

Docker ha cambiato l'adozione dei cloud pubblici: Da un lato, per la prima volta, grazie a un'immagine Docker esiste un formato di pacchetto comune eseguibile on-premise e su tutti i principali provider cloud. I container Docker vengono eseguiti sul laptop nello stesso modo in cui vengono eseguiti su Oracle Cloud.

D'altra parte, poiché i container Docker vengono eseguiti su tutti i principali cloud pubblici, rappresentano un contributo importante al superamento di un pregiudizio contro i cloud pubblici: accordi esclusivi dei fornitori. Tutti i principali provider cloud ora offrono Docker come PaaS.

Versioni Docker - Maturità della tecnologia sottostante

Il ritmo di rilascio di Docker è molto più veloce del ciclo di rilascio del software aziendale tradizionale. A volte il rapido ritmo di rilascio di Docker, insieme alla novità del progetto Docker, solleva preoccupazioni sulla sicurezza e la stabilità di Docker.

Sebbene Docker e la sua riga di comando, il daemon Docker, la sua API e strumenti come Docker Swarm, Docker Machine e Docker Compose si siano evoluti solo negli ultimi tre anni, le funzionalità del kernel sottostante sono disponibili in ogni kernel Linux da quasi un decennio.

Un importante esempio di uno dei primi ad adottare la tecnologia di container è Google. Google utilizza i container Linux da prima che Docker fosse in circolazione. Inoltre, Google esegue tutto in un container. Si stima che Google avvii 2 miliardi di container a settimana [3].

Storia di cgroup e spazi dei nomi

Le funzionalità del kernel Linux sottostante utilizzate da Docker sono cgroup e spazi dei nomi. Nel 2008, è avvenuta l'introduzione delle cgroup nel kernel Linux sulla base del lavoro svolto in precedenza dagli sviluppatori Google [1]. Le cgroup limitano e tengono conto dell'utilizzo delle risorse di un insieme di processi del sistema operativo.

Il kernel Linux utilizza lo spazio dei nomi per isolare le risorse di sistema dei processi l'una dall'altra. Già nel 2002 è stato introdotto il primo spazio dei nomi, vale a dire lo spazio dei nomi di montaggio.

Servizi cloud per container

Nella prima parte di questo articolo sono stati illustrati alcuni importanti concetti di Docker. Tuttavia, in un ambiente di produzione non è sufficiente eseguire semplicemente un'applicazione in un container Docker.

Per configurare e gestire un ambiente di produzione è necessario hardware per l'esecuzione dei container. Software come Docker, insieme a repository e gestori di cluster, devono essere installati, aggiornati ed è necessario applicarvi patch. Se più container Docker comunicano negli host, è necessario creare una rete. Potrebbe essere necessario riavviare i container in cluster, qualora non riuscissero a comunicare tra loro. Inoltre, implementare un insieme di container collegati tra loro dovrebbe essere un'operazione semplice, analogamente a quella per una singola istanza dell'applicazione logica. Un esempio potrebbe essere un sistema di bilanciamento del carico, alcuni server web, alcune istanze di Oracle WebLogic Server con un server di amministrazione, un server gestito e un database. Per gestire le applicazioni containerizzate su larga scala, è necessario un sistema di orchestrazione dei container come Kubernetes o Docker Swarm. L'implementazione, la gestione e il funzionamento di sistemi di orchestrazione come Kubernetes possono essere impegnativi e richiedere molto tempo.

Per rendere più semplice ed efficiente per gli sviluppatori la creazione di applicazioni containerizzate, i provider cloud offrono servizi cloud per container o Containers as a Service (CaaS). Container Cloud Services permette agli sviluppatori e ai team operativi di semplificare e gestire il ciclo di vita dei container in modo automatizzato. Questi servizi di orchestrazione, in genere creati utilizzando Kubernetes, semplificano la gestione e il funzionamento delle applicazioni containerizzate su larga scala per i team DevOps. Oracle Container Engine for Kubernetes e il servizio Azure Kubernetes sono due esempi di servizi cloud gestiti per l'orchestrazione dei container più diffusi.

Oracle Container Engine for Kubernetes è un servizio completamente gestito, scalabile e ad alta disponibilità da utilizzare per implementare le applicazioni containerizzate nel cloud. Utilizza Container Engine for Kubernetes (a volte abbreviato in OKE) quando il team di sviluppo desidera creare, implementare e gestire in modo affidabile applicazioni cloud native.

Immagini Docker da Oracle—Di seguito sono riportate alcune fonti per ottenere o creare immagini Docker per i prodotti Oracle. Il repository Oracle GitHub per le immagini Docker contiene Dockerfile ed esempi per creare immagini Docker per prodotti commerciali Oracle e progetti open source sponsorizzati da Oracle.

Laboratorio pratico Docker—Sviluppo containerizzato con Docker

Riferimenti

  1. Cgroups (Wikipedia)
  2. Spazi dei nomi Linux (Wikipedia)
  3. Google esegue TUTTO in un container di Jack Clark
  4. Docker Hub raggiunge 5 miliardi di estrazioni
  5. Evoluzione della moderna supply chain del software, Sondaggio su Docker 2016
  6. MOS Doc ID 2216342.1: supporto Docker per Oracle DB
  7. Microservizi, di Martin Fowler
  8. Oracle Container Engine e demo del registro (3:13)
  9. Documentazione su Container Engine for Kubernetes