Cos'è Docker Container? - Containerizza la tua applicazione usando Docker



Docker Container è una soluzione alternativa leggera alla macchina virtuale per creare, distribuire ed eseguire applicazioni all'interno di un container.

Bene, spero che tu abbia letto i miei blog precedenti su Docker dove ho coperto le basi di Docker. Qui, in questo blog Docker Container, parlerò di cosa sono i Docker Containers e come funzionano. Per lo più, ci concentreremo sulle pratiche e sui casi d'uso di Docker.

Ho elencato gli argomenti per questo blog Docker Container:





  • Perché abbiamo bisogno di container Docker?
  • Come funzionano i Docker Containers?
  • Casi d'uso di Docker Container

Perché abbiamo bisogno di container Docker?

Lo ricordo ancora bene, stavo lavorando a un progetto. In quel progetto stavamo seguendo l'architettura dei microservizi. Per quelli di voi che non sanno cosa sia il microservizio, non preoccupatevi, vi darò un'introduzione.

L'idea alla base dei microservizi è che alcuni tipi di applicazioni diventano più facili da creare e mantenere quando vengono suddivisi in parti più piccole e componibili che lavorano insieme. Ogni componente viene sviluppato separatamente e l'applicazione è quindi semplicemente la somma dei suoi componenti costitutivi.



Considera l'esempio seguente:

App per lo shopping online - Docker Container - Edureka

Nel diagramma sopra c'è un negozio online con microservizi separati per account utente, catalogo prodotti, elaborazione degli ordini e carrelli degli acquisti.



Bene, questa architettura ha molti vantaggi:

  • Anche se uno dei tuoi microservizi non riesce, l'intera applicazione rimane in gran parte inalterata.
  • È più facile da gestire

Ci sono anche molti altri vantaggi, non entrerò nei dettagli sui microservizi in questo post. Ma presto uscirò anche con un paio di blog sui microservizi.

In questa architettura, stavamo utilizzando CentOS Virtual Machines. Quelle macchine virtuali sono state configurate scrivendo lunghi script. Ebbene, la configurazione di quelle VM non era l'unico problema.

Lo sviluppo di tali applicazioni richiede l'avvio di diversi microservizi in una macchina. Quindi, se stai avviando cinque di questi servizi, hai bisogno di cinque VM su quella macchina. Considera il diagramma seguente:

L'altro problema è abbastanza comune, so che molti di voi possono identificarlo. L'applicazione funziona nel laptop di uno sviluppatore ma non in fase di test o produzione. Ciò può essere dovuto al mancato mantenimento di un ambiente di elaborazione coerente. Considera il diagramma seguente:

C'erano anche molti altri problemi oltre a questo, ma credo che questi problemi mi siano sufficienti per spiegarti la necessità di Docker Containers.

Scopri come i contenitori Docker sono migliori delle macchine virtuali

Quindi, immagina se sto dando 8 GB di RAM a tutte le mie VM e ho 5 microservizi in esecuzione su diverse macchine virtuali. In tal caso, queste VM richiederanno 40 GB di RAM. Bene, ora ho bisogno che le configurazioni della mia macchina host siano molto alte, quasi 44 GB di RAM dovrebbero essere presenti nella mia macchina host. Ovviamente, questa non è una soluzione sostenibile per un'architettura del genere perché sto sprecando molte risorse qui.

Bene, ho molte risorse da sprecare, ma ho ancora un problema di incoerenza nel ciclo di vita della consegna del software (SDLC). Devo configurare queste VM sia in test che in ambiente prod. Da qualche parte in quel processo, alcuni software non sono stati aggiornati nel server di prova e il team di sviluppo sta utilizzando la versione aggiornata del software. Questo porta a conflitti.

Cosa succede se utilizzo 100 VM, la configurazione di ciascuna VM richiederà molto tempo e allo stesso tempo è anche soggetta a errori.

Ora, cerchiamo di capire cos'è Docker Container e come funziona e come ha risolto il mio problema.

Cos'è un Docker Container?

Docker è uno strumento progettato per semplificare la creazione, la distribuzione e l'esecuzione di applicazioni utilizzando i contenitori.

Puoi creare Docker Containers, questi contenitori conterranno tutti i binari e le librerie necessari per la tua applicazione o microservizio nel mio caso. Quindi la tua applicazione è presente in un contenitore o hai containerizzato la tua applicazione. Ora, lo stesso contenitore può essere utilizzato nell'ambiente Test and Prod.

java converte il doppio in intero

I contenitori Docker sono una soluzione leggera per le macchine virtuali e utilizza il sistema operativo host. La parte migliore, non è necessario pre-allocare la RAM al Docker Container, la prenderà come e quando richiesto. Quindi, con Docker Container non devo preoccuparmi dello spreco di risorse.

Vediamo ora come funziona un Docker Container.

Come funziona un container Docker?

Il diagramma seguente è fondamentalmente un modo per utilizzare Docker. E presumo che tu abbia un'idea di Docker Image e Dockerfile.

Ragazzi, so che il diagramma sembra un po 'complesso, ma credetemi non è così complesso. Di seguito è riportata la spiegazione del diagramma, anche dopo che ritieni sia difficile da capire, puoi commentare il tuo dubbio, affronterò quelle domande il prima possibile.

  • Uno sviluppatore scriverà prima il codice del progetto in un file Docker e quindi creerà un'immagine da quel file.
  • Questa immagine conterrà l'intero codice del progetto.
  • Ora puoi eseguire questa immagine Docker per creare tutti i contenitori che desideri.
  • Questa immagine Docker può essere caricata sull'hub Docker (è fondamentalmente un repository cloud per le tue immagini Docker, puoi mantenerlo pubblico o privato).
  • Questa immagine Docker sull'hub Docker può essere estratta da altri team come QA o Prod.

Ciò non solo previene lo spreco di risorse, ma assicura anche che l'ambiente di elaborazione presente nel laptop di uno sviluppatore venga replicato anche in altri team. Ora sento di non doverti dire perché abbiamo bisogno di Docker.

Questo era un modo per usarlo, immagino che voi ragazzi siate curiosi di sapere come ho usato Docker per risolvere il mio problema dei microservizi. Lascia che ti dia una panoramica sullo stesso.

Di seguito la spiegazione del diagramma:

  • In primo luogo, abbiamo scritto i requisiti complessi all'interno di un Dockerfile.
  • Quindi, lo abbiamo inserito su GitHub.
  • Successivamente abbiamo utilizzato un server CI (Jenkins).
  • Questo server Jenkins lo scaricherà da Git e creerà l'ambiente esatto. Questo verrà utilizzato nei server di produzione e nei server di test.
  • L'abbiamo distribuito negli ambienti di staging (si riferisce alla distribuzione del software sui server a scopo di test, prima di distribuirli completamente in produzione) per i tester.
  • Fondamentalmente, abbiamo trasferito esattamente ciò che avevamo in sviluppo, test e staging in produzione.

In realtà sarà giusto dire che Docker mi ha reso la vita facile.

Bene, questa era la storia della mia azienda, diamo un'occhiata al caso di studio dell'Università dell'Indiana. Come Docker ha risolto i loro problemi.

Caso di studio dell'Università dell'Indiana:

L'Indiana University è un sistema universitario pubblico multi-campus nello stato dell'Indiana, Stati Uniti.

Dichiarazione problema

Stavano utilizzando script personalizzati per distribuire le applicazioni nella VM.

Il loro ambiente è stato ottimizzato per le loro applicazioni legacy basate su Java. Il loro ambiente in crescita coinvolge nuovi prodotti che non sono esclusivamente basati su Java. Per offrire ai propri studenti la migliore esperienza possibile, l'Università doveva iniziare a modernizzare le applicazioni.

L'Università voleva migliorare il modo in cui progettano le applicazioni, passando a un'architettura basata su microservizi per le loro applicazioni.

La sicurezza era necessaria per i dati degli studenti come SSN e dati sulla salute degli studenti.

Soluzione:

Tutti i problemi sono stati risolti da Docker Data Center (DDC), si consideri lo schema seguente:

Registro affidabile Docker - Memorizza le immagini Docker.

Interfaccia utente Web UCP (Universal Control Plane) - Aiuta a gestire l'intero cluster da un unico posto. I servizi vengono distribuiti utilizzando l'interfaccia utente Web UCP, utilizzando le immagini Docker archiviate in DTR (Docker Trusted Registry).

I team operativi IT sfruttano Universal Control Plane per eseguire il provisioning del software Docker installato sugli host e quindi distribuire le loro applicazioni senza dover eseguire una serie di passaggi manuali per configurare tutta la loro infrastruttura.

UCP e DTR si integrano con il loro server LDAP per fornire rapidamente l'accesso alle loro applicazioni.

Spero che abbiate letto i blog precedenti per apprendere le basi di Docker.

Ora ti spiegherò come possiamo utilizzare Docker Compose per applicazioni multi container.

Docker pratico:

Suppongo che tu abbia installato Docker.Userò Docker Compose in questo post, di seguito ho fornito una piccola introduzione a Docker Compose.

Docker Compose: È uno strumento per la definizione e l'esecuzione di applicazioni Docker multi-container. Con Docker Compose, puoi utilizzare un file Compose per configurare i servizi dell'applicazione. Quindi, utilizzando un unico comando, puoi creare e avviare tutti i servizi dalla tua configurazione.

Supponiamo di avere più applicazioni in vari contenitori e tutti questi contenitori siano collegati insieme. Quindi, non vuoi eseguire ciascuno di questi contenitori uno per uno. Ma vuoi eseguire quei contenitori con un singolo comando. È qui che entra in gioco Docker Compose. Con esso puoi eseguire più applicazioni in vari contenitori con un unico comando. cioè docker-compose.

Esempio: immagina di avere diversi contenitori, uno che esegue un'app Web, un altro che esegue un postgres e un altro che esegue redis, in un file YAML. Questo si chiama file docker compose, da lì puoi eseguire questi contenitori con un singolo comando.

Facciamo un altro esempio:

Supponi di voler pubblicare un blog, per questo utilizzerai CMS (Content Management System) e wordpress è il CMS più utilizzato. Fondamentalmente, hai bisogno di un contenitore per WordPress e hai bisogno di un altro contenitore come MySQL per il back-end, quel contenitore MySQL dovrebbe essere collegato al contenitore wordpress. Abbiamo anche bisogno di un altro contenitore per Php Myadmin che sarà collegato al database MySQL, fondamentalmente, viene utilizzato per accedere al database MySQL.

Che ne dici di eseguire praticamente l'esempio sopra indicato.

Passaggi coinvolti:

  1. Installa Docker Compose :
  2. Installa WordPress: Useremo l'ufficiale WordPress e MariaDB Immagini Docker.
  3. Installa MariaDB: È uno dei server di database più popolari al mondo. È realizzato dagli sviluppatori originali di MySQL. MariaDB è sviluppato come software open source e come database relazionale fornisce un'interfaccia SQL per l'accesso ai dati.
  4. Installa PhpMyAdmin: È uno strumento software gratuito scritto in PHP, destinato a gestire l'amministrazione di MySQL sul Web.
  5. Crea il sito WordPress:

Iniziamo!

Installa Docker Compose:

Installa prima Python Pip:

sudo apt-get install python-pip

Ora puoi installare Docker Compose:

sudo pip install docker-compose

Installa WordPress:

Crea una directory wordpress:

mkdir wordpress

Entra in questa directory wordpress:

cd wordpress /

In questa directory crea un file YAML Docker Compose, quindi modificalo utilizzando gedit:

sudo gedit docker-compose.yml

Incolla le seguenti righe di codice in quel file yaml:

wordpress: immagine: link wordpress: - wordpress_db: porte mysql: - 8080: 80 wordpress_db: immagine: mariadb ambiente: MYSQL_ROOT_PASSWORD: edureka phpmyadmin: immagine: corbinu / docker-phpmyadmin link: - wordpress_db: porte mysql: - 8181: ambiente 80 MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

So che vuoi che ti spieghi questo codice, quindi cosa farò, prenderò piccole sezioni di questo codice e ti spiegherò cosa sta succedendo.

wordpress_db: ... ambiente: MYSQL_ROOT_PASSWORD: edureka ...

Questo imposterà una variabile d'ambiente all'interno del contenitore wordpress_db chiamata MYSQL_ROOT_PASSWORD con la password desiderata. L'immagine Docker di MariaDB è configurata per controllare questa variabile d'ambiente all'avvio e si occuperà di impostare il DB con un account root con la password definita come MYSQL_ROOT_PASSWORD.

wordpress: ... porte: - 8080: 80 ...

Il primo numero di porta è il numero di porta sull'host e il secondo numero di porta è la porta all'interno del contenitore. Quindi, questa configurazione inoltra le richieste sulla porta 8080 dell'host alla porta del server Web predefinito 80 all'interno del contenitore.

phpmyadmin: immagine: corbinu / docker-phpmyadmin link: - wordpress_db: porte mysql: - 8181: 80 ambiente: MYSQL_USERNAME: root MYSQL_ROOT_PASSWORD: edureka

Questo acquisisce docker-phpmyadmin dal membro della comunità corbinu, lo collega al nostro contenitore wordpress_db con il nome mysql (che significa dall'interno del contenitore phpmyadmin i riferimenti al nome host mysql verranno inoltrati al nostro contenitore wordpress_db), espone la sua porta 80 sulla porta 8181 del host e infine imposta un paio di variabili d'ambiente con il nostro nome utente e password MariaDB. Questa immagine non acquisisce automaticamente la variabile d'ambiente MYSQL_ROOT_PASSWORD dall'ambiente di wordpress_dbcontainer, come fa l'immagine di wordpress. In realtà dobbiamo copiare la riga MYSQL_ROOT_PASSWORD: edureka dal contenitore wordpress_db e impostare il nome utente su root.

Ora avvia il gruppo di applicazioni:

docker-compose -d

È tutto quello che devi fare. Puoi aggiungere tutti i contenitori che desideri in questo modo e collegarli tutti come preferisci.

Ora, nel browser vai alla porta 8080, utilizzando il tuo IP pubblico o il nome host, come mostrato di seguito:

localhost: 8080

Compila questo modulo e fai clic su installa WordPress.

Al termine, visita di nuovo l'indirizzo IP del tuo server (questa volta utilizzando la porta 8181, ad es. Localhost: 8181). Sarai accolto dalla schermata di accesso di phpMyAdmin:

Vai avanti e accedi utilizzando il nome utente root e la password che hai impostato nel file YAML e sarai in grado di navigare nel tuo database. Noterai che il server include un database wordpress, che contiene tutti i dati della tua installazione di WordPress.

Qui, concludo il mio blog Docker Container. Spero che questo post ti sia piaciuto. Puoi controllare altri blog anche nella serie, che trattano le basi di Docker.

Se hai trovato pertinente questo blog Docker Container, controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione sulla certificazione Edureka DevOps aiuta gli studenti ad acquisire esperienza in vari processi e strumenti DevOps come Puppet, Jenkins, Docker, Nagios, Ansible, Chef, Saltstack e GIT per l'automazione di più passaggi in SDLC.

Hai una domanda per me? Per favore, menzionalo nella sezione commenti e ti ricontatterò.