Κατανόηση του Docker

Χρησιμοποιώ το Docker εδώ και αρκετούς μήνες για να δομήσω τη διαδικασία ανάπτυξης/παράδοσης έργων web. Προσφέρω στους αναγνώστες Habrakhabr μια μετάφραση του εισαγωγικού άρθρου για το docker - "Κατανοώντας τον λιμενεργό".

Τι είναι το docker;

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

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

Η πλατφόρμα και τα εργαλεία εικονικοποίησης κοντέινερ μπορεί να είναι χρήσιμα στις ακόλουθες περιπτώσεις:

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

Σε τι μπορώ να χρησιμοποιήσω το docker;

Δημοσιεύστε γρήγορα τις εφαρμογές σας

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

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

Πιο εύκολο στρώσιμο και ξεδίπλωμα

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

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

Μεγαλύτερα φορτία και περισσότερα ωφέλιμα φορτία

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

Κύρια εξαρτήματα Docker

Το Docker αποτελείται από δύο κύρια στοιχεία:

  • Docker: μια πλατφόρμα εικονικοποίησης ανοιχτού κώδικα.
  • Docker Hub: Η πλατφόρμα μας ως υπηρεσία για τη διανομή και τη διαχείριση κοντέινερ Docker.

Σημείωση! Το Docker διανέμεται με την άδεια Apache 2.0.

Αρχιτεκτονική Docker

Το Docker χρησιμοποιεί μια αρχιτεκτονική πελάτη-διακομιστή. Ο πελάτης Docker επικοινωνεί με τον δαίμονα Docker, ο οποίος αναλαμβάνει το βάρος της δημιουργίας, της εκτέλεσης και της διανομής των κοντέινερ σας. Τόσο ο πελάτης όσο και ο διακομιστής μπορούν να εκτελούνται στο ίδιο σύστημα, μπορείτε να συνδέσετε τον πελάτη σε έναν απομακρυσμένο δαίμονα docker. Ο πελάτης και ο διακομιστής επικοινωνούν μέσω μιας υποδοχής ή ενός RESTful API.

Κατανόηση του Docker

Docker daemon

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

πελάτης Docker

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

Μέσα αποβάθρας

Για να κατανοήσετε από τι αποτελείται το docker, πρέπει να γνωρίζετε τρία στοιχεία:

  • εικόνες
  • αρχείο
  • Εμπορευματοκιβώτια

Εικόνες

Η εικόνα Docker είναι ένα πρότυπο μόνο για ανάγνωση. Για παράδειγμα, η εικόνα μπορεί να περιέχει το λειτουργικό σύστημα Ubuntu με Apache και μια εφαρμογή σε αυτό. Οι εικόνες χρησιμοποιούνται για τη δημιουργία κοντέινερ. Το Docker διευκολύνει τη δημιουργία νέων εικόνων, την ενημέρωση υπαρχουσών ή μπορείτε να κάνετε λήψη εικόνων που έχουν δημιουργηθεί από άλλα άτομα. Οι εικόνες είναι στοιχεία μιας κατασκευής docker.

Μητρώο

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

εμπορευματοκιβώτια

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

Πώς λειτουργεί λοιπόν το Docker;

Μέχρι στιγμής γνωρίζουμε ότι:

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

Ας δούμε πώς αυτά τα εξαρτήματα ταιριάζουν μεταξύ τους.

Πώς λειτουργεί η εικόνα;

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

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

Στην καρδιά κάθε εικόνας βρίσκεται μια βασική εικόνα. Για παράδειγμα, το ubuntu, η βασική εικόνα του Ubuntu, ή το fedora, η βασική εικόνα της διανομής Fedora. Μπορείτε επίσης να χρησιμοποιήσετε εικόνες ως βάση για τη δημιουργία νέων εικόνων. Για παράδειγμα, εάν έχετε μια εικόνα apache, μπορείτε να τη χρησιμοποιήσετε ως εικόνα βάσης για τις εφαρμογές Ιστού σας.

Σημείωση! Το Docker συνήθως τραβάει εικόνες από το μητρώο Docker Hub.

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

  • εντολή εκτέλεσης
  • προσθήκη αρχείου ή καταλόγου
  • δημιουργώντας μια μεταβλητή περιβάλλοντος
  • οδηγίες για το τι πρέπει να εκτελείται όταν εκκινείται το κοντέινερ αυτής της εικόνας

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

Πώς λειτουργεί το μητρώο docker;

Το μητρώο είναι ένα αποθετήριο για εικόνες docker. Μόλις δημιουργηθεί η εικόνα, μπορείτε να τη δημοσιεύσετε στο δημόσιο μητρώο Docker Hub ή στο προσωπικό σας μητρώο.

Με το πρόγραμμα-πελάτη docker, μπορείτε να αναζητήσετε ήδη δημοσιευμένες εικόνες και να τις κατεβάσετε στο μηχάνημα docker για να δημιουργήσετε κοντέινερ.

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

Πώς λειτουργεί ένα δοχείο;

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

Τι συμβαίνει όταν ξεκινά το δοχείο;

Ή χρησιμοποιώντας το πρόγραμμα docker, ή χρησιμοποιώντας το RESTful API, το πρόγραμμα-πελάτης docker λέει στον δαίμονα του docker να ξεκινήσει το κοντέινερ.

$ sudo docker run -i -t ubuntu /bin/bash

Ας ρίξουμε μια ματιά σε αυτήν την εντολή. Ο πελάτης εκκινείται χρησιμοποιώντας την εντολή docker, με δυνατότητα επιλογής run, που λέει ότι θα κυκλοφορήσει ένα νέο κοντέινερ. Οι ελάχιστες απαιτήσεις για τη λειτουργία ενός κοντέινερ είναι τα ακόλουθα χαρακτηριστικά:

  • ποια εικόνα να χρησιμοποιήσετε για τη δημιουργία του κοντέινερ. Στην περίπτωσή μας ubuntu
  • την εντολή που θέλετε να εκτελέσετε κατά την εκκίνηση του κοντέινερ. Στην περίπτωσή μας /bin/bash

Τι συμβαίνει κάτω από το καπό όταν εκτελούμε αυτήν την εντολή;

Ο Docker, με τη σειρά, κάνει τα εξής:

  • κατεβάζει την εικόνα του ubuntu: Το docker ελέγχει για διαθεσιμότητα εικόνας ubuntu στο τοπικό μηχάνημα και αν δεν είναι εκεί, κατεβάστε το από Docker hub. Εάν υπάρχει μια εικόνα, τη χρησιμοποιεί για να δημιουργήσει ένα κοντέινερ.
  • δημιουργεί ένα δοχείο: Όταν λαμβάνεται η εικόνα, το docker τη χρησιμοποιεί για να δημιουργήσει ένα κοντέινερ.
  • αρχικοποιεί το σύστημα αρχείων και προσαρτά το επίπεδο μόνο για ανάγνωση: το κοντέινερ δημιουργείται στο σύστημα αρχείων και η εικόνα προστίθεται στο επίπεδο μόνο για ανάγνωση.
  • αρχικοποιεί το δίκτυο/γέφυρα: δημιουργεί μια διεπαφή δικτύου που επιτρέπει στο docker να επικοινωνεί με τον κεντρικό υπολογιστή.
  • Ρύθμιση της διεύθυνσης IP: βρίσκει και ορίζει τη διεύθυνση.
  • Ξεκινά την καθορισμένη διαδικασία: εκκινεί την εφαρμογή σας.
  • Επεξεργάζεται και παράγει αποτελέσματα από την εφαρμογή σας: συνδέει και καταγράφει την τυπική ροή εισόδου, εξόδου και σφαλμάτων της εφαρμογής σας, ώστε να μπορείτε να παρακολουθείτε την απόδοση της εφαρμογής σας.

Τώρα έχετε ένα δοχείο που λειτουργεί. Μπορείτε να διαχειριστείτε το κοντέινερ σας, να αλληλεπιδράσετε με την εφαρμογή σας. Όταν αποφασίσετε να διακόψετε την εφαρμογή, διαγράψτε το κοντέινερ.

Τεχνολογίες που χρησιμοποιούνται

Το Docker είναι γραμμένο στο Go και χρησιμοποιεί μέρος του πυρήνα του Linux για την υλοποίηση της παραπάνω λειτουργικότητας.

Χώροι ονομάτων

Ο Docker χρησιμοποιεί τεχνολογία namespaces για την οργάνωση απομονωμένων χώρων εργασίας, τους οποίους ονομάζουμε κοντέινερ. Όταν ξεκινάμε ένα κοντέινερ, το docker δημιουργεί ένα σύνολο χώρων ονομάτων για αυτό το κοντέινερ.

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

Λίστα ορισμένων χώρων ονομάτων που χρησιμοποιεί το docker:

  • pid: να απομονώσει τη διαδικασία?
  • καθαρά: για τη διαχείριση διεπαφών δικτύου·
  • ipc: για τη διαχείριση των πόρων IPC. (ICP: InterProccess Communication);
  • mnt: για τη διαχείριση των σημείων προσάρτησης.
  • utc: για την απομόνωση του πυρήνα και τον έλεγχο της δημιουργίας έκδοσης (UTC: Unix timesharing system).

Ομάδες ελέγχου

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

Σύστημα αρχείων Union

Το Union File Sysem ή UnionFS είναι ένα σύστημα αρχείων που λειτουργεί δημιουργώντας επίπεδα, καθιστώντας το πολύ ελαφρύ και γρήγορο. Το Docker χρησιμοποιεί το UnionFS για να δημιουργήσει τα μπλοκ από τα οποία είναι κατασκευασμένο το κοντέινερ. Το Docker μπορεί να χρησιμοποιήσει διάφορες παραλλαγές του UnionFS, όπως: AUFS, btrfs, vfs και DeviceMapper.

Μορφές κοντέινερ

Το Docker συνδυάζει αυτά τα στοιχεία σε ένα περιτύλιγμα που ονομάζουμε μορφή κοντέινερ. Καλείται η προεπιλεγμένη μορφή libcontainer. Το Docker υποστηρίζει επίσης την παραδοσιακή μορφή κοντέινερ σε Linux χρησιμοποιώντας LXC. Στο μέλλον, το Docker ενδέχεται να υποστηρίζει άλλες μορφές κοντέινερ. Για παράδειγμα, ενσωμάτωση με BSD Jails ή Solaris Zones.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο