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

Κοντέινερ 101: Βασικές αρχές Docker

Το Docker ξεκίνησε το 2012 ως έργο ανοιχτού κώδικα, αρχικά ονομάστηκε dotcloud, για την κατασκευή κοντέινερ Linux μιας εφαρμογής. Από τότε, το Docker έχει γίνει ένα εξαιρετικά δημοφιλές εργαλείο ανάπτυξης, που χρησιμοποιείται όλο και περισσότερο ως περιβάλλον χρόνου εκτέλεσης. Λίγες - αν υπάρχουν - τεχνολογίες έχουν πιάσει τους προγραμματιστές τόσο γρήγορα όσο το Docker.

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

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

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

Εξαρτήματα Docker

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

Το Σχήμα 1 δείχνει ένα παράδειγμα εικόνας κοντέινερ. Αυτή η εικόνα απεικονίζει μια εικόνα του Ubuntu με εγκατάσταση Apache. Η εικόνα είναι μια σύνθεση τριών βασικών επιπέδων Ubuntu συν ενός επιπέδου ενημέρωσης, με ένα στρώμα Apache και ένα προσαρμοσμένο επίπεδο αρχείου στην κορυφή.

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

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

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

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

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

  • Δαίμονας Docker. Επίσης γνωστό ως Docker Engine, ο δαίμονας Docker είναι ένα λεπτό στρώμα μεταξύ των κοντέινερ και του πυρήνα Linux. Ο δαίμονας Docker είναι το επίμονο περιβάλλον χρόνου εκτέλεσης που διαχειρίζεται τα κοντέινερ εφαρμογών. Οποιοδήποτε κοντέινερ Docker μπορεί να εκτελεστεί σε οποιονδήποτε διακομιστή με δυνατότητα Docker-daemon, ανεξάρτητα από το υποκείμενο λειτουργικό σύστημα.
  • Dockerfile. Οι προγραμματιστές χρησιμοποιούν το Dockerfiles για να δημιουργήσουν εικόνες κοντέινερ, οι οποίες στη συνέχεια γίνονται η βάση για την εκτέλεση κοντέινερ. Το Dockerfile είναι ένα έγγραφο κειμένου που περιέχει όλες τις πληροφορίες διαμόρφωσης και τις εντολές που απαιτούνται για τη συναρμολόγηση μιας εικόνας κοντέινερ. Με το Dockerfile, ο δαίμονας Docker μπορεί να δημιουργήσει αυτόματα μια εικόνα κοντέινερ. Αυτή η διαδικασία απλοποιεί σημαντικά τα βήματα για τη δημιουργία κοντέινερ.

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

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

Μπορείτε να εκτελέσετε εντολές Docker εναντίον ενός συγκεκριμένου δαίμονα Docker ή ενός μητρώου. Για παράδειγμα, εάν εκτελέσετε το docker -ps εντολή, το Docker θα επιστρέψει μια λίστα με κοντέινερ που τρέχουν στο δαίμονα.

Διανομή περιεχομένου με το Docker

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

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

  • Αρχείο. Το μητρώο Docker είναι ένα μέρος όπου δημοσιεύονται και αποθηκεύονται εικόνες κοντέινερ. Ένα μητρώο μπορεί να είναι απομακρυσμένο ή στις εγκαταστάσεις. Μπορεί να είναι δημόσιο, οπότε ο καθένας μπορεί να το χρησιμοποιήσει, ή ιδιωτικό, περιορισμένο σε έναν οργανισμό ή σε ένα σύνολο χρηστών. Το μητρώο Docker συνοδεύεται από ένα σύνολο κοινών API που επιτρέπουν στους χρήστες να δημιουργούν, να δημοσιεύουν, να αναζητούν, να κατεβάζουν και να διαχειρίζονται εικόνες κοντέινερ.
  • Docker Hub. Το Docker Hub είναι ένα δημόσιο μητρώο κοντέινερ που βασίζεται σε σύννεφο και διαχειρίζεται το Docker. Το Docker Hub παρέχει υποστήριξη για ανακάλυψη, διανομή και ροή εργασίας συνεργασίας. Επιπλέον, το Docker Hub διαθέτει ένα σύνολο επίσημων εικόνων που έχουν πιστοποιηθεί από το Docker. Αυτές είναι εικόνες από γνωστούς εκδότες λογισμικού όπως Canonical, Red Hat και MongoDB. Μπορείτε να χρησιμοποιήσετε αυτές τις επίσημες εικόνες ως βάση για τη δημιουργία των δικών σας εικόνων ή εφαρμογών.

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

Η μεταβλητότητα των δοχείων Docker

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

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

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

  • Έλεγχος έκδοσης. Απαιτώντας ρητές δεσμεύσεις που δημιουργούν νέες εικόνες, το Docker σάς αναγκάζει να κάνετε έλεγχο έκδοσης. Μπορείτε να παρακολουθείτε διαδοχικές εκδόσεις μιας εικόνας. Η επαναφορά σε προηγούμενη εικόνα (επομένως σε προηγούμενο στοιχείο συστήματος) είναι απολύτως δυνατή, καθώς οι προηγούμενες εικόνες διατηρούνται και δεν τροποποιούνται ποτέ.
  • Καθαρότερες ενημερώσεις και πιο εύχρηστες αλλαγές κατάστασης. Με την αμετάβλητη υποδομή, δεν χρειάζεται πλέον να αναβαθμίζετε την υποδομή του διακομιστή σας, πράγμα που σημαίνει ότι δεν χρειάζεται να αλλάξετε αρχεία διαμόρφωσης, χωρίς ενημερώσεις λογισμικού, χωρίς αναβαθμίσεις λειτουργικού συστήματος και ούτω καθεξής. Όταν απαιτούνται αλλαγές, απλώς φτιάχνετε νέα κοντέινερ και σπρώξτε τα για να αντικαταστήσετε τα παλιά. Αυτή είναι μια πολύ πιο διακριτή και διαχειρίσιμη μέθοδος για αλλαγή κατάστασης.
  • Ελαχιστοποιημένη μετατόπιση. Για να αποφύγετε το drift, μπορείτε να ανανεώνετε περιοδικά και προληπτικά όλα τα στοιχεία του συστήματός σας για να βεβαιωθείτε ότι είναι οι πιο πρόσφατες εκδόσεις. Αυτή η πρακτική είναι πολύ πιο εύκολη με κοντέινερ που ενσωματώνουν μικρότερα στοιχεία του συστήματος από ό, τι με το παραδοσιακό, ογκώδες λογισμικό.

Η διαφορά Docker

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

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

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

Ο Chenxi Wang είναι επικεφαλής στρατηγικής της εταιρείας ασφαλείας εμπορευματοκιβωτίων Twistlock.

Το New Tech Forum παρέχει έναν χώρο για να εξερευνήσετε και να συζητήσετε την αναδυόμενη τεχνολογία σε πρωτοφανές βάθος και εύρος. Η επιλογή είναι υποκειμενική, με βάση την επιλογή των τεχνολογιών που πιστεύουμε ότι είναι σημαντικές και έχουν μεγάλο ενδιαφέρον για τους αναγνώστες. δεν αποδέχεται ασφάλεια μάρκετινγκ για δημοσίευση και διατηρεί το δικαίωμα να επεξεργαστεί όλο το περιεχόμενο. Στείλτε όλες τις ερωτήσεις στο [email protected]