Docker Compose per containerizzare un'applicazione stack MEAN



Docker Compose è uno strumento per definire ed eseguire più contenitori per eseguire applicazioni complesse in Docker, ad esempio containerizzare un'applicazione MEAN.

Nei blog precedenti su Docker, avresti letto cosa sono le immagini Docker, i contenitori Docker e qual è il loro bisogno. Se non hai letto su di loro, ti chiedo di leggere , prima di continuare con questo blog su Docker Compose.

Dopo aver esplorato le possibilità offerte da Docker, è sicuramente molto emozionante saperne di più. Non è vero? Almeno lo ero quando sono incappato in una sfida.





Introduzione a Docker Compose

Containerizzare una singola applicazione di servizio è stato facile per me. Ma quando ho dovuto containerizzare più servizi in container separati, mi sono imbattuto in un blocco stradale. La mia esigenza era di containerizzare e ospitare un'applicazione stack MEAN.

Sì, hai letto bene. Un'applicazione full stack. Inizialmente, ho pensato che non fosse possibile. Ma dopo aver sentito parlare di Docker Compose, sapevo che tutti i miei problemi sarebbero stati risolti.



Docker Compose può essere utilizzato per creare contenitori separati (e ospitarli) per ciascuno degli stack in un'applicazione stack MEAN. MEAN è l'acronimo di MongoDB Express Angular & NodeJs. Anche la demo che mostrerò in questo blog è sullo stesso argomento.

Utilizzando Docker Compose, possiamo ospitare ciascuna di queste tecnologie in contenitori separati sullo stesso host e farli comunicare tra loro. Ogni container esporrà una porta per la comunicazione con altri container.

La comunicazione e il tempo di attività di questi contenitori verranno gestiti da Docker Compose.



Quindi potresti chiedere, come configurare l'intera infrastruttura? Ebbene, lascia che ti dia una spiegazione più dettagliata.

Dockerfile

Analogamente a come ruotiamo qualsiasi contenitore a singola applicazione scrivendo un dockerfile, dovremo scrivere un dockerfile separato per creare ciascuna delle applicazioni a contenitore singolo. Inoltre, dovremo anche scrivere un file Docker Compose che farà il lavoro effettivo. Docker Compose File eseguirà i diversi dockerfile per creare i diversi contenitori e lasciarli interagire tra loro.

Nel nostro caso, abbiamo un'applicazione full stack che comprende MongoDB, ExpressJS, Angular e NodeJS. MongoDB si occupa del database back-end, NodeJS ed ExpressJS sono per il rendering lato server e Angular è per front-end.

MEAN Stack App - Docker Compose - Edureka

Poiché ci sono tre componenti, dobbiamo ruotare i contenitori per ciascuno dei componenti. Dobbiamo far girare i contenitori nel modo seguente:

  1. Contenitore 1 - Angolare
  2. Contenitore 2: NodeJS ed ExpressJS
  3. Contenitore 3 - MongoDB

Creazione di contenitori Docker

Come primo passaggio per dockerizzare l'applicazione media, scriviamo il dockerfile per la creazione di ciascuno dei componenti, a partire dal contenitore di Angular. Questo dockerfile dovrà essere presente all'interno della directory del progetto insieme al file 'package.json'. 'Package.json' contiene i dettagli su quale versione delle dipendenze deve essere utilizzata da 'NPM' per la creazione dell'applicazione angolare.

1. Dockerfile per front-end

DAL nodo: 6 ESEGUI mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 4200 CMD ['npm', 'start']

Come sempre, il nostro primo comando è di estrarre un'immagine di base e noi stiamo estraendo un'immagine di 'nodo: 6' di base.

I prossimi due comandi riguardano la creazione di una nuova directory '/ usr / src / app' all'interno del Docker Container per memorizzare i codici angolari e renderla la directory di lavoro all'interno del Container.

Stiamo quindi copiando il file 'package.json' dalla directory del nostro progetto all'interno del contenitore.

Quindi eseguiamo il comando 'npm cache clean' che pulisce la cache npm.

Dopodiché, eseguiamo il comando 'npm install' che avvia il download delle piastre caldaia necessarie per ospitare l'app Angular. Avvia il download delle targhe boiler in base alle versioni delle dipendenze specificate in 'package.json'.

Il prossimo comando 'RUN' eseguito è quello di copiare tutti i codici, le cartelle presenti dalla directory del progetto all'interno del contenitore.

Il comando precedente chiede al contenitore di esporre il numero di porta 4200 per comunicare con il server back-end per inviare le richieste effettuate dagli utenti che accedono al client front-end tramite l'interfaccia utente Web.

Infine, l'ultimo comando è 'RUN' per avviare 'npm'. Questo avvia l'esecuzione dei codici per la creazione della nostra app Angular.

L'app Angular è ora pronta, ma non sarà ospitata correttamente a causa della sua dipendenza da un server back-end e un database. Quindi andiamo oltre e scriviamo un dockerfile per containerizzare il server back-end.

2. Dockerfile per il back-end

Anche questo dockerfile sarà presente in una directory del progetto. Questa directory conterrà anche il file 'package.json' per la definizione delle dipendenze del server Express e altri requisiti di NodeJS. Ma soprattutto, contiene il codice del progetto per supportare il server back-end.

DAL nodo: 6 ESEGUI mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY. / usr / src / app EXPOSE 3000 CMD ['npm', 'start']

Come puoi vedere, ci sono molte somiglianze tra i due dockerfile. Usiamo lo stesso 'nodo: 6' come livello dell'immagine di base, creiamo una nuova directory all'interno del contenitore, ne facciamo la directory di lavoro ed eseguiamo il comando 'npm install' tra gli altri. Ma l'unica differenza è il numero di porta esposto per la comunicazione. In questo caso, viene definito il numero di porta 3000. Qui è dove verrà ospitato il server e cercherà le richieste dal client.

3. Database

Forse ti starai chiedendo perché non ho menzionato 'dockerfile per database' nell'intestazione. Il motivo è che in realtà non abbiamo bisogno di personalizzazioni. Possiamo immediatamente estrarre un'immagine di base 'MongoDB' per memorizzare i nostri dati ed esporre semplicemente il numero di porta su cui è possibile accedervi.

Ora la domanda nella tua mente sarebbe: dove lo farei? Bene, possiamo farlo nel Docker Compose File.

File Docker Compose

Docker Compose File è un file YAML che contiene dettagli su servizi, reti e volumi per la configurazione dell'applicazione Docker.

Esegui il comando seguente per trovare la versione del tuo Docker Engine.

docker -v

L'esecuzione del comando restituirà la versione in esecuzione sul tuo host. In base alla versione di Docker Engine sul tuo host, scarica una versione appropriata di Docker Compose. Puoi cercare la versione appropriata da scaricare, da Documentazione ufficiale di Docker .

Poiché eseguo Docker Engine versione 17.05.0-ce, ho utilizzato Docker Compose versione 3.

Installa Docker Compose

Per scaricare Compose, esegui il set di comandi riportato di seguito.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- componi sudo chmod + x / usr / local / bin / docker-compose

Tieni presente che il numero di versione nel comando cambierà in base alla versione del motore Docker in esecuzione.

Di seguito sono riportati i comandi che fanno parte del mio file Docker Compose.

versione: '3.0' # specifica la versione docker-compose # Definisce i servizi / contenitori da eseguire services: angular: # nome della prima build del servizio: angular-app # specifica la directory delle porte Dockerfile: - '4200: 4200' # specifica port mapping express: # nome del secondo servizio build: express-server # specifica la directory delle porte Dockerfile: - '3000: 3000' #specifica collegamenti mappatura porte: - database # collega questo servizio al database del servizio database: # nome della terza immagine di servizio: mongo # specifica l'immagine per costruire il container dalle porte: - '27017: 27017' # specifica il port forwarding

Sono abbastanza sicuro che i comandi nel file sopra non abbiano senso per te. Quindi, risolviamo il problema.

Nella prima riga di codice, ho definito la versione di Docker Compose che sto utilizzando. Questo è un passaggio molto importante se desideri che Compose funzioni correttamente senza generare errori. Assicurati di scaricare la versione Docker Compose in base alla versione del tuo Docker Engine.

Successivamente, ho definito tre contenitori utilizzando la parola chiave 'servizi'. Questi servizi si riferiscono ai tre componenti del mio stack, front-end, back-end e database. Quindi, in questo caso, il nome dei miei contenitori sarà il nome dei miei servizi, ovvero 'angolare', 'espresso' e 'database'.

La parola chiave 'build' viene utilizzata per indicare che il dockerfile per la rotazione di quel contenitore è presente in quella directory. Aspetta, sei confuso come?

È semplice. Il percorso deve essere specificato dopo 'build:'. Nel nostro caso, 'angular-app' e 'express-server' sono percorsi a due directory che possono essere raggiunte dalla directory in cui è presente il file Docker Compose. Per il nostro database container, ho semplicemente detto di utilizzare un 'immagine di base: mongo' invece di un percorso per dockerfile.

Per ciascuno di questi servizi, ho anche specificato i numeri di porta che possono essere utilizzati per ricevere / inviare richieste da altri contenitori (servizi). 4200 in caso di angolare, 3000 in caso di espresso e 27017 in caso di mongo.

imposta il percorso di classe per java

Inoltre, il contenitore espresso ha un 'collegamento:' al contenitore del database, che indica che qualsiasi dato ricevuto sul lato server verrà inviato al database in cui verrà archiviato.

Ora, finalmente, siamo alla conclusione della creazione di Compose. Per avviare un Docker Compose e far girare i tre contenitori con tre servizi, dobbiamo semplicemente eseguire i due comandi sottostanti dalla directory in cui è presente il File Docker Compose (file YAML):

docker-compose build docker-compose up

Il comando 'docker-compose build' viene utilizzato per creare / ricostruire i servizi mentre, il comando 'docker-compose up' viene utilizzato per creare / avviare i contenitori. Vai avanti! Provalo tu stesso.

Di seguito sono riportati gli screenshot delle immagini Docker in fase di creazione e quindi in esecuzione. Puoi notare che l'immagine angolare viene creata e quindi contrassegnata con il nome 'angolare: ultima'.

Inoltre, un'immagine per Express viene creata con il nome e il tag 'express: latest'.

Ora che l'immagine è stata creata, proviamo a eseguirla e quindi a far girare un contenitore nel processo. Di seguito è riportato lo screenshot.

Di seguito è riportato lo screenshot che dice 'webpack: compilato correttamente', il che significa che i tre servizi sono stati containerizzati correttamente da Docker.

Ora che i contenitori sono ospitati, puoi vedere i servizi attivi sulle rispettive porte. Digita i seguenti numeri di porta nel tuo browser web per interagire con la GUI dell'app MEAN.

localhost: 4200 - App Angular (front-end)
localhost: 3000 - Express Server e NodeJS (back-end / lato server)
localhost: 27017 - MongoDB (database)

Ancora impressionato? Aspetta, perché Docker non è ancora finito! Possiamo utilizzare il comando 'docker-compose scale =’ x ''per aumentare / diminuire facilmente il numero di implementazioni. In altre parole, possiamo creare quel numero di contenitori per un servizio. Di seguito è riportato il comando completo per scalare un particolare servizio a contenitori '5':

scala docker-compose = 5

Aumentare i servizi con tale facilità, impacchettarli e containerizzarli in modo così conveniente è ciò che rende Docker uno dei migliori strumenti di distribuzione e il mio preferito.

Se hai ancora dubbi su questo concetto, puoi guardare il video sottostante in cui ho spiegato lo stesso concetto con un pratico hands-on su come configurare un Docker Compose.

Docker Compose | Containerizzazione dell'applicazione MEAN Stack | Tutorial DevOps

Ora che hai imparato a conoscere Docker, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Questo corso di formazione per la certificazione Docker Edureka aiuta gli studenti ad acquisire esperienza nell'implementazione di Docker e nella sua padronanza.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.