Containerisation

Ένα container (δοχείο) αποτελεί ένα απομονωμένο στιγμιότυπο του χώρου χρηστών του πυρήνα ενός λειτουργικού συστήματος και αντιστοιχεί σε ένα διαφορετικό και πιο ελαφρύ είδος εικονικοποίησης που ονομάζεται containerisation σε σχέση με αυτά της πλήρης εικονικοποίησης (full virtualization) και παρα-εικονικοποίησης (para-virtualization). Το κύριο χαρακτηριστικό αυτού του είδους εικονικοποίησης είναι πως τα προγράμματα που εκτελούνται σε ένα δοχείο μπορούν να δουν μόνο τα περιεχόμενα του δοχείου καθώς και μόνο τους πόρους που έχουν ανατεθεί σε αυτό. Επιπλέον, ο πυρήνας του λειτουργικού συστήματος φροντίζει ώστε να περιορίσει την επίδραση των δραστηριοτήτων ενός δοχείου σε σχέση με τα άλλα που φιλοξενούνται στον ίδιο πυρήνα. Οπότε, το επίπεδο απομόνωσης που επιτυγχάνεται στο containerisation είναι πολύ καλύτερο σε σχέση με αυτά των άλλων δύο ειδών εικονικοποίησης.

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

Εικόνα 1 – Σύγκριση πλήρους εικονικοποίησης και containerisation. Πηγή: https://tinyurl.com/24k7tdy4

 

 

Σχέση containerisation με αρχιτεκτονική μικρο-υπηρεσιών

Το containerisation είναι στενά συνδεδεμένο με την αρχιτεκτονική μικρο-υπηρεσιών (micro-service architecture). Σε αυτή την αρχιτεκτονική, κάθε συστατικό μέρος (component) της εφαρμογής είναι μια μικρο-υπηρεσία, η οποία μπορεί να τρέχει στο δικό της δοχείο. Με αυτό τον τρόπο, επιτυγχάνεται ανεξαρτησία και απομόνωση μεταξύ των διαφορετικών συστατικών της εφαρμογής και δίνεται η δυνατότητα ξεχωριστής (συνήθως οριζόντιας) κλιμάκωσής τους ανάλογα με τις ανάγκες της εφαρμογής και το τρέχων περιβάλλον της (context) καθώς και ευκολίας εντοπισμού & απομόνωσης σφαλμάτων. Η εκτέλεση των μικρο-υπηρεσιών σε δοχεία βασίζεται στην συσκευασία των αντίστοιχων συστατικών μερών της εφαρμογής σε εικόνες (images) δοχείων. Λόγω του γεγονότος πως το μέγεθος μιας εικόνας αλλά και του δοχείου του ίδιου είναι μικρό, η κλιμάκωση ενός συστατικού/μικρο-υπηρεσίας σε πολλαπλά στιγμιότυπα πραγματοποιείται τάχιστα σε σχέση με την δημιουργία νέων στιγμιοτύπων ιδεατών μηχανών. Η επόμενη εικόνα επιδεικνύει μια απλή εφαρμογή ιστού (web application) τριών επιπέδων (διεπαφής χρήσης, λογικής & βάσης δεδομένων) όπου κάθε επίπεδο αντιστοιχεί σε ένα συστατικό μέρος που περιέχεται σε αντίστοιχο δοχείο.

Εικόνα 2 – Εφαρμογή ιστού 3 συστατικών συσκευασμένων σε αντίστοιχα δοχεία. Πηγή: https://tinyurl.com/3wvjws9v

Docker

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

 

Pin It on Pinterest