Τεχνικές εικονικοποίησης σε επίπεδο λειτουργικού συστήματος: Μελέτη και σενάρια χρήσης-αξιοποίησης μέσω Docker

This item is provided by the institution :
University of West Attica   

Repository :
Institutional Repository Polynoe   

see the original item page
in the repository's web site and access all digital files if the item*



Τεχνικές εικονικοποίησης σε επίπεδο λειτουργικού συστήματος: Μελέτη και σενάρια χρήσης-αξιοποίησης μέσω Docker

Δρακόπουλος, Παναγιώτης Αίας

Σχολή Μηχανικών
Kantzavelou, Ioanna
Mamalis, Basilis
Karkazis, Panagiotis
Τμήμα Μηχανικών Πληροφορικής και Υπολογιστών

Διπλωματική εργασία

2021-10-15

2021-11-04T14:06:22Z


Στη παρακάτω πτυχιακή εργασία του τελειόφοιτου φοιτητή Παναγιώτη – Αίαντα Δρακόπουλου γίνεται μια συνολική απεικόνιση των εννοιών της εικονικοποίησης (virtualization), πού συναντάται, και ποιες είναι οι κατηγορίες εικονικοποίησης . Στη συνέχεια γίνεται εκτενή αναφορά στις έννοιες του Containerization και του εργαλείου Docker. Τίθενται σε σύγκριση οι μέθοδοι της εικονικοποίησης και του Containerization και παρατίθενται τα πλεονεκτήματα της χρήσης της εικονικοποίησης με βάση το Docker. Μετέπειτα παρουσιάζεται ολόκληρη η αρχιτεκτονική του Docker, πώς επιτυγχάνεται η επικοινωνία των containers μεταξύ τους αλλά και με τον έξω κόσμο και πώς μπορεί ο χρήστης να προχωρήσει στη δημιουργία δικού του αποθετηρίου (repository) στο Docker Hub. Ακολουθεί αναφορά στη λειτουργία σμήνους στο Docker (docker swarm), πώς δημιουργείται ένα docker swarm, πώς επιτυγχάνεται η ενορχήστρωση των container, πώς λειτουργούν οι κόμβοι ανάλογα το ρόλο που τους έχει ανατεθεί και πώς προστίθενται στο σμήνος το οποίο έχει δημιουργηθεί. Κλείνοντας παρουσιάζεται η δημιουργία μιας υπηρεσίας nginx πάνω σε ένα cluster Docker Swarm και επίσης δημιουργήσουμε το δικό μας εξατομικευμένο Word Press Blog το οποίο δεν θα «τρέχει» στον υπολογιστή μας αλλά σε docker container μέσω του Docker. Ένας φυσικός υπολογιστής είναι μια συσκευή βασισμένη σε υλικό, όπως ένας προσωπικός υπολογιστής. Ο όρος γενικά χρησιμοποιείται για τη διαφοροποίηση υπολογιστών με βάση το υλικό από εικονικές μηχανές (Virtual Machine) που βασίζονται σε λογισμικό. Ένας φυσικός υπολογιστής διαθέτει επεξεργαστή (CPU), σκληρό δίσκο (Hard Drive), μνήμες RAM και σύνδεση στο δίκτυο. Στα πλαίσια του virtualization ο φυσικός υπολογιστής ονομάζεται Host. Virtualization είναι η διαδικασία χρήσης ενός «ειδικού λογισμικού» σε μια φυσική μηχανή για να δημιουργηθεί μια εικονική μηχανή (VM). Αυτό το «ειδικό λογισμικό» καλείται ως Hypervisor και η εικονική μηχανή που δημιουργείται καλείται ως Guest. Πριν τους Hypervisors, οι περισσότεροι φυσικοί υπολογιστές μπορούσαν να τρέξουν μόνο ένα λειτουργικό σύστημα, δηλαδή το υλικό (hardware) χειριζόταν αιτήματα μόνο από το συγκεκριμένο λειτουργικό σύστημα. Το μειονέκτημα αυτής της προσέγγισης ήταν ότι σπαταλούσε πόρους καθώς το λειτουργικό σύστημα δεν μπορούσε πάντα να χρησιμοποιήσει όλη την υπολογιστική του ισχύ. Οι Hypervisors λύνουν αυτό το πρόβλημα. Πρόκειται για ένα μικρό στρώμα λογισμικού που επιτρέπει σε πολλαπλά λειτουργικά συστήματα να τρέχουν παράλληλα, μοιράζοντας τους ίδιους φυσικούς πόρους υπολογιστών. Αυτά τα λειτουργικά συστήματα είναι τα εικονικά μηχανήματα (VMs), τα οποία μιμούνται ένα ολόκληρο περιβάλλον υπολογιστικού υλικού στο λογισμικό. Αν και κάποια μορφή εικονικοποίησης υπήρχε από τα μέσα 9 της δεκαετίας του 1960, εξελίχθηκε με την πάροδο του χρόνου, παραμένοντας όμως κοντά στις ρίζες της. Μεγάλο μέρος της εξέλιξης στην εικονικοποίηση έχει συμβεί τα τελευταία χρόνια, με νέους τύπους να αναπτύσσονται και να εμπορευματοποιούνται. Οι διαφορετικοί τύποι εικονικοποίησης περιορίζονται σε εικονικοποίηση επιφάνειας εργασίας (Desktop Virtualization), εικονικοποίηση εφαρμογών (Application Virtualization), εικονικοποίηση διακομιστή (Server Virtualization), εικονικοποίηση αποθήκευσης (Storage Virtualization) και εικονικοποίηση δικτύου (Network Virtualization). Το Containerization επιτρέπει στους προγραμματιστές να δημιουργούν και να αναπτύσσουν εφαρμογές γρηγορότερα και με μεγαλύτερη ασφάλεια. Με τις παραδοσιακές μεθόδους, ο κώδικας αναπτύσσεται σε ένα συγκεκριμένο υπολογιστικό περιβάλλον το οποίο, όταν μεταφέρεται σε μια νέα τοποθεσία, συχνά οδηγεί σε σφάλματα (bugs, errors). Για παράδειγμα, όταν ένας προγραμματιστής μεταφέρει κώδικα από επιτραπέζιο υπολογιστή σε εικονική μηχανή (VM) ή από Linux σε λειτουργικό σύστημα Windows. Το Containerization εξαλείφει αυτό το πρόβλημα ομαδοποιώντας τον κωδικό εφαρμογής μαζί με τα σχετικά αρχεία διαμόρφωσης, βιβλιοθήκες και εξαρτήσεις που απαιτούνται για την εκτέλεση του. Αυτό το ενιαίο πακέτο λογισμικού ή κοντέινερ αφαιρείται από το λειτουργικό σύστημα του κεντρικού υπολογιστή, και ως εκ τούτου, είναι μόνο του και γίνεται φορητό - ικανό να τρέχει σε οποιαδήποτε πλατφόρμα ή cloud, χωρίς προβλήματα. Η έννοια του Containerization είναι δεκαετιών, αλλά η εμφάνιση του ανοιχτού κώδικα Docker Engine το 2013, ένα βιομηχανικό πρότυπο για κοντέινερ με απλά εργαλεία προγραμματιστή και μια καθολική προσέγγιση packaging, επιτάχυνε την υιοθέτηση αυτής της τεχνολογίας. Το κοντέινερ (container) είναι μια τυπική μονάδα λογισμικού που συσκευάζει κώδικα και όλες τις εξαρτήσεις του, έτσι ώστε η εφαρμογή να εκτελείται γρήγορα και αξιόπιστα από το ένα υπολογιστικό περιβάλλον στο άλλο. Μια εικόνα κοντέινερ (Container Image) είναι ένα ελαφρύ, αυτόνομο, εκτελέσιμο πακέτο λογισμικού που περιλαμβάνει όλα όσα χρειάζονται για την εκτέλεση μιας εφαρμογής: κωδικός, χρόνος εκτέλεσης, εργαλεία συστήματος, βιβλιοθήκες συστήματος και ρυθμίσεις. Η τεχνολογία του Containerization προσφέρει σημαντικά οφέλη για προγραμματιστές και ομάδες ανάπτυξης. Μεταξύ αυτών είναι η φορητότητα, η ευελιξία, η ταχύτητα, η απομόνωση βλαβών, η ευκολία διαχείρισης, η αποδοτικότητα και η ασφάλεια. Αφού εξετάσαμε καθεμία από τις τεχνολογίες ξεχωριστά, το ερώτημα είναι, ποια πρέπει να προτιμάται; Η απάντηση εξαρτάται από πολλά διαφορετικά σημεία. Ουσιαστικά, κάθε επιχείρηση ή εφαρμογή έχει διαφορετικές ανάγκες, απαιτήσεις και σκοπό. Η επιλογή του virtualization έναντι του containerization εξαρτάται από την επιχειρηματική ανάπτυξη, το επιχειρησιακό μοντέλο ή τον τρόπο σύνταξης και παραγωγής των εφαρμογών. Και οι δύο είναι τεχνολογίες λογισμικού που δημιουργούν αυτόνομα εικονικά πακέτα, αλλά για να επιλέξουμε αυτό που θα ταιριάζει καλύτερα στις ανάγκες του χρήστη, θα εξετάσουμε τα ακόλουθα σημεία: ταχύτητα, διαχείριση πόρων, 10 ασφάλεια, φορητότητα, το κύκλο ζωής της εφαρμογής και τις απαιτήσεις λειτουργικού συστήματος. Ωστόσο, είναι σημαντικό να σημειωθεί ότι υπάρχουν τρόποι συνδυασμού containerization και virtualization έτσι ώστε τα πλεονεκτήματα και των δύο τεχνολογιών να συνδυάζονται. Το Docker είναι μια ανοιχτή πλατφόρμα για ανάπτυξη, αποστολή και εκτέλεση εφαρμογών. Μας επιτρέπει να διαχωρίζουμε τις εφαρμογές (Application) από τη δομή (infrastructure), ώστε να μπορούμε να παραδίδουμε το λογισμικό γρήγορα. Με το Docker, μπορούμε να διαμερίζουμε την δομή μας με τον ίδιο τρόπο που διαχειριζόμαστε τις εφαρμογές μας. Αξιοποιώντας τις μεθοδολογίες του Docker για αποστολή, δοκιμή και ανάπτυξη κώδικα, μπορούμε να μειώσουμε σημαντικά την καθυστέρηση μεταξύ σύνταξης κώδικα και εκτέλεσής του στην παραγωγή. Συνεχίζοντας θα εξετάσουμε την αρχιτεκτονική του Docker και τα σχετικά στοιχεία της. Θα εξετάσουμε επίσης πώς λειτουργεί κάθε στοιχείο για να κάνει το Docker να λειτουργεί. Η αρχιτεκτονική του Docker χρησιμοποιεί ένα μοντέλο διακομιστή-πελάτη και περιλαμβάνει τα στοιχεία Docker Client, Docker Host, Network and Storage και το Docker Registry / Hub. Τα κοντέινερ είναι ενθυλακωμένα περιβάλλοντα στα οποία εκτελούνται οι εφαρμογές. Το κοντέινερ ορίζεται από την εικόνα και τυχόν πρόσθετες επιλογές διαμόρφωσης που παρέχονται κατά την εκκίνηση του κοντέινερ, και δεν περιορίζονται στις συνδέσεις δικτύου και στις επιλογές αποθήκευσης. Τα κοντέινερ έχουν πρόσβαση μόνο σε πόρους που ορίζονται στην εικόνα, εκτός εάν ορίζεται πρόσθετη πρόσβαση κατά την κατασκευή της εικόνας σε κοντέινερ. Μπορούμε επίσης να δημιουργήσουμε μια νέα εικόνα με βάση την τρέχουσα κατάσταση ενός κοντέινερ. Δεδομένου ότι τα κοντέινερ είναι πολύ μικρότερα από τα VM, μπορούν να περιστραφούν σε λίγα δευτερόλεπτα και να έχουν πολύ καλύτερη πυκνότητα διακομιστή (server density). Φτάνοντας προς το τέλος της εργασίας, συναντάμε την έννοια του σμήνους (swarm) και εμβαθύνουμε στο πώς λειτουργούν οι κόμβοι είτε πρόκειται για manager είτε για worker nodes. Η λειτουργία σμήνους μας επιτρέπει να διαχειριζόμαστε ένα σύμπλεγμα Docker Engines, εγγενώς στην πλατφόρμα Docker. Μπορούμε να χρησιμοποιούμε το Docker CLI για να δημιουργήσουμε ένα σμήνος, να αναπτύξουμε υπηρεσίες εφαρμογών σε ένα σμήνος και να διαχειριστούμε τη συμπεριφορά του. Κλείνοντας, περιγράφετε βήμαβήμα η δημιουργία μιας υπηρεσίας nginx σε ένα Docker Swarm Cluster και επίσης δημιουργήσουμε το δικό μας εξατομικευμένο Word Press Blog το οποίο δεν θα «τρέχει» στον υπολογιστή μας αλλά σε docker container μέσω του Docker


Swarm
Containerization
Docker
Virtual machine
Εικονικοποίηση

Greek

Πανεπιστήμιο Δυτικής Αττικής

ΣΧΟΛΗ ΜΗΧΑΝΙΚΩΝ - Τμήμα Μηχανικών Πληροφορικής και Υπολογιστών - Διπλωματικές εργασίες

Αναφορά Δημιουργού - Μη Εμπορική Χρήση - Παρόμοια Διανομή 4.0 Διεθνές
https://creativecommons.org/licenses/by-nc-sa/4.0/deed.el




*Institutions are responsible for keeping their URLs functional (digital file, item page in repository site)