Οδηγός κοντέινερ Linux: Εισαγωγή στα κοντέινερ

click fraud protection

Τα εμπορευματοκιβώτια είναι ένα τσιτάτο εδώ και χρόνια... αλλά τι ακριβώς είναι;

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

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

Τα κοντέινερ είναι εικονικές μηχανές;

Τα κοντέινερ μπορεί να είναι ένα περίπλοκο θέμα, αλλά είναι καλύτερο να ξεκινήσετε με ένα βασικό σημείο: Το κοντέινερ είναι

δεν μια εικονική μηχανή. Μια εικονική μηχανή είναι μια προσομοιωμένη έκδοση συγκεκριμένου υλικού και του λογισμικού του που εκτελείται σε αυτό που είναι γνωστό ως hypervisor. Εάν έχετε χρησιμοποιήσει ποτέ λογισμικό όπως το VirtualBox ή multipass, τότε έχετε χρησιμοποιήσει έναν hypervisor.

Ο hypervisor συνήθως εκτελείται είτε ως δικό του λειτουργικό σύστημα (γνωστό ως hypervisor τύπου 1) είτε εντός των ορίων ενός άλλου λειτουργικού συστήματος όπως τα Windows ή το Ubuntu (υπερεπόπτη τύπου 2). Η ευθύνη του υπερεπόπτη είναι να παρουσιάσει στο λειτουργικό σύστημα επισκέπτη το προσομοιωμένο υλικό που απαιτείται για να εκτελεστεί. Στη συνέχεια, το πλήρες λειτουργικό σύστημα μπορεί να τρέξει από πάνω. Αυτό περιλαμβάνει τα πάντα, από προσομοίωση CPU και RAM έως διαύλους δεδομένων, μονάδες δίσκου ή προσαρμογείς δικτύου. Αυτή η προσομοίωση είναι υπολογιστικά δαπανηρή, επομένως οι εικονικές μηχανές έχουν συνήθως σημαντικό κόστος.

Λοιπόν, τι είναι ένα δοχείο;

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

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

Ποιες είναι οι συμβιβασμούς για τη χρήση κοντέινερ;

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

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

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

Εγκατάσταση του Docker

Αυτό είναι πολλή θεωρία, οπότε ας γίνουμε πρακτικοί. Για να σας δείξουμε πώς να ρυθμίσετε ένα κοντέινερ, θα εγκαταστήσουμε το Docker στο Ubuntu 23.10 και θα το χρησιμοποιήσουμε για να εκτελέσουμε ένα απλό κοντέινερ Hello World. Τα βήματά μας ελέγχονται σε εικονική μηχανή, αλλά θα μπορούσατε επίσης να κάνετε διπλή εκκίνηση από τον υπολογιστή σας με Windows ή να χρησιμοποιήσετε ένα υπέροχο φορητό υπολογιστή για Linux.

Το Docker έχει γίνει γρήγορα το de-facto εργαλείο μεταφοράς εμπορευματοκιβωτίων. Ενώ υπάρχουν άλλα εργαλεία, το Docker έχει υιοθετηθεί ευρέως και είναι τέλειο για όλες εκτός από τις πιο απαιτητικές εφαρμογές. Υπάρχει τεκμηρίωση σχετικά με τους διαφορετικούς τρόπους εγκατάστασης του Docker, αλλά θα χρησιμοποιήσουμε το σενάριο εγκατάστασης ευκολίας. Αυτή η εντολή θα κατεβάσει ένα σενάριο από το get.docker.com στον τοπικό σας υπολογιστή:

$ curl -fsSL https://get.docker.com -o get-docker.sh

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

$ sudo sh ./get-docker.sh

Ακολουθεί έλεγχος έκδοσης με:

$ sudo docker version

Μπορείτε επίσης να επαληθεύσετε ότι η υπηρεσία docker εκτελείται στο παρασκήνιο με:

$ sudo systemctl status docker

Θα πρέπει να υποδεικνύει «ενεργό (σε λειτουργία)» σε πράσινο κείμενο, όπως επισημαίνεται στο παρακάτω στιγμιότυπο οθόνης. Η έκδοση του κινητήρα Docker θα πρέπει επίσης να εκτυπωθεί χωρίς σφάλματα.

Εκτελώντας ένα απλό παράδειγμα

Τώρα που έχει εγκατασταθεί το Docker, μπορείτε να το χρησιμοποιήσετε για λήψη μιας εικόνας κοντέινερ. Οι εικόνες κοντέινερ μοιάζουν πολύ με ISO για εικονικές μηχανές, εκτός από το ότι είναι συνήθως μικρότερες και πιο εύκολο να κατασκευαστούν. Κατεβάστε μια απλή εικόνα κοντέινερ hello-world με την ακόλουθη εντολή:

$ sudo docker pull hello-world

Μόλις γίνει λήψη αυτής της εικόνας, μπορείτε να επαληθεύσετε παραθέτοντας τις εικόνες που έχετε λάβει στο σύστημά σας χρησιμοποιώντας τα ακόλουθα:

$ sudo docker images

Θα πρέπει τώρα να δείτε το hello-world κατεβασμένο. Σημειώστε το πολύ μικρό μέγεθος (13Kb στο μηχάνημα δοκιμής μας), καθώς και την ετικέτα του. Η ετικέτα μιας εικόνας είναι ουσιαστικά η εκδοχή της. Από προεπιλογή, το Docker θα κατεβάσει την πιο πρόσφατη έκδοση μιας εικόνας. Εκτελέστε ένα κοντέινερ με βάση αυτήν την εικόνα χρησιμοποιώντας:

$ sudo docker run hello-world: latest

Αυτό θα παράγει το hello-world spiel του Dockers, το οποίο εκτελείται από ένα πολύ μικρό πρόγραμμα C (το οποίο μπορείτε να δείτε στο GitHub).

Συγχαρητήρια; έχετε τρέξει το πρώτο σας κοντέινερ! Σε αυτήν την περίπτωση, το πρόγραμμα έχει εξάγει το αποτέλεσμά του και έχει ολοκληρώσει την εκτέλεσή του. Το δοχείο είναι πλέον νεκρό και δεν λειτουργεί πλέον.

Πώς να κρατήσετε ζωντανά τα δοχεία

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

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

$ sudo docker pull nginx

Προσθέσαμε το επισημάνετε εδώ για να διαμορφώσετε την προώθηση θύρας από το κοντέινερ στο λειτουργικό σύστημα κεντρικού υπολογιστή. Η θύρα 80 χρησιμοποιείται για μη κρυπτογραφημένη κίνηση HTTP (δηλαδή web). Αυτό θα σας επιτρέψει να έχετε πρόσβαση στο κοντέινερ από τον κεντρικό υπολογιστή σας:

$ sudo docker run -p 80:80 nginx

Αυτή η εντολή θα εκτελεστεί στο τερματικό σας σε συνημμένη λειτουργία, πράγμα που σημαίνει ότι το κοντέινερ είναι κυριολεκτικά συνδεδεμένο με το τερματικό σας, επομένως όλα τα αρχεία καταγραφής από το κοντέινερ θα εκτυπωθούν εκεί. Μόλις ξεκινήσει το δοχείο, ανοίξτε http://localhost στο πρόγραμμα περιήγησής σας. Θα δείτε μια οθόνη καλωσορίσματος Nginx παρόμοια με την παρακάτω:

Το κοντέινερ Nginx λειτουργεί τώρα μέσα στον κινητήρα του κοντέινερ σας. Ενώ το Nginx εκτελείται σε συνημμένη λειτουργία, θα συνεχίσει να λειτουργεί μόνο όσο είναι ανοιχτό. Μπορείτε να βγείτε από το κοντέινερ Nginx πατώντας Ctrl + C στο τερματικό σας.

Πώς να εκτελέσετε κοντέινερ στο παρασκήνιο

Για να εκτελέσετε το Nginx στο παρασκήνιο, θα προσθέσουμε μια άλλη σημαία, -ρε, για αποσπασμένη λειτουργία. Αυτό θα ξεκινήσει το κοντέινερ που αποσπάται από το τερματικό σας, που σημαίνει ότι βρίσκεται στο παρασκήνιο. Για παράδειγμα:

$ sudo docker run -d -p 80:80 nginx

Μπορείτε να απαριθμήσετε τα τρέχοντα κοντέινερ σε ένα σύστημα. Παρατηρήστε πώς το κοντέινερ Nginx τρέχει τώρα στο παρασκήνιο και του έχει εκχωρηθεί ένα αναγνωριστικό.

$ sudo docker ps

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

$ sudo docker kill 

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

Βουτιά βαθύτερα με δοχεία

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