Προγραμματισμός

Εκπαιδευτικό Docker: Ξεκινήστε με το Docker

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

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

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

Έτσι, σε αυτόν τον οδηγό, εγκαθιστώ τον διακομιστή web Apache σε ένα κοντέινερ Docker και διερευνούμαι πώς λειτουργεί το Docker.

Εγκαταστήστε το Docker

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

Προετοιμάστε το Ubuntu Linux για Docker

Το πρώτο πράγμα που πρέπει να κάνετε είναι να αποκτήσετε τη σωστή έκδοση του πυρήνα και των κεφαλίδων του:

$ sudo apt-get install --install-συνιστά linux-generic-hwe-16.04

Αυτή η διαδικασία μπορεί να διαρκέσει λίγο και θα χρειαστεί επανεκκίνηση όταν τελειώσετε:

Επανεκκίνηση $ sudo

Ίσως χρειαστεί επίσης να αναβαθμίσετε και άλλα πακέτα στο σύστημα:

$ sudo apt-get ενημέρωση

$ sudo apt-get αναβάθμιση

Εγκαταστήστε το Docker στο Ubuntu

Η εγκατάσταση του Docker σε διανομές CentOS, Fedora, Debian, Ubuntu και Raspbian Linux διευκολύνεται μέσω ενός σεναρίου κελύφους που μπορείτε να κατεβάσετε από το //get.docker.com/. Για αυτό θα χρειαστείτε το μπούκλα εντολή. Για να λάβετε τη νεότερη έκδοση του μπούκλα:

sudo apt-get εγκατάσταση μπούκλα

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

curl -s //get.docker.com | sudo sh

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

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

Τώρα μπορείτε να δοκιμάσετε ένα βασικό κοντέινερ Docker:

$ sudo docker run -i -t ubuntu / bin / bash

Αυτή η εντολή κατεβάζει τη γενική εικόνα Docker Ubuntu (σύμφωνα με το Ubuntu παράμετρος) και εκτελέστε το / bin / bash εντολή σε αυτό το κοντέινερ. ο -Εγώ και - τ Οι επιλογές ανοίγουν την τυπική είσοδο και ένα ψευδο TTY αντίστοιχα.

Εάν είναι επιτυχής, θα πρέπει να δείτε το όνομα κεντρικού υπολογιστή στη γραμμή εντολών να αλλάζει σε κάτι σαν root @ 216b04387924: / #, που δηλώνει τον αριθμό ταυτότητας (και το όνομα κεντρικού υπολογιστή) του νέου σας κοντέινερ που εκτελείται. Για αποχώρηση, πληκτρολογήστε έξοδος, όπως θα θέλατε να αποχωρήσετε από οποιαδήποτε συνεδρία.

Θα πρέπει τώρα να έχετε μια λειτουργική εγκατάσταση Docker στον διακομιστή σας. Μπορείτε να το δοκιμάσετε και να λάβετε βασικές πληροφορίες χρησιμοποιώντας το πληροφορίες λιμενεργάτη εντολή:

$ sudo docker info

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

Μια τελευταία αλλαγή που θα πρέπει να κάνετε εάν εκτελείτε το τείχος προστασίας UFW του Ubuntu είναι να επιτρέψετε την προώθηση πακέτων. Μπορείτε να ελέγξετε εάν το UFW εκτελείται εισάγοντας τα εξής:

$ sudo ufw κατάσταση

Εάν η εντολή επιστρέψει κατάσταση ανενεργής, μπορείτε να παραλείψετε αυτό το επόμενο βήμα. Διαφορετικά, θα πρέπει να επεξεργαστείτε το αρχείο διαμόρφωσης UFW / etc / default / ufw και να αλλάξετε την πολιτική για προώθηση από ΠΤΩΣΗ προς την ΑΠΟΔΕΧΟΜΑΙ. Για να το κάνετε αυτό χρησιμοποιώντας το πρόγραμμα επεξεργασίας Nano, εισαγάγετε τα εξής:

$ sudo nano / etc / default / ufw

Και αλλάξτε αυτήν τη γραμμή:

DEFAULT_FORWARD_POLICY = "DROP"

Σε αυτό:

DEFAULT_FORWARD_POLICY = "ΑΠΟΔΟΧΗ"

Αποθηκεύστε το αρχείο και, στη συνέχεια, εκτελέστε:

Επαναφόρτωση $ sudo ufw

Εργαστείτε με εικόνες Docker και κοντέινερ Docker

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

Μπορείτε να δείτε ενεργά και ανενεργά κοντέινερ χρησιμοποιώντας το λιμενεργάτης ps εντολή:

# Αυτή η εντολή θα δείξει ΟΛΑ τα κοντέινερ στο σύστημα

$ sudo docker ps -a

# Αυτό θα εμφανίζει μόνο κοντέινερ RUNNING

$ sudo docker ps

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

Όταν έτρεξα τρέξιμο νωρίτερα, αυτή η εντολή αυτόματα τράβηξε μια εικόνα κοντέινερ Ubuntu από την υπηρεσία μητρώου Docker Hub. Τις περισσότερες φορές, ωστόσο, θα θελήσετε να τραβήξετε τις εικόνες κοντέινερ στην τοπική κρυφή μνήμη εκ των προτέρων, αντί να τις κάνετε κατόπιν αιτήματος. Για να το κάνετε αυτό, χρησιμοποιήστε έλξη λιμενεργάτη, σαν αυτό:

$ sudo docker τραβήξτε το ubuntu

Μια πλήρης λίστα εικόνων και αποθετηρίων με δυνατότητα αναζήτησης είναι διαθέσιμη στο Docker Hub.

Εικόνες Docker έναντι κοντέινερ

Κάτι που αξίζει να διευκρινιστεί σε αυτό το σημείο είναι πώς οι εικόνες, τα κοντέινερ και η διαδικασία έλξης / ώθησης συνεργάζονται όλα.

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

Οι εικόνες φέρουν ετικέτα μεετικέτες, ουσιαστικά μεταδεδομένα, που διευκολύνουν την αποθήκευση και τη λήψη διαφορετικών εκδόσεων μιας εικόνας. Φυσικά, μια μεμονωμένη εικόνα μπορεί να συσχετιστεί με πολλές ετικέτες: ubuntu: 16.04, ubuntu: xenial-20171201, ubuntu: xenial, ubuntu: τελευταία.

Όταν πληκτρολόγησα docker τραβήξτε το ubuntu νωρίτερα, τράβηξα την προεπιλεγμένη εικόνα του Ubuntu από το αποθετήριο του Ubuntu, το οποίο είναι η εικόνα με ετικέτα αργότερο. Με άλλα λόγια, η εντολή docker τραβήξτε το ubuntu είναι ισοδύναμο με docker pull ubuntu: τελευταία και (τη στιγμή αυτής της γραφής) docker pull ubuntu: xenial

Σημειώστε ότι αν είχα πληκτρολογήσει:

$ sudo docker pull - ένα ubuntu

Θα ήθελα να το κάνω όλα εικόνες (το -ένα flag) στο αποθετήριο του Ubuntu στο τοπικό μου σύστημα. Τις περισσότερες φορές, ωστόσο, θα θέλετε είτε την προεπιλεγμένη εικόνα είτε μια συγκεκριμένη έκδοση. Για παράδειγμα, εάν θέλετε την εικόνα για το Ubuntu Saucy Salamander, θα το χρησιμοποιούσατε docker pull - ένα ubuntu: saucy για τη λήψη της εικόνας με τη συγκεκριμένη ετικέτα από αυτό το repo.

Η ίδια λογική πίσω από repos και tags ισχύει και για άλλους χειρισμούς εικόνων. Αν τραβήξατε αυθάδης σύμφωνα με το παραπάνω παράδειγμα, θα το εκτελούσατε πληκτρολογώντας sudo docker run -i -t ubuntu: saucy / bin / bash. Εάν πληκτρολογείτεsudo docker image rm ubuntu, για να αφαιρέσετε το Ubuntu εικόνα, θα αφαιρέσει μόνο την εικόνα με ετικέτα αργότερο . Για να αφαιρέσετε εικόνες εκτός από την προεπιλογή, όπως το Ubuntu Saucy, πρέπει να συμπεριλάβετε την κατάλληλη ετικέτα:

sudo docker image rm ubuntu: saucy

Ροή εργασιών εικόνας και κοντέινερ

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

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

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

Δημιουργήστε μια νέα εικόνα Docker από ένα κοντέινερ

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

Ξεκινήστε με ένα νέο κοντέινερ Docker

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

$ sudo docker run -i -t --name apache_web ubuntu / bin / bash

Αυτό δημιουργεί ένα νέο κοντέινερ με ένα μοναδικό αναγνωριστικό και το όνομα apache_web. Σας δίνει επίσης ένα κέλυφος ρίζας επειδή ορίσατε / bin / bash ως εντολή για εκτέλεση. Τώρα εγκαταστήστε τον διακομιστή ιστού Apache χρησιμοποιώντας καταλαβαίνω:

root @ d7c8f02c3c8c: / # apt-get ενημέρωση

root @ d7c8f02c3c8c: / # apt-get εγκατάσταση apache2

Λάβετε υπόψη ότι δεν χρειάζεται να χρησιμοποιήσετε sudo, επειδή τρέχετε ως root μέσα στο δοχείο. Σημειώστε ότι εσείς κάνω πρέπει να τρέξετε apt-get ενημέρωση, επειδή, πάλι, η λίστα πακέτων μέσα στο δοχείο δεν είναι το ίδιο με αυτό έξω από αυτό.

Το φυσιολογικό καταλαβαίνω εμφανίζεται η έξοδος και το πακέτο Apache2 είναι εγκατεστημένο στο νέο σας κοντέινερ. Μόλις ολοκληρωθεί η εγκατάσταση, ξεκινήστε το Apache, εγκαταστήστε το μπούκλα και δοκιμάστε την εγκατάσταση, όλα μέσα από το κοντέινερ σας:

root @ d7c8f02c3c8c: / # υπηρεσία apache2 έναρξη

root @ d7c8f02c3c8c: / # apt-get μπούκλα εγκατάστασης

root @ d7c8f02c3c8c: / # curl // localhost

Μετά την τελευταία εντολή, θα πρέπει να δείτε το μη επεξεργασμένο HTML της προεπιλεγμένης σελίδας Apache που εμφανίζεται στην κονσόλα. Αυτό σημαίνει ότι ο διακομιστής Apache είναι εγκατεστημένος και εκτελείται στο κοντέινερ σας.

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

Δημιουργήστε ένα σενάριο εκκίνησης για ένα κοντέινερ Docker

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

Δημιουργήστε ένα σενάριο, startapache.sh, στο / usr / local / sbin:

# Ίσως χρειαστεί να εγκαταστήσετε πρώτα το Nano μέσα στο δοχείο

root @ d7c8f02c3c8c: / # apt-get εγκατάσταση nano

root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh

Στο αρχείο startapache.sh, προσθέστε αυτές τις γραμμές:

#! / bin / bash

. / etc / apache2 / envvars

/ usr / sbin / apache2 -D ΠΡΟΒΟΛΗ

Γράψτε τις αλλαγές και αποθηκεύστε το αρχείο. Στη συνέχεια, κάντε το εκτελέσιμο:

root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh

Το μόνο που κάνει αυτό το μικρό σενάριο είναι να φέρει τις κατάλληλες μεταβλητές περιβάλλοντος για το Apache και να ξεκινήσει τη διαδικασία Apache στο προσκήνιο.

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

Δεσμεύστε το κοντέινερ για να δημιουργήσετε μια νέα εικόνα Docker

Τώρα πρέπει να διαπράττω το κοντέινερ για να αποθηκεύσετε τις αλλαγές που κάνατε:

$ sudo docker commache apache_web local: apache_web

Η δέσμευση θα σώσει το κοντέινερ σας ως νέα εικόνα και θα επιστρέψει ένα μοναδικό αναγνωριστικό. Το επιχείρημα τοπικό: apache_web θα προκαλέσει την τοποθέτηση της δέσμευσης σε ένα τοπικό αποθετήριο που ονομάζεται τοπικός με μια ετικέτα του apache_web.

Μπορείτε να το δείτε εκτελώντας την εντολή sudo docker εικόνες:

ΕΓΓΡΑΦΟ ΕΙΚΟΝΑ ΕΙΚΟΝΑ ΕΙΚΟΝΑ ΔΗΜΙΟΥΡΓΗΜΕΝΟ ΜΕΓΕΘΟΣ

local apache_web d95238078ab0 πριν από 4 λεπτά 284.1 MB

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

Τα δοχεία Docker έχουν σχεδιαστεί για να είναιαμετάβλητος. Κάθε φορά που κάνετε αλλαγές σε ένα κοντέινερ, τα αποτελέσματα γράφονται σε ένα εντελώς νέο κοντέινερ, ποτέ στο αρχικό. Εάν θέλετε να ανταλλάξετε το Apache με, ας πούμε, Nginx, θα ξεκινήσετε με το πρωτότυπο ubuntu: τελευταία container, προσθέστε το Nginx σε αυτό και αποθηκεύστε τα αποτελέσματα ως ένα ολοκαίνουργιο κοντέινερ που ονομάζεται κάτι σαν τοπικό: nginx.

Κατανοήστε τα βασικά στοιχεία του Docker

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

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

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

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

$ sudo docker run -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh

Copyright el.verticalshadows.com 2022