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

Τι είναι το Docker; Ο σπινθήρας για την επανάσταση των εμπορευματοκιβωτίων

Το Docker είναι μια πλατφόρμα λογισμικού για την κατασκευή εφαρμογών με βάση εμπορευματοκιβώτια - μικρά και ελαφριά περιβάλλοντα εκτέλεσης που κάνουν κοινή χρήση του πυρήνα του λειτουργικού συστήματος, αλλά διαφορετικά εκτελούνται μεμονωμένα το ένα από το άλλο. Ενώ τα εμπορευματοκιβώτια ως έννοια υπάρχουν εδώ και αρκετό καιρό, το Docker, ένα έργο ανοιχτού κώδικα που ξεκίνησε το 2013, βοήθησε στη διάδοση της τεχνολογίας και βοήθησε στην προώθηση της τάσης προς εμπορευματοκιβώτιο και μικροϋπηρεσίες στην ανάπτυξη λογισμικού που έχει γίνει γνωστή ως cloud-native development.

Τι είναι τα εμπορευματοκιβώτια;

Ένας από τους στόχους της σύγχρονης ανάπτυξης λογισμικού είναι να διατηρούνται οι εφαρμογές στον ίδιο κεντρικό υπολογιστή ή σύμπλεγμα απομονωμένες μεταξύ τους, ώστε να μην παρεμβαίνουν αδικαιολόγητα στη λειτουργία ή τη συντήρηση του άλλου. Αυτό μπορεί να είναι δύσκολο, χάρη στα πακέτα, τις βιβλιοθήκες και άλλα στοιχεία λογισμικού που απαιτούνται για την εκτέλεση τους. Μια λύση σε αυτό το πρόβλημα ήταν εικονικές μηχανές, οι οποίες διατηρούν εντελώς ξεχωριστές τις εφαρμογές στο ίδιο υλικό και μειώνουν τις συγκρούσεις μεταξύ των στοιχείων του λογισμικού και του ανταγωνισμού για πόρους υλικού στο ελάχιστο. Όμως, οι εικονικές μηχανές είναι ογκώδεις - το καθένα απαιτεί το δικό του λειτουργικό σύστημα, έτσι συνήθως έχει μέγεθος gigabyte - και είναι δύσκολο να διατηρηθεί και να αναβαθμιστεί.

Εμπορευματοκιβώτια, αντίθετα, απομονώστε περιβάλλοντα εκτέλεσης εφαρμογών το ένα από το άλλο, αλλά μοιραστείτε τον υποκείμενο πυρήνα του λειτουργικού συστήματος. Συνήθως μετρώνται σε megabyte, χρησιμοποιούν πολύ λιγότερους πόρους από τα VM και ξεκινούν σχεδόν αμέσως. Μπορούν να συσκευαστούν πολύ πιο πυκνά στο ίδιο υλικό και να περιστρέφονται πάνω-κάτω μαζικά με πολύ λιγότερη προσπάθεια και γενικά έξοδα. Τα κοντέινερ παρέχουν έναν πολύ αποδοτικό και πολύ λεπτομερή μηχανισμό για το συνδυασμό στοιχείων λογισμικού σε είδη εφαρμογών και στοίβες υπηρεσιών που απαιτούνται σε μια σύγχρονη επιχείρηση και για τη διατήρηση και συντήρηση αυτών των στοιχείων λογισμικού.

Λιμενεργάτης

Τι είναι το Docker;

Το Docker είναι ένα έργο ανοιχτού κώδικα που διευκολύνει τη δημιουργία κοντέινερ και εφαρμογών με βάση κοντέινερ. Αρχικά κατασκευασμένο για Linux, το Docker τρέχει τώρα και σε Windows και MacOS. Για να καταλάβετε πώς λειτουργεί το Docker, ας ρίξουμε μια ματιά σε ορισμένα από τα στοιχεία που θα χρησιμοποιούσατε για να δημιουργήσετε εφαρμογές με κοντέινερ Docker.

Dockerfile

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

Ο Paige Niedringhaus στο ITNext έχει μια καλή ανάλυση της σύνταξης ενός Dockerfile.

Εικόνα Docker

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

Τρέξιμο Docker

Docker's τρέξιμο χρησιμότητα είναι η εντολή που ξεκινά πραγματικά ένα κοντέινερ. Κάθε δοχείο είναι ένα παράδειγμα μιας εικόνας. Τα εμπορευματοκιβώτια έχουν σχεδιαστεί για να είναι προσωρινά και προσωρινά, αλλά μπορούν να σταματήσουν και να επανεκκινήσουν, το οποίο εκκινεί το κοντέινερ στην ίδια κατάσταση με εκείνη που σταμάτησε. Επιπλέον, πολλαπλές εμφανίσεις κοντέινερ της ίδιας εικόνας μπορούν να εκτελεστούν ταυτόχρονα (εφ 'όσον κάθε κοντέινερ έχει ένα μοναδικό όνομα). Το Code Review έχει μια μεγάλη ανάλυση των διαφορετικών επιλογών για το τρέξιμο εντολή, για να σας δώσει μια αίσθηση για το πώς λειτουργεί.

Docker Hub

Ενώ η κατασκευή εμπορευματοκιβωτίων είναι εύκολη, μην έχετε την ιδέα ότι θα πρέπει να δημιουργήσετε κάθε μία από τις εικόνες σας από το μηδέν. Το Docker Hub είναι ένα αποθετήριο SaaS για κοινή χρήση και διαχείριση κοντέινερ, όπου θα βρείτε επίσημες εικόνες Docker από έργα ανοιχτού κώδικα και προμηθευτές λογισμικού και ανεπίσημες εικόνες από το ευρύ κοινό. Μπορείτε να κατεβάσετε εικόνες κοντέινερ που περιέχουν χρήσιμο κώδικα ή να ανεβάσετε τη δική σας, να τις μοιραστείτε ανοιχτά ή να τις κάνετε ιδιωτικές. Μπορείτε επίσης να δημιουργήσετε ένα τοπικό μητρώο Docker εάν προτιμάτε. (Το Docker Hub αντιμετώπισε προβλήματα στο παρελθόν με εικόνες που έχουν μεταφορτωθεί με ενσωματωμένους εξωτερικούς χώρους.)

Μηχανή Docker

Το Docker Engine είναι ο πυρήνας του Docker, της βασικής τεχνολογίας διακομιστή-πελάτη που δημιουργεί και διαχειρίζεται τα κοντέινερ. Σε γενικές γραμμές, όταν κάποιος λέει Λιμενεργάτης γενικά και δεν μιλάμε για την εταιρεία ή το συνολικό έργο, εννοούν Docker Engine. Υπάρχουν δύο διαφορετικές εκδόσεις του Docker Engine που προσφέρονται: Docker Engine Enterprise και Docker Engine Community.

Έκδοση κοινότητας Docker

Το Docker κυκλοφόρησε το Enterprise Edition το 2017, αλλά η αρχική προσφορά της, μετονομάστηκε Docker Community Edition, παραμένει ανοιχτή πηγή και δωρεάν και δεν έχασε κανένα χαρακτηριστικό στη διαδικασία. Αντ 'αυτού, η Enterprise Edition, η οποία κοστίζει 1.500 $ ανά κόμβο ετησίως, πρόσθεσε προηγμένες δυνατότητες διαχείρισης, όπως στοιχεία ελέγχου για διαχείριση συμπλέγματος και εικόνας και παρακολούθηση ευπάθειας. Το blog BoxBoat έχει μια σειρά από τις διαφορές μεταξύ των εκδόσεων.

Πώς ο Ντόκερ κατέκτησε τον κόσμο των εμπορευματοκιβωτίων

Η ιδέα ότι μια δεδομένη διαδικασία μπορεί να εκτελεστεί με κάποιο βαθμό απομόνωσης από το υπόλοιπο λειτουργικό περιβάλλον έχει ενσωματωθεί σε λειτουργικά συστήματα Unix όπως το BSD και το Solaris για δεκαετίες. Η αρχική τεχνολογία κοντέινερ Linux, LXC, είναι μια μέθοδος εικονικοποίησης σε επίπεδο λειτουργικού συστήματος για την εκτέλεση πολλαπλών απομονωμένων συστημάτων Linux σε έναν μόνο κεντρικό υπολογιστή. Το LXC έγινε εφικτό από δύο δυνατότητες Linux: χώρους ονομάτων, οι οποίοι τυλίγουν ένα σύνολο πόρων συστήματος και τους παρουσιάζουν σε μια διαδικασία για να φαίνεται ότι είναι αφιερωμένοι σε αυτήν τη διαδικασία. και cgroups, που διέπουν την απομόνωση και τη χρήση πόρων συστήματος, όπως CPU και μνήμη, για μια ομάδα διεργασιών.

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

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

Docker Compose, Docker Swarm και Kubernetes

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

Πιο προηγμένες εκδόσεις αυτών των συμπεριφορών - αυτό που ονομάζεται ενορχήστρωση εμπορευματοκιβωτίων- προσφέρονται από άλλα προϊόντα, όπως το Docker Swarm και το Kubernetes. Αλλά ο Docker παρέχει τα βασικά. Παρόλο που το Swarm μεγάλωσε από το έργο Docker, ο Kubernetes έχει γίνει το στην πραγματικότητα Επιλογή πλατφόρμας ενορχήστρωσης Docker.

Πλεονεκτήματα Docker

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

Τα δοχεία Docker επιτρέπουν την απομόνωση και το γκάζι

Τα κοντέινερ Docker διατηρούν τις εφαρμογές απομονωμένες όχι μόνο μεταξύ τους, αλλά και από το υποκείμενο σύστημα. Αυτό όχι μόνο δημιουργεί μια καθαρότερη στοίβα λογισμικού, αλλά διευκολύνει την υπαγόρευση του τρόπου με τον οποίο μια δεδομένη εφαρμογή χρησιμοποιεί πόρους συστήματος - CPU, GPU, μνήμη, I / O, δικτύωση και ούτω καθεξής. Διευκολύνει επίσης τη διασφάλιση ότι τα δεδομένα και ο κωδικός διατηρούνται χωριστά. (Βλ. "Τα δοχεία Docker είναι απάτριδα και αμετάβλητα" παρακάτω).

Τα δοχεία Docker επιτρέπουν τη φορητότητα

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

Για παράδειγμα, ένα κοντέινερ MySQL για Linux θα εκτελείται στα περισσότερα συστήματα Linux που υποστηρίζουν κοντέινερ. Όλες οι εξαρτήσεις για την εφαρμογή παραδίδονται συνήθως στο ίδιο κοντέινερ.

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

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

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

Τα δοχεία Docker επιτρέπουν τη δυνατότητα σύνθεσης

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

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

Τα δοχεία Docker διευκολύνουν την ενορχήστρωση και την κλιμάκωση

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

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

Το Docker περιλαμβάνει επίσης το δικό του ενσωματωμένο σύστημα ενορχήστρωσης, Swarm mode, το οποίο εξακολουθεί να χρησιμοποιείται για περιπτώσεις που είναι λιγότερο απαιτητικές. Τούτου λεχθέντος, το Kubernetes έχει γίνει κάτι από την προεπιλεγμένη επιλογή. Στην πραγματικότητα, το Kubernetes συνδυάζεται με το Docker Enterprise Edition.

Προειδοποιήσεις Docker

Τα κοντέινερ λύνουν πάρα πολλά προβλήματα, αλλά δεν θεραπεύουν όλα. Μερικά από τα μειονεκτήματά τους είναι από το σχεδιασμό, ενώ άλλα είναι υποπροϊόντα του σχεδιασμού τους.

Τα κοντέινερ Docker δεν είναι εικονικές μηχανές

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

Οι εικονικές μηχανές παρέχουν υψηλό βαθμό απομόνωσης για διαδικασίες, καθώς λειτουργούν με τη δική τους παρουσία ενός λειτουργικού συστήματος. Αυτό το λειτουργικό σύστημα δεν πρέπει να είναι το ίδιο με αυτό που εκτελείται στον κεντρικό υπολογιστή. Μια εικονική μηχανή των Windows μπορεί να εκτελεστεί σε έναν επόπτη Linux και το αντίστροφο.

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

Τα δοχεία Docker δεν παρέχουν ταχύτητα γυμνού μετάλλου