Docker Compose για εμπορευματοκιβώτιο Εφαρμογή στοίβας MEAN



Το Docker Compose είναι ένα εργαλείο για τον καθορισμό και την εκτέλεση πολλαπλών κοντέινερ για την εκτέλεση σύνθετων εφαρμογών στο Docker, για παράδειγμα με εμπορευματοκιβώτιο μιας εφαρμογής MEAN.

Στα προηγούμενα ιστολόγια του Docker, θα έχετε διαβάσει τι είναι οι εικόνες Docker, τα κοντέινερ Docker και ποια είναι η ανάγκη τους. Εάν δεν έχετε διαβάσει για αυτά, τότε σας ζητώ να διαβάσετε , προτού συνεχίσετε με αυτό το ιστολόγιο στο Docker Compose.

Αφού εξερευνήσετε τις δυνατότητες που προσφέρει το Docker, είναι σίγουρα πολύ συναρπαστικό να μάθετε περισσότερα. Δεν είναι; Λοιπόν τουλάχιστον ήμουν όταν μπήκα σε μια πρόκληση.





Εισαγωγή στο Docker Compose

Η εμπορευματοποίηση μιας εφαρμογής υπηρεσίας ήταν εύκολη για μένα. Αλλά όταν έπρεπε να εμπορευματοποιήσω πολλές υπηρεσίες σε ξεχωριστά κοντέινερ, έτρεξα ένα οδόφραγμα. Η απαίτησή μου ήταν να κάνω κοντέινερ και να φιλοξενήσω μια εφαρμογή στοίβας MEAN.

Ναι, το διάβασες σωστά. Μια πλήρης εφαρμογή στοίβας. Αρχικά, νόμιζα ότι δεν ήταν δυνατό. Αλλά αφού άκουσα για το Docker Compose, ήξερα ότι όλα τα προβλήματά μου θα επιλυθούν.



Το Docker Compose μπορεί να χρησιμοποιηθεί για να δημιουργήσει ξεχωριστά κοντέινερ (και να τα φιλοξενήσει) για καθεμία από τις στοίβες σε μια εφαρμογή στοίβας MEAN. Το MEAN είναι το αρκτικόλεξο των MongoDB Express Angular & NodeJs. Το demo που θα δείξω σε αυτό το blog είναι επίσης στο ίδιο θέμα.

Χρησιμοποιώντας το Docker Compose, μπορούμε να φιλοξενήσουμε καθεμία από αυτές τις τεχνολογίες σε ξεχωριστά κοντέινερ στον ίδιο κεντρικό υπολογιστή και να τους κάνουμε να επικοινωνούν μεταξύ τους. Κάθε κοντέινερ θα εκθέσει μια θύρα για επικοινωνία με άλλα κοντέινερ.

Η επικοινωνία και ο χρόνος αναβάθμισης αυτών των κοντέινερ θα διατηρηθούν από το Docker Compose.



Μπορείτε λοιπόν να ρωτήσετε, πώς να ρυθμίσετε ολόκληρη την υποδομή; Λοιπόν, επιτρέψτε μου να σας δώσω μια πιο λεπτομερή εξήγηση.

μεταβείτε στη δήλωση στο c ++

Dockerfile

Παρόμοια με τον τρόπο περιστροφής οποιουδήποτε κοντέινερ μιας εφαρμογής γράφοντας ένα αρχείο dockerfile, θα πρέπει να γράψουμε ένα ξεχωριστό αρχείο dockerfile για τη δημιουργία καθεμιάς από τις εφαρμογές ενός κοντέινερ. Επιπλέον, θα πρέπει επίσης να γράψουμε ένα Docker Compose File που θα κάνει την πραγματική δουλειά. Το Docker Compose File θα εκτελέσει τα διαφορετικά αρχεία docker για να δημιουργήσει τα διαφορετικά κοντέινερ και θα τους αφήσει να αλληλεπιδρούν μεταξύ τους.

Στην περίπτωσή μας, έχουμε μια πλήρη εφαρμογή στοίβας που αποτελείται από MongoDB, ExpressJS, Angular και NodeJS. Το MongoDB φροντίζει τη βάση δεδομένων back-end, τα NodeJS και ExpressJS προορίζονται για απόδοση από πλευράς διακομιστή και το Angular είναι για διεπαφή.

Εφαρμογή MEAN Stack - Σύνθεση Docker - Edureka

Δεδομένου ότι υπάρχουν τρία εξαρτήματα, πρέπει να περιστρέψουμε τα δοχεία για καθένα από τα εξαρτήματα. Πρέπει να γυρίσουμε τα δοχεία με τον ακόλουθο τρόπο:

  1. Δοχείο 1 - Γωνιακό
  2. Κοντέινερ 2 - NodeJS και ExpressJS
  3. Κοντέινερ 3 - MongoDB

Δημιουργία κοντέινερ Docker

Ως το πρώτο βήμα για την αγκύρωση της μέσης εφαρμογής, ας γράψουμε το αρχείο dockerfile για την κατασκευή κάθε στοιχείου, ξεκινώντας από το κοντέινερ της Angular. Αυτό το αρχείο dockerfile θα πρέπει να υπάρχει στον κατάλογο έργων μαζί με το αρχείο 'package.json'. Το 'package.json' περιέχει τις λεπτομέρειες σχετικά με το ποια έκδοση εξαρτήσεων πρέπει να χρησιμοποιηθεί από το 'NPM' για τη δημιουργία της γωνιακής εφαρμογής.

1. Dockerfile για διεπαφή

ΑΠΟ κόμβο: 6 RUN 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']

Όπως πάντα, η πρώτη μας εντολή είναι να τραβήξουμε μια βασική εικόνα και τραβάμε μια βασική εικόνα «κόμβος: 6».

Οι επόμενες δύο εντολές αφορούν τη δημιουργία ενός νέου καταλόγου '/ usr / src / app' μέσα στο Docker Container για την αποθήκευση γωνιακών κωδικών και την καθιστώντας αυτόν τον κατάλογο εργασίας μέσα στο Container.

Στη συνέχεια αντιγράφουμε το αρχείο 'package.json' από τον κατάλογο έργων μας στο εσωτερικό του κοντέινερ.

Στη συνέχεια εκτελούμε την εντολή 'npm cache clean' που καθαρίζει την προσωρινή μνήμη npm.

Μετά από αυτό, εκτελούμε την εντολή «εγκατάσταση npm» που ξεκινά τη λήψη των πλακών λέβητα που απαιτούνται για τη φιλοξενία της εφαρμογής Angular. Ξεκινά τη λήψη των πλακών λέβητα με βάση τις εκδόσεις εξαρτήσεων που καθορίζονται στο «package.json».

Η επόμενη εντολή «RUN» είναι να αντιγράψετε όλους τους κωδικούς, τους φακέλους που υπάρχουν από τον κατάλογο του έργου στο εσωτερικό του κοντέινερ.

Η παραπάνω εντολή ζητά από το κοντέινερ να εκθέσει τον αριθμό θύρας 4200 για επικοινωνία με διακομιστή οπίσθιου άκρου για την αποστολή αιτημάτων που υποβάλλονται από χρήστες που έχουν πρόσβαση στον υπολογιστή-πελάτη διεπαφής μέσω του Web UI.

Τέλος, η τελευταία εντολή είναι, 'RUN' εντολή για να ξεκινήσετε 'npm'. Αυτό ξεκινά την εκτέλεση των κωδικών για την κατασκευή της εφαρμογής Angular.

Η εφαρμογή Angular είναι τώρα έτοιμη, αλλά δεν θα φιλοξενείται σωστά λόγω της εξάρτησής της από έναν διακομιστή υποστήριξης και μια βάση δεδομένων. Ας προχωρήσουμε λοιπόν και γράψτε ένα αρχείο docker για κοντέινερ στον πίσω διακομιστή.

2. Dockerfile για Back End

Ακόμα και αυτό το αρχείο dockerfile θα υπάρχει σε έναν κατάλογο έργων. Αυτός ο κατάλογος θα περιέχει επίσης το αρχείο 'package.json' για τον καθορισμό των εξαρτήσεων του διακομιστή Express και άλλων απαιτήσεων του NodeJS. Αλλά το πιο σημαντικό, περιέχει τον κώδικα του έργου για την υποστήριξη του διακομιστή back end.

ΑΠΟ κόμβο: 6 RUN 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']

Όπως μπορείτε να δείτε, υπάρχουν πολλές ομοιότητες μεταξύ των δύο dockerfiles. Χρησιμοποιούμε τον ίδιο «κόμβο: 6» με το βασικό επίπεδο εικόνας, δημιουργούμε έναν νέο κατάλογο μέσα στο κοντέινερ, το κάνουμε τον κατάλογο εργασίας και εκτελούμε την εντολή «npm install» μεταξύ άλλων. Αλλά η μόνη διαφορά είναι ο αριθμός θύρας που εκτίθεται για επικοινωνία. Σε αυτήν την περίπτωση, ορίζεται αριθμός θύρας 3000. Εδώ θα φιλοξενηθεί ο διακομιστής και θα αναζητήσει αιτήματα από τον πελάτη.

3. Βάση δεδομένων

Ίσως αναρωτιέστε γιατί δεν ανέφερα το 'dockerfile For Database' στην επικεφαλίδα. Ο λόγος είναι ότι στην πραγματικότητα δεν έχουμε καμία ανάγκη για προσαρμογή. Μπορούμε αμέσως να τραβήξουμε μια βασική εικόνα «MongoDB» για την αποθήκευση των δεδομένων μας και απλώς να εκθέσουμε τον αριθμό θύρας στον οποίο μπορεί να έχει πρόσβαση.

Τώρα η ερώτηση στο μυαλό σας θα ήταν, πού θα το έκανα αυτό; Λοιπόν μπορούμε να το κάνουμε αυτό στο Docker Compose File.

Αρχείο σύνθεσης Docker

Το Docker Compose File είναι ένα αρχείο YAML που περιέχει λεπτομέρειες σχετικά με τις υπηρεσίες, τα δίκτυα και τους τόμους για τη ρύθμιση της εφαρμογής Docker.

Εκτελέστε την παρακάτω εντολή για να βρείτε την έκδοση του Docker Engine.

docker -v

Η εκτέλεση της εντολής θα επιστρέψει την έκδοση που εκτελείται στον κεντρικό υπολογιστή σας. Με βάση την έκδοση του Docker Engine στον κεντρικό υπολογιστή σας, κατεβάστε την κατάλληλη έκδοση Docker Compose. Μπορείτε να αναζητήσετε την κατάλληλη έκδοση για λήψη Η επίσημη τεκμηρίωση του Docker .

Εφόσον εκτελώ το Docker Engine έκδοση 17.05.0-ce, έχω χρησιμοποιήσει το Docker Compose έκδοση 3.

Εγκαταστήστε το Docker Compose

Για να πραγματοποιήσετε λήψη του Compose, εκτελέστε το παρακάτω σύνολο εντολών.

sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o / usr / local / bin / docker- σύνταξη sudo chmod + x / usr / local / bin / docker-compose

Σημειώστε ότι ο αριθμός έκδοσης στην εντολή θα αλλάξει με βάση την έκδοση του Docker Engine που χρησιμοποιείτε.

Ακολουθούν οι εντολές που αποτελούν μέρος του Docker Compose File.

έκδοση: '3.0' # καθορισμός έκδοσης docker-compose # Ορίστε τις υπηρεσίες / κοντέινερ προς εκτέλεση υπηρεσίες: γωνιακό: # όνομα της πρώτης κατασκευής υπηρεσίας: angular-app # καθορίστε τον κατάλογο των θυρών Dockerfile: - '4200: 4200' # καθορισμός θύρας χαρτογράφησης express: # όνομα της δεύτερης έκδοσης υπηρεσίας: express-server # καθορίστε τον κατάλογο των θυρών Dockerfile: - '3000: 3000' # προσδιορίστε συνδέσεις χαρτογράφησης θυρών: - βάση δεδομένων # συνδέστε αυτήν την υπηρεσία με τη βάση δεδομένων υπηρεσίας βάσης δεδομένων: # όνομα της τρίτης εικόνας υπηρεσίας: mongo # καθορισμός εικόνας για κατασκευή κοντέινερ από θύρες: - '27017: 27017' # καθορισμός προώθησης θύρας

Είμαι πολύ σίγουρος ότι οι εντολές στο παραπάνω αρχείο δεν έχουν νόημα για εσάς. Λοιπόν, ας λύσουμε αυτό το πρόβλημα.

Στην πρώτη γραμμή κώδικα, έχω ορίσει την έκδοση του Docker Compose που χρησιμοποιώ. Αυτό είναι ένα πολύ σημαντικό βήμα, εάν θέλετε το Compose να λειτουργεί σωστά χωρίς να πετάτε κανένα σφάλμα. Βεβαιωθείτε ότι έχετε κατεβάσει την έκδοση Docker Compose σύμφωνα με την έκδοση του Docker Engine.

Μετά από αυτό, ορίσαμε τρία κοντέινερ χρησιμοποιώντας τη λέξη-κλειδί «υπηρεσίες». Αυτές οι υπηρεσίες αναφέρονται στα τρία στοιχεία του stack μου, front end, back end και βάσης δεδομένων. Έτσι, σε αυτήν την περίπτωση, το όνομα των κοντέινερ μου θα είναι το όνομα των υπηρεσιών μου, δηλαδή «γωνιακό», «express» και «βάση δεδομένων».

Η λέξη-κλειδί «build» χρησιμοποιείται για να δείξει ότι το αρχείο dockerfile για την περιστροφή αυτού του κοντέινερ υπάρχει σε αυτόν τον κατάλογο. Περιμένετε, μπερδεύεστε πώς;

Είναι απλό. Η διαδρομή πρέπει να καθοριστεί μετά το 'build:'. Στην περίπτωσή μας, το «angular-app» και το «express-server» είναι διαδρομές προς δύο καταλόγους που μπορείτε να φτάσετε από τον κατάλογο όπου υπάρχει το Docker Compose File. Για το κοντέινερ της βάσης δεδομένων μας, απλώς είπα να χρησιμοποιήσετε μια βασική «εικόνα: mongo» αντί για μια διαδρομή προς το dockerfile.

διαφορά μεταξύ git και github

Για καθεμία από αυτές τις υπηρεσίες, έχω επίσης καθορίσει τους αριθμούς θύρας που μπορούν να χρησιμοποιηθούν για τη λήψη / αποστολή αιτημάτων από άλλα κοντέινερ (υπηρεσίες). 4200 στην περίπτωση γωνιακής, 3000 στην περίπτωση express και 27017 στην περίπτωση mongo.

Επιπλέον, το ρητό κοντέινερ έχει έναν «σύνδεσμο:» με το κοντέινερ βάσης δεδομένων, υποδεικνύοντας ότι όποια δεδομένα λαμβάνονται από την πλευρά του διακομιστή θα σταλούν στη βάση δεδομένων όπου θα αποθηκευτούν.

Τώρα τέλος, βρισκόμαστε στο τέλος της δημιουργίας σύνθεσης. Για να ξεκινήσετε μια Σύνθεση Docker και να περιστρέψετε τα τρία κοντέινερ με τρεις υπηρεσίες, πρέπει απλώς να εκτελέσουμε τις παρακάτω δύο εντολές από τον κατάλογο όπου υπάρχει το Docker Compose File (αρχείο YAML):

docker-compose build docker-compose

Η εντολή «docker-compose build» χρησιμοποιείται για τη δημιουργία / αναδόμηση των υπηρεσιών, ενώ η εντολή «docker-compose up» χρησιμοποιείται για τη δημιουργία / εκκίνηση των κοντέινερ. Προχώρα! Δοκιμάστε το μόνοι σας.

Ακολουθούν τα στιγμιότυπα οθόνης των εικόνων Docker που κατασκευάζονται και στη συνέχεια εκτελούνται. Μπορείτε να παρατηρήσετε ότι η γωνιακή εικόνα χτίζεται και στη συνέχεια επισημαίνεται με το όνομα ως «γωνιακό: πιο πρόσφατο».

Επίσης, δημιουργείται μια εικόνα για το Express με όνομα και ετικέτα ως «express: τελευταία».

Τώρα που έχει δημιουργηθεί η εικόνα, ας δοκιμάσουμε να την εκτελέσουμε και περιστρέφοντας έτσι ένα κοντέινερ στη διαδικασία. Παρακάτω είναι αυτό το στιγμιότυπο οθόνης.

Ακολουθεί το στιγμιότυπο οθόνης που λέει 'webpack: compiled επιτυχώς' που σημαίνει ότι οι τρεις υπηρεσίες περιέχονται με επιτυχία από τον Docker.

Τώρα που φιλοξενούνται τα κοντέινερ, μπορείτε να δείτε τις υπηρεσίες ενεργές στις αντίστοιχες θύρες τους. Πηγαίνετε πληκτρολογήστε τους ακόλουθους αριθμούς θύρας στο πρόγραμμα περιήγησης ιστού για να αλληλεπιδράσετε με το GUI της εφαρμογής MEAN.

localhost: 4200 - Γωνιακή εφαρμογή (Front-end)
localhost: 3000 - Express Server & NodeJS (Back-end / Server-side)
localhost: 27017 - MongoDB (Βάση δεδομένων)

Εντυπωσιάστηκε ακόμα; Περιμένετε, γιατί το Docker δεν έχει ολοκληρωθεί ακόμα! Μπορούμε να χρησιμοποιήσουμε την εντολή 'docker-compose scale = 'x'' για εύκολη αύξηση / μείωση του αριθμού των αναπτύξεων. Με άλλα λόγια, μπορούμε να δημιουργήσουμε τόσο μεγάλο αριθμό κοντέινερ για μια υπηρεσία. Ακολουθεί η πλήρης εντολή για κλιμάκωση μιας συγκεκριμένης υπηρεσίας σε κοντέινερ «5»:

κλίμακα σύνθετου λιμενεργάτη = 5

Η αναβάθμιση των υπηρεσιών τόσο εύκολα, η συσκευασία και η αποθήκευσή τους με τόσο οικονομικό τρόπο είναι αυτό που κάνει το Docker ένα από τα καλύτερα εργαλεία ανάπτυξης και το προσωπικό μου αγαπημένο.

Εάν εξακολουθείτε να έχετε αμφιβολίες σχετικά με αυτήν την ιδέα, τότε μπορείτε να παρακολουθήσετε το παρακάτω βίντεο όπου εξήγησα την ίδια ιδέα με μια πρακτική πρακτική εφαρμογή του Docker Compose.

Σύνθεση Docker | Εφαρμογή στοίβας MEAN Containerizing | Εκμάθηση DevOps

Τώρα που έχετε μάθει για το Docker, δείτε το από την Edureka, μια αξιόπιστη διαδικτυακή εταιρεία εκμάθησης με δίκτυο περισσότερων από 250.000 ικανοποιημένων μαθητών σε όλο τον κόσμο. Αυτό το μάθημα Εκπαίδευσης Πιστοποίησης Edureka Docker βοηθά τους μαθητές να αποκτήσουν εμπειρογνωμοσύνη στην εφαρμογή του Docker και στην εκμάθηση του.

Έχετε μια ερώτηση για εμάς; Παρακαλώ αναφέρετέ το στην ενότητα σχολίων και θα επικοινωνήσουμε μαζί σας.