VM ή Docker;

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

Ποια είναι λοιπόν η διαφορά μεταξύ των κοντέινερ Docker και των VM;

Εικονική μηχανή (VM) είναι ένας εικονικός υπολογιστής με όλες τις εικονικές συσκευές και έναν εικονικό σκληρό δίσκο, στον οποίο είναι εγκατεστημένο ένα νέο ανεξάρτητο λειτουργικό σύστημα μαζί με προγράμματα οδήγησης εικονικών συσκευών, διαχείριση μνήμης και άλλα στοιχεία. Δηλαδή, λαμβάνουμε μια αφαίρεση φυσικού υλικού που σας επιτρέπει να εκτελείτε πολλούς εικονικούς υπολογιστές σε έναν υπολογιστή.
Ένα εγκατεστημένο VM μπορεί να καταλαμβάνει χώρο στο δίσκο με διάφορους τρόπους:

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

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

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

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

Δοχείο - πώς λειτουργεί;

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

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

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

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

Πώς συνδέεται η εικόνα με το κοντέινερ;

Εικόνα - το κύριο στοιχείο για κάθε δοχείο. Η εικόνα δημιουργείται από ένα Dockerfile που προστέθηκε στο έργο και είναι ένα σύνολο συστημάτων αρχείων (επίπεδα) τοποθετημένα το ένα πάνω στο άλλο και ομαδοποιημένα, διαθέσιμα μόνο για ανάγνωση. ο μέγιστος αριθμός στρώσεων είναι 127.

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

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

Το Dockerfile μπορεί να περιέχει εντολές όπως:

  • FROM - σημείο εισόδου στο σχηματισμό της εικόνας.
  • MAINTAINER - το όνομα του ιδιοκτήτη της εικόνας.
  • RUN - εκτέλεση εντολής κατά τη συναρμολόγηση εικόνας.
  • ΠΡΟΣΘΗΚΗ - αντιγραφή του αρχείου κεντρικού υπολογιστή σε μια νέα εικόνα, εάν καθορίσετε ένα αρχείο URL, το Docker θα το κατεβάσει στον καθορισμένο κατάλογο.
  • ENV - μεταβλητές περιβάλλοντος.
  • CMD - ξεκινά τη δημιουργία ενός νέου κοντέινερ με βάση την εικόνα.
  • ENTRYPOINT - Η εντολή εκτελείται κατά την εκκίνηση του κοντέινερ.
  • Το WORKDIR είναι ο κατάλογος εργασίας για την εκτέλεση της εντολής CMD.
  • USER - Ορίζει το UID για το κοντέινερ που δημιουργήθηκε από την εικόνα.
  • VOLUME - Προσαρτά τον κατάλογο κεντρικού υπολογιστή στο κοντέινερ.
  • Το EXPOSE είναι ένα σύνολο θυρών που ακούγονται στο κοντέινερ.

Πώς λειτουργεί το UnionFS;

UnionFS — Σύστημα αρχείων στοίβας υπηρεσιών (FS) για Linux και FreeBSD. Αυτό το FS υλοποιεί τον μηχανισμό αντιγραφής σε εγγραφή (Copy-On-Write, COW). Η μονάδα εργασίας του UnionFS είναι ένα επίπεδο, κάθε επίπεδο πρέπει να θεωρείται ως ένα ξεχωριστό πλήρες σύστημα αρχείων με ιεραρχία καταλόγου από την ίδια τη ρίζα. Το UnionFS δημιουργεί ένα σύνδεσμο ένωσης για άλλα συστήματα αρχείων και σας επιτρέπει να συγχωνεύετε με διαφάνεια αρχεία και καταλόγους από διαφορετικά συστήματα αρχείων (που ονομάζονται κλάδοι) σε ένα ενιαίο συνδεδεμένο σύστημα αρχείων, με διαφάνεια στον χρήστη.

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

Το UnionFS συνδυάζει επίπεδα με βάση τις ακόλουθες αρχές:

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

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

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

Πηγή: www.habr.com

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