Προγραμματισμός

Ομαδοποίηση με Docker Swarm

Αυτό το σεμινάριο εισάγει προγραμματιστές Java στο Docker Swarm. Θα μάθετε γιατί τόσα πολλά καταστήματα επιχειρήσεων υιοθέτησαν ανάπτυξη με διαχείριση κοντέινερ μέσω του Docker και γιατί η ομαδοποίηση είναι μια σημαντική τεχνική για τη συνεργασία με κοντέινερ Docker. Θα μάθετε επίσης πώς συγκρίνονται δύο δημοφιλείς τεχνολογίες συμπλέγματος Docker - Amazon ECS και Docker Swarm και λάβετε έναν γρήγορο οδηγό για την επιλογή της σωστής λύσης για το κατάστημα ή το έργο σας. Το σεμινάριο ολοκληρώνεται με μια πρακτική επίδειξη της χρήσης του Docker Swarm για την ανάπτυξη και διαχείριση ενός εταιρικού συμπλέγματος δύο κόμβων.

Διαβάστε τώρα: Ανάπτυξη με διαχείριση κοντέινερ με το Docker

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

Ποια είναι η συμφωνία με τον Docker;

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

Είναι σημαντικό να καταλάβουμε ότι το Docker είναι εμπορευματοκιβώτιο τεχνολογία, όχι α εικονικοποίηση τεχνολογία. Ενώ μια εικονική μηχανή περιέχει ένα πλήρες λειτουργικό σύστημα και διαχειρίζεται μια διαδικασία βαρέων βαρών που ονομάζεται hypervisor, ένα δοχείο έχει σχεδιαστεί για να είναι πολύ ελαφρύ και αυτόνομο. Κάθε διακομιστής εκτελεί μια διαδικασία δαίμονα που ονομάζεται μηχανή Docker που εκτελεί κοντέινερ και μεταφράζει κλήσεις λειτουργικού συστήματος μέσα στο κοντέινερ σε εγγενείς κλήσεις στο λειτουργικό σύστημα κεντρικού υπολογιστή. Ένα κοντέινερ, το οποίο είναι ανάλογο με μια εικονική μηχανή, πολύ μικρότερο, φιλοξενεί την εφαρμογή σας, το περιβάλλον εκτέλεσης και το λειτουργικό σύστημα barebones. Τα κοντέινερ συνήθως εκτελούνται σε εικονικές μηχανές. Ενώ μια εικονική μηχανή μπορεί να διαρκέσει λεπτά για την εκκίνηση, ένα κοντέινερ μπορεί να το κάνει σε δευτερόλεπτα.

Το σχήμα 1 απεικονίζει τη διαφορά μεταξύ ενός κοντέινερ και μιας εικονικής μηχανής.

Τα κοντέινερ Docker είναι αυτόνομα, πράγμα που σημαίνει ότι περιλαμβάνουν όλα όσα χρειάζονται για την εκτέλεση της εφαρμογής σας. Για παράδειγμα, για μια εφαρμογή ιστού που εκτελείται στο Tomcat, το κοντέινερ θα περιλαμβάνει:

  • Ένα αρχείο WAR
  • Γάτος
  • JVM
  • Το βασικό λειτουργικό σύστημα

Το σχήμα 2 δείχνει την αρχιτεκτονική μιας εφαρμογής ιστού μέσα σε ένα κοντέινερ Docker.

Στην περίπτωση του Docker, κάθε εικονική μηχανή εκτελεί μια διαδικασία δαίμονα που ονομάζεται Κινητήρας Docker. Δημιουργείτε την εφαρμογή σας, όπως το αρχείο WAR και, στη συνέχεια, δημιουργείτε ένα αντίστοιχο Dockerfile. Το Dockerfile είναι ένα αρχείο κειμένου που περιγράφει τον τρόπο δημιουργίας ενός Εικόνα Docker, το οποίο είναι ένα δυαδικό αρχείο που περιέχει όλα όσα χρειάζονται για την εκτέλεση της εφαρμογής. Για παράδειγμα, θα μπορούσατε να δημιουργήσετε ένα Dockerfile από μια βασική εικόνα Tomcat που περιέχει ένα βασικό Linux OS, Java runtime και Tomcat. Αφού δώσετε εντολή στο Docker να αντιγράψει ένα αρχείο WAR στον κατάλογο webapps του Tomcat, το Dockerfile θα μεταγλωττίστηκε σε μια εικόνα Docker που αποτελείται από το βασικό λειτουργικό σύστημα, το JVM, το Tomcat και το αρχείο WAR. Μπορείτε να εκτελέσετε την εικόνα του Docker τοπικά, αλλά τελικά θα τη δημοσιεύσετε σε ένα Αποθήκη Docker, όπως το DockerHub.

Ενώ ένα Docker Image είναι μια δυαδική έκδοση του κοντέινερ σας, μια εμφάνιση χρόνου εκτέλεσης μιας εικόνας Docker ονομάζεται a Δοχείο Docker. Τα εμπορευματοκιβώτια Docker διαχειρίζονται από τη δική σας Κινητήρας Docker. Το μηχάνημα που τρέχει τον κινητήρα Docker ονομάζεται Υποδοχή Docker; αυτό μπορεί να είναι ο τοπικός φορητός υπολογιστής σας ή μια πλατφόρμα cloud, ανάλογα με το μέγεθος της εφαρμογής σας.

Τα βασικά σε αυτήν την ενότητα παρέχουν τη βάση για την κατανόηση του λόγου γιατί η ομαδοποίηση αποτελεί σημαντική προσθήκη στην εργαλειοθήκη Docker. Δείτε την εισαγωγή μου στο Docker για περισσότερα.

Συγκέντρωση Docker

Οι περισσότεροι προγραμματιστές που ξεκινούν με το Docker θα δημιουργήσουν ένα Dockerfile και θα το τρέχουν τοπικά σε φορητό υπολογιστή. Αλλά υπάρχουν περισσότερα για την ανάπτυξη διαχειριζόμενων κοντέινερ από την εκτέλεση μεμονωμένων κοντέινερ Docker τοπικά. Η υπερδύναμη του Docker είναι η ικανότητά της να αυξάνει δυναμικά τα κοντέινερ προς τα πάνω ή προς τα κάτω. Στην παραγωγή, αυτό σημαίνει την εκτέλεση του Docker σε ένα σύμπλεγμα σε μια σειρά από μηχανές ή εικονικές μηχανές.

Διατίθενται διάφορες τεχνολογίες συμπλέγματος Docker, αλλά οι δύο πιο δημοφιλείς είναι το Amazon EC2 Container Service (ECS) και το Docker Swarm.

Amazon ECS

Η τεχνολογία συμπλέγματος Docker της Amazon αξιοποιεί τις Υπηρεσίες Web Amazon (AWS) για να δημιουργήσει ένα σύμπλεγμα εικονικών μηχανών που μπορούν να εκτελέσουν κοντέινερ Docker. Ένα σύμπλεγμα ECS αποτελείται από διαχείριση Παρουσιάσεις ECS, που είναι παρουσίες EC2 με κινητήρα Docker και πράκτορα ECS. Το ECS χρησιμοποιεί μια ομάδα αυτόματης κλιμάκωσης για επέκταση και σύμβαση του αριθμού των παρουσιών βάσει των πολιτικών CloudWatch. Για παράδειγμα, όταν η μέση χρήση CPU των παρουσιών ECS είναι πολύ υψηλή, μπορείτε να ζητήσετε από το ECS να ξεκινήσει περισσότερες παρουσίες, έως τον μέγιστο αριθμό παρουσιών που ορίζονται στην ομάδα αυτόματης κλιμάκωσης.

Τα κοντέινερ Docker διαχειρίζονται από ένα Υπηρεσία ECS και διαμορφωμένο από το ποσό υπολογιστικής χωρητικότητας (CPU) και RAM που πρέπει να εκτελεστεί το κοντέινερ. Η υπηρεσία ECS διαθέτει έναν σχετικό Elastic Load Balancer (ELB). Καθώς ξεκινά και σταματά τα κοντέινερ Docker, η υπηρεσία ECS καταγράφει και καταργεί την κατάργηση αυτών των κοντέινερ με το ELB. Μόλις ρυθμίσετε τους κανόνες για το σύμπλεγμα, το Amazon ECS διασφαλίζει ότι έχετε τον επιθυμητό αριθμό κοντέινερ σε λειτουργία και ότι αυτά τα δοχεία είναι όλα προσβάσιμα μέσω του ELB. Το σχήμα 3 δείχνει μια προβολή υψηλού επιπέδου του Amazon ECS.

Είναι σημαντικό να γίνει διάκριση μεταξύ ECS περιπτώσεις και καθήκοντα. Το σύμπλεγμα ECS διαχειρίζεται τις παρουσίες ECS, οι οποίες είναι ειδικές παρουσίες EC2 που εκτελούνται σε μια ομάδα αυτόματης κλιμάκωσης. Η υπηρεσία ECS διαχειρίζεται τις εργασίες, οι οποίες μπορούν να περιέχουν ένα ή περισσότερα κοντέινερ Docker και τα οποία εκτελούνται στο σύμπλεγμα. Ένα ELB κάθεται μπροστά από τις παρουσίες ECS που εκτελούν τα δοχεία Docker και διανέμουν φορτίο στα δοχεία Docker. Η σχέση μεταξύ εργασιών ECS και κοντέινερ Docker είναι ότι ένας ορισμός εργασιών λέει στην υπηρεσία ECS ποια κοντέινερ Docker θα εκτελεστούν και τη διαμόρφωση αυτών των κοντέινερ. Η υπηρεσία ECS εκτελεί την εργασία, η οποία ξεκινά τα κοντέινερ Docker.

Δείτε την εισαγωγή μου στο Amazon ECS στο VMTurbo.com.

Σμήνος Docker

Η εγγενής τεχνολογία συμπλέγματος του Docker, το Docker Swarm σάς επιτρέπει να εκτελείτε πολλά κοντέινερ Docker σε ένα σύμπλεγμα εικονικών μηχανών. Το Docker Swarm ορίζει ένα διευθυντής κοντέινερ που εκτελείται σε μια εικονική μηχανή που διαχειρίζεται το περιβάλλον, αναπτύσσει κοντέινερ στους διάφορους πράκτορες και αναφέρει την κατάσταση του κοντέινερ και τις πληροφορίες ανάπτυξης για το σύμπλεγμα.

Όταν εκτελείτε ένα Docker Swarm, ο διαχειριστής είναι η κύρια διεπαφή στο Docker. Πράκτορες είναι οι "μηχανές σύνδεσης" που εκτελούνται σε εικονικές μηχανές που εγγράφονται στον διαχειριστή και εκτελούν κοντέινερ Docker. Όταν ο πελάτης στέλνει ένα αίτημα στον διαχειριστή για να ξεκινήσει ένα κοντέινερ, ο διαχειριστής βρίσκει έναν διαθέσιμο πράκτορα για να το εκτελέσει. Χρησιμοποιεί έναν λιγότερο χρησιμοποιούμενο αλγόριθμο για να διασφαλίσει ότι ο πράκτορας που εκτελεί τον μικρότερο αριθμό κοντέινερ θα εκτελεί το πρόσφατα ζητούμενο κοντέινερ. Το Σχήμα 4 δείχνει ένα δείγμα διαμόρφωσης Docker Swarm, το οποίο θα αναπτύξετε στην επόμενη ενότητα.

Η διαδικασία διαχειριστή γνωρίζει όλους τους ενεργούς πράκτορες και τα κοντέινερ που εκτελούνται σε αυτούς τους παράγοντες. Όταν ξεκινούν οι εικονικές μηχανές του πράκτορα, εγγράφονται στον διαχειριστή και στη συνέχεια είναι διαθέσιμες για την εκτέλεση κοντέινερ Docker. Το παράδειγμα στο Σχήμα 4 έχει δύο πράκτορες (Agent1 και Agent2) που είναι εγγεγραμμένοι στον διαχειριστή. Κάθε πράκτορας χρησιμοποιεί δύο κοντέινερ Nginx.

Docker Swarm εναντίον Amazon ECS

Αυτό το άρθρο περιέχει το Docker Swarm, αλλά είναι χρήσιμο να συγκρίνετε τις τεχνολογίες κοντέινερ. Ενώ το Amazon ECS προσφέρει μια καλά ανεπτυγμένη λύση με το κλειδί στο χέρι, το Docker Swarm σας δίνει την ελευθερία να ρυθμίσετε περισσότερες από τις δικές σας υποδομές. Για παράδειγμα, το Amazon ECS διαχειρίζεται τόσο κοντέινερ όσο και εξισορροπητές φορτίου, ενώ στο Docker Swarm θα ρυθμίζατε μια λύση εξισορρόπησης φορτίου όπως το Cisco LocalDirector, το F5 BigIp ή μια διαδικασία λογισμικού Apache ή Nginx.

Εάν χρησιμοποιείτε ήδη την εφαρμογή σας σε AWS, τότε το ECS διευκολύνει την εκτέλεση και τη διαχείριση κοντέινερ Docker από μια εξωτερική λύση. Ως προγραμματιστής AWS, πιθανότατα χρησιμοποιείτε ήδη ομάδες αυτόματης κλιμάκωσης, ELB, εικονικά ιδιωτικά σύννεφα (VPC), ρόλους και πολιτικές διαχείρισης ταυτότητας και πρόσβασης (IAM) και ούτω καθεξής. Το ECS ενσωματώνεται καλά με όλα αυτά, οπότε είναι ο τρόπος να πάει. Αλλά αν δεν τρέχετε στο AWS, η στενή ενσωμάτωση του Docker Swarm με τα εργαλεία Docker το καθιστά μια εξαιρετική επιλογή.

AWS και Docker Swarm στο υβριδικό σύννεφο

Το Amazon Web Services μπορεί να διαμορφωθεί για πολύ υψηλή διαθεσιμότητα, επεκτασιμότητα και απόδοση, γι 'αυτό και εξυπηρετεί το 25% του συνόλου της διαδικτυακής κίνησης, συμπεριλαμβανομένης της μαζικής κλίμακας υποδομής υπηρεσιών Netflix. Πρόσφατα, ωστόσο, υπήρξε ώθηση προς υβριδικά περιβάλλοντα cloud. ΕΝΑ υβριδικό σύννεφο είναι ένα σύννεφο στο οποίο μέρος της εφαρμογής, ή μερικές φορές ένα πλήρες αντίγραφο αυτής, εκτελείται σε ένα δημόσιο σύννεφο όπως το AWS και ένα μέρος του εκτελείται σε ένα ιδιωτικό σύννεφο. Μια δημοφιλής επιλογή σε αυτήν την περίπτωση είναι να εκτελέσετε το OpenStack σε ένα ιδιωτικό κέντρο δεδομένων.

Ένα υβριδικό σύννεφο είναι μια ασφαλής στρατηγική για μια εταιρεία που μεταφέρει ορισμένες ή όλες τις λειτουργίες στο cloud, αλλά πρέπει να προχωρήσει αργά και να αποκτήσει εμπιστοσύνη στα δημόσια σύννεφα. Όταν κάνετε μια επιλογή υβριδικού cloud, πρέπει να δημιουργήσετε ένα επίπεδο αφαίρεσης πάνω από τις υποκείμενες τεχνολογίες cloud, πράγμα που σημαίνει ότι μπορείτε να αναπτύξετε εξίσου εύκολα στο Docker Swarm που εκτελείται στο OpenStack στο δικό σας κέντρο δεδομένων, όπως μπορείτε στο ECS που εκτελείται σε AWS . Εργαλεία όπως ο σεφ και η μαριονέτα μπορούν να σας βοηθήσουν επιτρέποντάς σας να ορίσετε τα περιβάλλοντά σας αφηρημένα, αναθέτοντάς τους να χειριστούν πολλές από τις διαφορές μεταξύ των διαφορετικών περιβαλλόντων.

Ξεκινώντας με το σμήνος Docker

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

Η εισαγωγή μου στο Docker περιλαμβάνει έναν οδηγό για τη ρύθμιση του Docker στο αναπτυξιακό σας περιβάλλον. Εάν έχετε εγκαταστήσει και ρυθμίσει το Docker Toolbox τότε περιλαμβάνει όλα όσα χρειάζεστε για να εκτελέσετε το Docker Swarm. Ανατρέξτε στην επίσημη τεκμηρίωση του Docker για περαιτέρω οδηγίες εγκατάστασης.

Docker Swarm στη γραμμή εντολών

Εάν έχετε χρησιμοποιήσει προηγουμένως το Docker, τότε είστε εξοικειωμένοι με τη χρήση του λιμενεργάτης γραμμή εντολών για έναρξη και διακοπή κοντέινερ. Όταν χρησιμοποιείτε το Docker Swarm, θα κάνετε συναλλαγές λιμενεργάτης Για λιμενεργάτης. Το Docker Machine ορίζεται ως εξής στην τεκμηρίωση του Docker:

Το Docker Machine είναι ένα εργαλείο που σας επιτρέπει να εγκαταστήσετε το Docker Engine σε εικονικούς κεντρικούς υπολογιστές και να διαχειριστείτε τους κεντρικούς υπολογιστές με εντολές docker-machine. Μπορείτε να χρησιμοποιήσετε το Machine για να δημιουργήσετε κεντρικούς υπολογιστές Docker στο τοπικό σας πλαίσιο Mac ή Windows, στο δίκτυο της εταιρείας σας, στο κέντρο δεδομένων σας ή σε παρόχους cloud όπως AWS ή Digital Ocean. Χρησιμοποιώντας εντολές του docker-machine, μπορείτε να ξεκινήσετε, να επιθεωρήσετε, να σταματήσετε και να επανεκκινήσετε έναν διαχειριζόμενο κεντρικό υπολογιστή, να αναβαθμίσετε το πρόγραμμα-πελάτη Docker και το δαίμονα και να ρυθμίσετε ένα πρόγραμμα-πελάτη Docker για να μιλήσετε με τον κεντρικό υπολογιστή σας.

Εάν έχετε εγκαταστήσει το Docker, τότε η εγκατάστασή σας περιλαμβάνει ήδη το Docker Machine. Για να ξεκινήσετε με το Docker Swarm, ξεκινήστε το Docker και ανοίξτε ένα τερματικό στον υπολογιστή σας. Εκτελέστε τα ακόλουθα λιμενική μηχανή ls εντολή για τη λίστα όλων των VM στον τοπικό υπολογιστή σας:

 $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM προεπιλογή * virtualbox Λειτουργία tcp: //192.168.99.100: 2376 

Εάν έχετε εκτελέσει μόνο το Docker από τον τοπικό σας υπολογιστή, τότε θα πρέπει να έχετε την προεπιλεγμένη εικονική μηχανή Docker με διεύθυνση IP 192.168.99.100. Για να εξοικονομήσετε πόρους στον τοπικό υπολογιστή σας, μπορείτε να διακόψετε αυτήν την εικονική μηχανή εκτελώντας: Προεπιλεγμένη στάση του docker-machine.

Δημιουργήστε ένα σμήνος

Ένα σμήνος Docker αποτελείται από δύο ή εικονικές μηχανές που εκτελούν παρουσίες Docker. Για αυτό το demo, θα δημιουργήσουμε τρεις νέες εικονικές μηχανές: manager, agent1 και agent2. Δημιουργήστε τις εικονικές μηχανές σας χρησιμοποιώντας το δημιουργία docker-machine εντολή:

$ docker-machine create -d virtualbox manager $ docker-machine create -d virtualbox agent1 $ docker-machine create -d virtualbox agent2 

ο δημιουργία docker-machine Η εντολή δημιουργεί ένα νέο "μηχάνημα". Περνώντας το -ρε Το όρισμα σας επιτρέπει να καθορίσετε το πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τη δημιουργία του μηχανήματος. Τρέξιμο τοπικά, αυτό πρέπει να είναι εικονικό κουτί. Το πρώτο μηχάνημα που δημιουργήθηκε είναι το διευθυντής, η οποία θα φιλοξενήσει τη διαδικασία διαχειριστή. Οι δύο τελευταίες μηχανές, πράκτορας1 και πράκτορας2, είναι οι μηχανές αντιπροσώπων που θα φιλοξενήσουν τις διαδικασίες του πράκτορα.

Σε αυτό το σημείο, έχετε δημιουργήσει τις εικονικές μηχανές, αλλά δεν έχετε δημιουργήσει τον πραγματικό διαχειριστή ή πράκτορες Swarm. Για να δείτε τις εικονικές μηχανές και την κατάστασή τους, εκτελέστε το λιμενική μηχανή ls εντολή:

 $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS agent1 - virtualbox Running tcp: //192.168.99.101: 2376 v1.11.1 agent2 - virtualbox Εκτέλεση tcp: //192.168.99.102: 2376 v1.11.1 default - virtualbox Διακόπηκε άγνωστο manager * virtualbox Εκτέλεση tcp: //192.168.99.100: 2376 v1.11.1 
$config[zx-auto] not found$config[zx-overlay] not found