Πώς να χρησιμοποιήσετε το Docker (Μέρος 1 – Εισαγωγή)


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

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

Σε αυτό το πρώτο μέρος, μιας σειράς άρθρων, θα προσπαθήσουμε να ξεκαθαρίσουμε τα πράγματα και να τα βάλουμε στη σωστή προοπτική για οποιονδήποτε προγραμματιστή, sysadmins, Q/A μηχανικούς ή ακόμη και ενθουσιώδης χρήστες που χρειάζονται ακριβώς τη σωστή έμπνευση για τη χρήση των Linux Containers για να λύσουν κάποια ειδικά προβλήματα στον τομέα τους.

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

Πώς προέκυψαν τα «δοχεία» (Container)

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

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

Εικονοποίηση (Virtualisation)

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

Το Virtualization, είναι στην πραγματικότητα η συναρμολόγηση εξαρτημάτων υλικού όπως CPU, RAM, Δίσκοι, Κάρτες Δικτύου κλπ. που όμως, εξομοιώνονται με ένα ειδικό λογισμικό (όπως π.χ. το VirtualBox).

Είναι σαν να οικοδομούμε έναν υπολογιστή, με τα βασικά συστατικά που αναφέρθηκαν παραπάνω, εντός του λειτουργικό συστήματος και να τα συναρμολογήσουμε για να δουλέψουμε σε αυτό σαν να ήταν ένας πραγματικός Η/Υ.

Με αυτόν τον τρόπο, ο εικονικός υπολογιστής γίνεται «επισκέπτης» (Guest OS) μέσα σε έναν πραγματικό υπολογιστή ο οποίος με το λειτουργικό του σύστημα ονομάζεται Host.

doker-pos-xrisimopoioyme-virtualisation

Παρόλο που η εικονικοποίηση υλικού εισήχθη πριν από περίπου 10 χρόνια, άρχισε να χρησιμοποιείται ευρέως σε διάφορους τύπους εξυπηρετητών από προγραμματιστές και sysadmins, χρησιμοποιώντας τη λειτουργία KVM (Virtual Machine με βάση τον πυρήνα) η οποία παρουσιάστηκε στον πυρήνα του Linux το 2007.

Έτσι με την τεχνολογία «VT» της Intel και την «AMD-V » της AMD οι προγραμματιστές και sysadmins μπορούν να δημιουργήσουν πολλαπλές εικονικές μηχανές (VM για συντομία) με σκοπό να δοκιμάσουν τις εφαρμογές τους χωρίς να χρειαστεί να αγοράσουν – νοικιάσουν ολόκληρους διακομιστές.

Ένα από τα μεγάλα πλεονεκτήματα της τεχνολογία Virtualization είναι η δυνατότητα δημιουργίας στιγμιότυπων.

Ένα στιγμιότυπο είναι η κατάσταση μιας εικονικής μηχανής σε ένα ακριβές χρονικό σημείο.

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

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

Μπορείτε να σκεφτείτε εικόνες, όπως το ISO της αγαπημένης σας διανομής Linux.

Δεδομένου ότι το αρχείο ISO περιέχει όλα τα βασικά συστατικά για να τρέχει ένα ολόκληρο λειτουργικό σύστημα από ένα live USB/DVD, με τον ίδιο λοιπόν τρόπο ένα στιγμιότυπο εικονικής μηχανής, περιέχει το λειτουργικό σύστημα αλλά και τα εικονικά εξαρτήματα υλικού.

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

Δοχεία LXC (Linux Containers)

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

doker-pos-xrisimopoioyme-virtualisation-vs-container

Αυτή η κατάσταση, δημιούργησε μια ευκαιρία για τους προγραμματιστές του πυρήνα του Linux και τους χάκερς να δημιουργήσουν κάτι που ονομάζεται «ελαφριά εικονικοποίηση διεργασιών» (lightweight process virtualization). Απάντησαν λοιπόν σε ένα εύλογο ερώτημα : « Γιατί να χρησιμοποιούμε ένα ολόκληρο λειτουργικό σύστημα μέσα σε ένα άλλο λειτουργικό σύστημα όταν μπορούμε να χρησιμοποιούμε το υπάρχον επιλέγοντας μόνο τις απαραίτητες για την υπηρεσία μας διεργασίες ;»

Έτσι, αντί να χρησιμοποιούν ένα ολόκληρο λειτουργικό σύστημα, μπόρεσαν να αφαιρέσουν τα «περιττά» (και επαναλαμβανόμενα) στοιχεία του εικονικού λειτουργικού συστήματος για να δημιουργήσουν μια ελαχιστοποιημένη (minimal) έκδοση του. Αυτό οδήγησε στη δημιουργία του LXC (Linux Containers).

Πριν μπούμε στα βαθειά, θα πρέπει να αναφέρουμε ότι η εικονικοποίηση των διεργασιών δεν είναι κάτι καινούργιο. Το Solaris διαθέτει τα Zones, οι *BSD έχει τα Jails και υπάρχουν άλλες παρόμοιες τεχνολογίες όπως το OpenVZ. Το πρόβλημα είναι ότι συχνά αλλάζουν το όνομα ή το σκοπό τους όταν στην πραγματικότητα χρησιμοποιείται η ίδια βασική ιδέα. Είναι αλήθεια ότι δεν είναι όλα τα προηγούμενα ίδια, αλλά οι θεμελιώδεις αρχές είναι σχεδόν οι ίδιες.

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

Ας επιστρέψουμε όμως στο LXC.

Το LXC λοιπόν διαφέρει από τις εικονικές μηχανές στο ότι είναι ένα περιβάλλον virtualization στο επίπεδο του λειτουργικού συστήματος και όχι ένα περιβάλλον virtualization υλικού. Και οι δύο (LXC και Virtualization) κάνουν το ίδιο πράγμα, αλλά το LXC παρέχει λειτουργικό σύστημα σε επίπεδο υπηρεσιών και έχει το δικό του μερίδιο στην χρήση πόρων αλλά και δικτύου, αντί να δημιουργήσει μια ολόκληρη εικονική μηχανή. Κατά συνέπεια, ένα εικονικό λειτουργικό σύστημα LXC έχει ελάχιστες απαιτήσεις πόρων και εκκινεί σε δευτερόλεπτα.

Όπως μπορείτε να δείτε στην παρακάτω εικόνα, το εικονικό Ubuntu LXC στα αριστερά, χρησιμοποιεί 11MB σε ενώ μια εικονική μηχανή του Ubuntu θα χρησιμοποιούσε πάνω απο 100MB. Επίσης η εκκίνηση του Ubuntu LXC γίνεται σε 1 δευτερόλεπτο ενώ της εικονικής μηχανής σε περισσότερα.

doker-pos-xrisimopoioyme-virtualisation-vs-lxc

Και εγένετο το Docker

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

Το 2013, οι προγραμματιστές της dotCloud (μια εταιρεία που άλλαξε αργότερα το όνομά της στο Docker Inc.) παρουσίασαν το Docker.

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

Ένα δοχείο docker, σε αντίθεση με μια εικονική μηχανή και το LXC, δεν απαιτεί ούτε περιλαμβάνει ξεχωριστό λειτουργικό σύστημα. Αντίθετα, βασίζεται στη λειτουργικότητα του πυρήνα του Linux και χρησιμοποιεί απομόνωση πόρων.

Τα δοχεία docker δημιουργούνται από στιγμιότυπα (images) docker (θυμηθείτε τα στιγμιότυπα του Virtualization). Μπορείτε να φανταστείτε ένα δοχείο docker ως τη ζωντανή κατάσταση μιας διαδικτυακής εφαρμογής που τρέχει από ένα αρχείο ISO. Αλλά αυτή τη φορά το ISO, το οποίο στο παράδειγμά μας είναι το ισοδύναμο του στιγμιότυπου του docker, περιέχει μόνο την εφαρμογή και τις εξαρτήσεις της.

doker-pos-xrisimopoioyme-docker-stracture

Ένα μεγάλο χαρακτηριστικό του docker, το οποίο θα συζητήσουμε στο δεύτερο μέρος, είναι το αρχείο docker (docker file). Ένα αρχείο docker είναι η συνταγή που περιέχει όλα τα απαραίτητα βήματα που απαιτούνται για τη δημιουργία μιας εικόνας docker. Υπάρχουν κυριολεκτικά εκατοντάδες αρχείων docker «έτοιμα για χρήση» που μπορείτε να προσαρμόσετε να τα χρησιμοποιήσετε όπως είναι.

Επίλογος

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

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

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

Εγγραφείτε στο Newsletter του Cerebrux.net για να λαμβάνετε ειδοποίηση για νέα άρθρα

Advertisements

12 thoughts on “Πώς να χρησιμοποιήσετε το Docker (Μέρος 1 – Εισαγωγή)

  1. Ωραίο και ενδιαφέρον άρθρο. Δύο πράγματα μόνο να σημειώσω που μου πήρε και μένα αρκετό καιρό για να τα καταλάβω:

    1. Τα containers δεν είναι ούτε πρέπει να σχετίζονται με τα virtual machines. Ένα virtual machine είναι μια προσομοίωση ενός υπολογιστή σε λογισμικό (εξού και το όνομα virtual machine). Σε αυτόν τον υπολογιστή μπορεί να τρέξει οποιοδήποτε λειτουργικό σύστημα υποστηρίζει την αρχιτεκτονική που προσομοιώνει το virtual machine.

    Τα containers αντιθέτως δεν είναι τίποτα παραπάνω από ένα απομονωμένο περιβάλλον μέσα στο οποίο προορίζετε να «τρέξει» μια διεργασία. Η διεργασία αυτή θα «τρέξει» απομονωμένα και ανεξάρτητα από τις άλλες διεργασίες του λειτουργικού συστήματος.

    Σε αρκετές περιπτώσεις βέβαια βλέπουμε ότι τα containers χρησιμοποιούνται για να τρέξει ένα ολόκληρο λειτουργικό σύστημα μέσα σε αυτά και αυτός είναι και ο κύριος λόγος που δημιουργείτε η σύγχυση με τα virtual machines. Αν και τεχνικά αυτό είναι εφικτό είναι λάθος προσέγγιση στην χρήση της τεχνολογίας των containers. Εκεί που τα containers κάνουν «fit» είναι όταν μια εφαρμογή έχει δομηθεί γύρω από micro services. Δηλαδή μικρές αυτόνομες υπηρεσίες που εκτελούν μια πολύ συγκεκριμένη εργασία. Σε αυτήν την περίπτωση κάθε service «τρέχει» μέσα στο δικό του container. Νομίζω ότι τα containers βρίσκονται ακόμα στην αρχή και ο κόσμος δεν έχει καταλάβει ακόμα πως να τα αξιοποιήσει στο έπακρο.

    2. To Docker δεν είναι από μόνο του τεχνολογία containerization αλλά ένας wrapper σε υπάρχουσες τεχνολογίες του πυρήνα(cgroups, namespaces). To διευκρινίζω αυτό γιατί πολύ νομίζουν ότι containers = Docker. Μέγα λάθος μιας και μπορείς κάλλιστα να τρέξεις μια διεργασία απομονωμένα χωρίς Docker.

    1. Πολύ σημαντικές οι παρατηρήσεις σου Κώστα και ελπίζω οτι δεν δημιουργήθηκε από το άρθρο η εντύπωση ότι το Docker είναι το μόνο στην αγορά ή οτι containers == virtualization. Στόχος μου ήταν μια απλοποιημένη ιστορική αναδρομή για το πως φτάσαμε σε αυτές τις τεχνολογίες. Προσωπικά εδώ και πολύ καιρό χρησιμοποιώ το LXC/LXD λόγο των «δυστροπιών» που έχει το Docker σε κάποιες περιπτώσεις ενώ σε άλλες περιπτώσεις το Docker.

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

      Εγώ τα containers τα έχω στο μυαλό μου ως έχω π.χ. να κάνω για δοκιμή – compile και εγκατάσταση ένα πρόγραμμα Α το οποίο έχεις τις εξαρτήσεις πακέτων ‘χ’,’ψ’,’ζ’ και θα επηρεάζει και το ‘υ’,’φ’ & ‘ω’ πρόγραμμα – διεργασία του υπάρχουν συστήματος μου και πιθανός μπορεί να μου τα κάνει όλα μαντάρα..
      Οπότε τα containers δημιουργήθηκαν ώστε να δημιουργήσω π.χ. ένα container να κάνω μέσα εκεί ότι θέλω… να δω πως θα πάει και ανά πάσα στιγμή είτε το απενεργοποιώ ( δε ξέρω αν γίνεται – πιθανός θα γίνεται ) είτε το διαγράφω και έχω το σύστημα μου όπως ήταν..
      Ανέπαφο χωρίς κανένα απολύτως πρόβλημα ή απαραίτητα σκουπίδια σε αυτό..
      Έχω καταλάβει χοντρικά σωστά ή όχι;

      Α! Δεν ήξερα πως σε ένα container, μπορείς να κάνεις εγκατάσταση και ένα ολόκληρο λειτουργικό σύστημα… αλλά αυτό δεν είναι too much ? και ίσος και να μην ενδείκνυται και ίσος να βαρύνει και το σύστημα κατά πολύ κιόλας ( έτσι όπως το έχω στο μυαλό μου ) Κάτι αναφέρεις και εσύ….. τι λέτε για την παραπάνω ερώτηση – ερμηνεία – άποψη μου;

      1. Αν και μπορείς, το σημαντικό είναι να σκεφτείς ότι τα Docker Container είναι απλά πακέτα με όλες τις εξαρτήσεις μια υπηρεσίας και τίποτα άλλο.
        Π.χ έστω οτι βγάνει νέα έκδοση PHP και θες να δεις αν δουλεύει σωστά το WordPress. Φτιάχνεις ένα container με την νέα έκδοση του PHP μέσα και βάζεις και το WordPress και τέλος τρέχεις το container. Έτσι, δεν χρειάζεται π.χ. να βάλεις νέα έκδοση PHP σε όλο το λειτουργικό σου ούτε να μπλέκεις με εξαρτήσεις.
        Όλα θα γίνουν μέσα στο Container το οποίο ούτε επηρεάζει το «εξωτερικό» λειτουργικό σύστημα

        1. Μάλιστα, αυτό ακριβώς που είπα δηλαδή.;
          Δημιουργείς κάνει ότι θες εκεί μέσα και έπειτα αν το διαγράψεις στο σύστημα σου, ούτε γάτα ούτε ζημιά.

          Απλώς κάτι που σκέφτομαι για το παράδειγμα που αναφέρεις. Οκ εγώ στο σύστημα μου έχω την PHP5 ή την Python 3.2 που λέει ο λόγος, κάνω ένα νέο container και θέλω σε αυτό είτε να έχω την PHP7 είτε την Python 3.6.1 , μπορώ ακόμη εσωτερικά του container να διαγράψω κιόλας τις προηγούμενες εκδόσεις ή όχι; π.χ. να διαγράψω εντελώς την Python 3.2 ή την PHP5 ;

          Στην Python ειδικότερα, το πακέτο «virtualenv» ή και άλλα παρόμοια του, σαν containers δε δουλεύουν δηλαδή;

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

        2. Φυσικά βοηθούν !
          Ναι περίπου το virtualenv δουλεύει κάπως έτσι αλλά είναι πιο διαδραστικό περιβάλλον όπως το LXC container. Τα Docker Images απο την άλλη είναι πιο στατικά και όπως είπες αν θες δημιουργείς ένα με python 2 ένα άλλο με python 3 κλπ. Τα διαγράφεις και δεν σε νοιάζει.

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

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

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

    Ερωτήσεις :
    Στην εικόνα που δείχνεις σε αντιπαράθεση το LXC με το Virtual μηχάνημα.. αυτά πως τα έκανες εγκατάσταση;
    Το ένα είναι π.χ. με το OpenVZ και το άλλο απλώς μια εικονική μηχανή σε VirtualBox ?

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

    Και μετά λες :
    «Ένα δοχείο docker, σε αντίθεση με μια εικονική μηχανή και το LXC, δεν απαιτεί ούτε περιλαμβάνει ξεχωριστό λειτουργικό σύστημα. Αντίθετα, βασίζεται στη λειτουργικότητα του πυρήνα του Linux και χρησιμοποιεί απομόνωση πόρων.»

    Οπότε, η τεχνολογία Linux Containers ( LXC ), *απαιτεί* ΚΑΙ αυτή ένα ολόκληρο λειτουργικό σύστημα; Δηλαδή με το LXC, πάλι παίρνεις ένα ολόκληρο λειτουργικό σύστημα; Και το docker είναι που κάνει τη διαφορά και δε χρειάζεται ένα ολόκληρο λειτουργικό σύστημα, απλώς πάνω στο υπάρχων προσθέτει εικονικά μέρη..;

    Βασικά σε ετούτη εδώ την παράγραφο :
    «Το LXC λοιπόν διαφέρει από τις εικονικές μηχανές στο ότι είναι ένα περιβάλλον virtualization *στο επίπεδο του λειτουργικού συστήματος* και *όχι ένα περιβάλλον virtualization υλικού*. Και οι δύο (LXC και Virtualization) *κάνουν το ίδιο πράγμα*, αλλά το LXC παρέχει λειτουργικό σύστημα σε επίπεδο *υπηρεσιών* και έχει το δικό του μερίδιο στην χρήση πόρων αλλά και δικτύου, αντί να δημιουργήσει μια ολόκληρη εικονική μηχανή.»
    καταλαβαίνω πως οκ παρέχουν το ίδιο πράγμα.. και ότι το LXC είναι ελαφρύτερο, αλλά δεν αντιλαμβάνομαι σωστά των όρων
    *υπηρεσιών* που αναφέρεις.. νομίζω πως θα έπρεπε να επεκταθείς περισσότερο και να αναλύσεις την παράγραφο αυτή ώστε να γίνεις περισσότερο κατανοητός.

    Τέλος διάβασε λιγάκι και διόρθωσε της παραγράφους :
    * 2η παράγραφος έχεις ένα λαθάκι..
    * Πριν από την ενότητα : «Δοχεία LXC (Linux Containers)» στην προηγούμενη αμέσως παράγραφο έχεις ένα λαθάκι..

    Ξανά μπράβο σου για την προσπάθεια σου! Κάνει μια πολύ καλή προσέγγιση στο θέμα και ήταν κάτι που όπως είπα έλειπε από την ελληνική κοινότητα.
    Καλή συνέχεια, κράτησε την δουλειά σου σε υψηλό επίπεδο. Αναμένουμε τις συνέχειες.. 😉

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

    1. Σε ευχαριστώ για τα καλά σου λόγια. Θα προσπαθήσω να απαντήσω σε όλα τα ερωτήματα σου:

      1) Η εικόνα με το LXC και HOST είναι για να δείξω ότι αν και τα δύο είναι λειτουργικά συστήματα, το LXC έχει τα απολύτως απαραίτητα. Με άλλα λόγια αντί να εγκαταστήσεις εικονική μηχανή (Virtualbox) ή ένα κανονικό λειτουργικό σύστημα για να τρέχεις π.χ. WordPress ιστοσελίδα καλύτερα είναι να το τρέχεις σε LXC

      2) Containers είναι ο γενικός όρος που έχει δοθεί όταν «κατι» περιλαμβάνει τα απολύτως απαραίτητα για να τρέχει. Τα LXC containers είναι Διανομές Linux τα οποία όμως είναι «αδυνατισμένα», δηλαδή τρέχουν τα άκρως απαραίτητα απο ένα λειτουργικό σύστημα. Σε ενα LXC container π.χ. που είναι UBUNTU μπορείς μέσα να μπεις και να κάνεις εγκατάσταση, κανονικά τα πακέτα με sudo apt install.
      Αντίθετα τα Docker Container είναι ακόμα πιο μικρά και περιλαμβάνουν τα άκρος απαραίτητα για να τρέχουν ΜΙΑ και Μονο υπηρεσία.
      Σε ένα LXC Container μέσα μπορείς να τρέχεις ακόμα και Docker Containers. Το Αντίστροφο όχι.

      Από άποψη κλίμακας μεγέθους μπορείς να το σκεφτείς κάπως έτσι (απο αριστερά το μεγαλύτερο προς το μικρότερο):
      Λειτουργικό σύστημα > Εικονική μηχανή > LXC Container > Docker Container

      1. Θα σου αριθμήσω τις ερωτήσεις μου ( μην απογοητευτείτε παρακαλώ.. ^_^ )

        1) Μήπως η σειρά είναι : Kernel – based Virtual Machine ( KVM ) -> Linux Containers -> Docker ?

        2α) To LXC (Linux Containers) και αυτό υλοποιήθηκε ως συνέχεια του KVM στον πυρήνα;
        2β) Είναι πλέον ενσωματωμένο στον πυρήνα Linux?

        3α) Το OpenVZ, LXC δημιουργεί; Νομίζω πως όχι… αλλά τι δημιουργεί και βασίζεται πάνω σε ένα κεντρικό μηχάνημα ώστε να μη τα φορτώνει όλα;
        3β) Πάντως αν όντως το OpenVZ *δεν* είναι LXC, είναι τουλάχιστον στη λογική του, σωστά;

        4α) Δε καταλαβαίνω απόλυτα το LXC. :/
        4β) Αν έχω καταλάβει σωστά το LXC, *δεν* χρησιμοποιεί το hardware – δεν ασχολείται καν μάλλον με το hardware.. ;
        4γ) Το LXC, καταρχήν απαιτεί Linux ώστε να τρέξει;
        και χρησιμοποιεί τον πυρήνα του και όλα μάλλον τα βασικά δομικά χαρακτηριστικά του GNU/Linux, τα οποία τα παίρνει από το ήδη τρέχον σύστημα και τα χρησιμοποιεί σε ένα ψευτό (εικονικό) δικό του ολοκληρωμένο & ανεξάρτητο σύστημα;
        4δ) Δημιουργεί ένα εικονικό λειτουργικό (πραγματικά τείνει περισσότερο από όλα ίσος στην έννοια της λέξης «εικονικό») σύστημα το οποίο *βασίζεται στο τρέχων λειτουργικό σύστημα* και φορτώνει από αυτό τα βασικά χαρακτηριστικά του, αλλά από εκεί και πέρα σε αυτό το εικονικό (ψευτό) σύστημα, μπορείς να βάλεις ότι θέλεις.. ;

        Στην αρχή νόμιζα πως το LXC ήταν και διαφορετικές εκδόσεις των διανομών ( π.χ. Ubuntu 16.04 LTS LXC Version ) : επειδή λες και αυτό :

        «Τα LXC containers είναι Διανομές Linux τα οποία όμως είναι «αδυνατισμένα», δηλαδή τρέχουν τα άκρως απαραίτητα απο ένα λειτουργικό σύστημα.»

        5) αλλά από ότι βλέπω απλώς με μερικές εντολές δημιουργείς ένα LXC σύστημα… τελικά έτσι είναι;

        Όσο για το Docker, επειδή λες :
        «Αντίθετα τα Docker Container είναι ακόμα πιο μικρά και περιλαμβάνουν τα άκρος απαραίτητα για να τρέχουν ΜΙΑ και Μονο υπηρεσία.»
        6α) Εντάξει, αυτή προσπαθεί να είναι η φιλοσοφία του ίσος, αλλά δε νομίζω να γίνεται ποτέ να τρέχει μονάχα μια υπηρεσία, μονάχα ένα πρόγραμμα ; π.χ. ένα python script να τρέξεις θα θέλει ίσος και άλλες δύο βιβλιοθήκες – εξαρτήσεις, οπότε δε θα πρέπει να τις εγκαταστήσεις στο docker ;
        6β) Αλλά από την άλλη έχω ακούσει – δει. π.χ. στο Nextcloud ( ίσος και στο WordPress που αναφέρεις εσύ, να λένε τίποτα παρόμοια ), λένε π.χ. κάνε εγκατάσταση, αυτό το πρόσθετο ( app ) μέσω του docker, και εκεί με μπέρδευαν πολύ…
        6γ) Δηλαδή, γίνεται να «κουμπώσεις» ένα docker container σε μια εφαρμογή που τρέχει στο κανονικό σου σύστημα;

        Από ότι καταλαβαίνω όμως, όλες αυτές οι τεχνικές/λειτουργίες εικονικοποίησης, έχουν και τα καλά και τα κακά τους όμως η κάθε μια ( δε νομίζω να είναι κάποια τέλεια σε όλα )

        Τέλος συγνώμη αν σας έχω κουράσει, αλλά θέλω πραγματικά να καταλάβω όσο το δυνατόν καλύτερα τι παίζει εδώ.
        Νομίζω πως το συγκεκριμένο άρθρο εισαγωγής & ιστορικής αναδρομής, *πριν* φτάσουμε στο Docker, θα μπορούσε να ήταν τελικά μια άλλη ολόκληρη σειρά άρθρων με τις προηγούμενες τεχνολογίες.
        7 ) Διότι δε νομίζω πλέον με το docker να καταργήσουμε και όλα τα άλλα…. το κάθε τι είναι για το σκοπό του, έτσι δεν είναι;

        Ευχαριστώ.

        1. 1) Για να φτιάξεις μια Εικονική μηχανή μπορείς να χρησιμοποιήσεις διαφορές τεχνολογίες. Στην κατηγορία αυτή εμπίπτουν το KVM, Virtual Box, VMware κλπ. Κάτι σαν διαφορετικές μάρκες οδοντόβουρτσα είναι αυτές οι τεχνολογιες, όλες κάνουν την ίδια δουλειά απλά κατασκευάζονται από διαφορετικές εταιρίες.

          2α) Το LXC υλοποιήθηκε ως συνέχεια των cgroups που εμφανίστηκαν στο Linux πυρήνα. Κάνε μια αναζήτηση για το τι είναι το cgroups στο Google για να πάρεις μια ιδέα.
          2β) Ναι απλά θα χρειαστεί να κάνεις εγκατάσταση μερικά πακέτα για να το διαχειριστείς. Έχω γράψει και για kvm εδώ https://cerebrux.net/tag/kvm/

          3α) το OpenVZ κάνει κάτι παρόμοιο με το LXC οπότε μπορείς να το σκεφτείς ως διαφορετικές μάρκες.

          3β) Ναι

          4α) Σκέψου το σαν εικονική μηχανή αλλά σε πολύ μικρότερη εκδοχή.

          4β) Σωστά
          4γ) Σωστά
          4δ) Σωστά. Υπάρχει ένα εργαλείο το LXD με το οποίο μπορείς να έχεις LXC διαφορετικών διανομών ανεξάρτητα αν από κάτω έχεις άλλη διανομή https://linuxcontainers.org/lxd/getting-started-cli/

          5) Σωστά

          6α) Ναι, όπως είπα όλες οι εξαρτήσεις είναι στο Docker ώστε η υπηρεσία για να τρέχει σωστα. Όταν λέω υπηρεσία είναι αυτό που λέει η λέξη. Π.χ. Για να τρέξει το WordPress η το Nextcloud έχει εξάρτηση την php. Αυτά είναι στο container με τα αρχεία του WordPress η του Nextcloud. Εκεί μέσα μπορείς να βάλεις την Apache η την Nginx για να σερβίρει την σελιδα. Όμως το σωστό είναι η βάση δεδομένων π.χ. να είναι σε άλλο container και αυτά να κουμπωνουν μεταξύ τους

          Θα ασχοληθούμε σε επόμενο άρθρο για το πως τα δημιουργούμε

          6β και γ) Ναι ανάλογα την υπηρεσία που τρέχει το container αυτά μπορούν να μιλάνε με αλλα container και να ανταλλάσουν. πληροφορίες.

          Καμία δεν είναι τέλεια! Κάθε ένα έχει τα θετικά του και τ αρνητικά του.

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

          7) Σωστο

Απορίες, παρατηρήσεις, ιδέες... Ελεύθερα ! Πες την άποψή σου... έστω και Ανώνυμα:

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s