Τα κοντέινερ παρέχουν έναν ελαφρύ τρόπο μεταφοράς φορητών φορτίων εργασίας εφαρμογών, όπως μια εικονική μηχανή, αλλά χωρίς τα γενικά και τα χύδην χαρακτηριστικά που σχετίζονται με 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 στον διακομιστή σας. Μπορείτε να το δοκιμάσετε και να λάβετε βασικές πληροφορίες χρησιμοποιώντας το πληροφορίες λιμενεργάτη
εντολή:
Η έξοδος του Μια τελευταία αλλαγή που θα πρέπει να κάνετε εάν εκτελείτε το τείχος προστασίας UFW του Ubuntu είναι να επιτρέψετε την προώθηση πακέτων. Μπορείτε να ελέγξετε εάν το UFW εκτελείται εισάγοντας τα εξής: Εάν η εντολή επιστρέψει κατάσταση ανενεργής, μπορείτε να παραλείψετε αυτό το επόμενο βήμα. Διαφορετικά, θα πρέπει να επεξεργαστείτε το αρχείο διαμόρφωσης UFW / etc / default / ufw και να αλλάξετε την πολιτική για προώθηση από Και αλλάξτε αυτήν τη γραμμή: Σε αυτό: Αποθηκεύστε το αρχείο και, στη συνέχεια, εκτελέστε: Τα δοχεία Docker είναι πολύ πιο αποτελεσματικά από τα εικονικά μηχανήματα. Όταν ένα κοντέινερ δεν εκτελεί μια διαδικασία, είναι εντελώς αδρανές. Ίσως να θεωρήσετε τα κοντέινερ Docker ως αυτόνομες διαδικασίες — όταν δεν εκτελούνται ενεργά, δεν καταναλώνουν πόρους εκτός από τον αποθηκευτικό χώρο. Μπορείτε να δείτε ενεργά και ανενεργά κοντέινερ χρησιμοποιώντας το $ sudo docker ps Μπορείτε να δείτε όλες τις διαθέσιμες εντολές απλώς εισάγοντας Όταν έτρεξα Μια πλήρης λίστα εικόνων και αποθετηρίων με δυνατότητα αναζήτησης είναι διαθέσιμη στο Docker Hub. Κάτι που αξίζει να διευκρινιστεί σε αυτό το σημείο είναι πώς οι εικόνες, τα κοντέινερ και η διαδικασία έλξης / ώθησης συνεργάζονται όλα. Τα δοχεία Docker είναι κατασκευασμένα από εικόνες, τα οποία είναι ουσιαστικά κελύφη λειτουργικών συστημάτων που περιέχουν τα απαραίτητα δυαδικά αρχεία και βιβλιοθήκες για την εκτέλεση εφαρμογών σε ένα κοντέινερ. Οι εικόνες φέρουν ετικέτα μεετικέτες, ουσιαστικά μεταδεδομένα, που διευκολύνουν την αποθήκευση και τη λήψη διαφορετικών εκδόσεων μιας εικόνας. Φυσικά, μια μεμονωμένη εικόνα μπορεί να συσχετιστεί με πολλές ετικέτες: Όταν πληκτρολόγησα Σημειώστε ότι αν είχα πληκτρολογήσει: Θα ήθελα να το κάνω όλα εικόνες (το Η ίδια λογική πίσω από repos και tags ισχύει και για άλλους χειρισμούς εικόνων. Αν τραβήξατε Επιστροφή στην εργασία με εικόνες. Μόλις τραβήξετε μια εικόνα, όποια κι αν είναι, δημιουργείτε ένα ζωντανό κοντέινερ από αυτήν (όπως έχω δείξει) εκτελώντας το Είναι σημαντικό να σημειωθεί ότι το Docker αποθηκεύει μόνο τα δέλτα ή τις αλλαγές σε εικόνες που έχουν δημιουργηθεί από άλλες εικόνες. Καθώς δημιουργείτε τις δικές σας εικόνες, μόνο οι αλλαγές που κάνετε στη βασική εικόνα αποθηκεύονται στη νέα εικόνα, η οποία συνδέεται πίσω με τη βασική εικόνα για όλες τις εξαρτήσεις της. Έτσι μπορείτε να δημιουργήσετε εικόνες που έχουν εικονικό μέγεθος 266MB, αλλά καταλαμβάνουν μόνο μερικά megabyte στο δίσκο, λόγω αυτής της αποτελεσματικότητας. Τα πλήρως διαμορφωμένα κοντέινερ μπορούν στη συνέχεια να προωθηθούν σε ένα κεντρικό αποθετήριο για να χρησιμοποιηθούν αλλού στον οργανισμό ή ακόμη και να κοινοποιηθούν δημόσια. Με αυτόν τον τρόπο, ένας προγραμματιστής εφαρμογών μπορεί να δημοσιεύσει ένα δημόσιο κοντέινερ για μια εφαρμογή ή μπορείτε να δημιουργήσετε ιδιωτικά αποθετήρια για να αποθηκεύσετε όλα τα κοντέινερ που χρησιμοποιούνται εσωτερικά από τον οργανισμό σας. Τώρα που έχετε καλύτερη κατανόηση του τρόπου λειτουργίας των εικόνων και των κοντέινερ, ας δημιουργήσουμε ένα κοντέινερ διακομιστή ιστού Apache και να το κάνουμε μόνιμο. Πρώτον, πρέπει να δημιουργήσετε ένα νέο κοντέινερ. Υπάρχουν μερικοί τρόποι για να το κάνετε αυτό, αλλά επειδή έχετε μερικές εντολές για εκτέλεση, ξεκινήστε ένα ριζικό κέλυφος σε ένα νέο κοντέινερ: Αυτό δημιουργεί ένα νέο κοντέινερ με ένα μοναδικό αναγνωριστικό και το όνομα root @ d7c8f02c3c8c: / # apt-get εγκατάσταση apache2 Λάβετε υπόψη ότι δεν χρειάζεται να χρησιμοποιήσετε Το φυσιολογικό root @ d7c8f02c3c8c: / # apt-get μπούκλα εγκατάστασης root @ d7c8f02c3c8c: / # curl // localhost Μετά την τελευταία εντολή, θα πρέπει να δείτε το μη επεξεργασμένο HTML της προεπιλεγμένης σελίδας Apache που εμφανίζεται στην κονσόλα. Αυτό σημαίνει ότι ο διακομιστής Apache είναι εγκατεστημένος και εκτελείται στο κοντέινερ σας. Εάν το κάνατε σε ένα περιβάλλον παραγωγής, στη συνέχεια θα ρυθμίσετε το Apache σύμφωνα με τις απαιτήσεις σας και θα εγκαταστήσετε μια εφαρμογή για να την εξυπηρετήσει. Οι κατάλογοι Docker letd έξω από ένα κοντέινερ αντιστοιχίζονται σε διαδρομές μέσα σε αυτό, οπότε μια προσέγγιση είναι να αποθηκεύσετε την εφαρμογή ιστού σας σε έναν κατάλογο στον κεντρικό υπολογιστή και να την κάνετε ορατή στο κοντέινερ μέσω χαρτογράφησης. Θυμηθείτε ότι ένα κοντέινερ Docker εκτελείται μόνο εφόσον οι διεργασίες ή οι διαδικασίες του είναι ενεργές. Έτσι, εάν η διαδικασία που ξεκινάτε όταν εκτελείτε για πρώτη φορά ένα κοντέινερ μετακινείται στο παρασκήνιο, όπως ένας δαίμονας συστήματος, το Docker θα σταματήσει το κοντέινερ. Επομένως, πρέπει να εκτελέσετε το Apache στο προσκήνιο κατά την εκκίνηση του κοντέινερ, έτσι ώστε το κοντέινερ να μην βγεί μόλις ανοίξει. Δημιουργήστε ένα σενάριο, startapache.sh, στο / usr / local / sbin: root @ d7c8f02c3c8c: / # apt-get εγκατάσταση nano Στο αρχείο startapache.sh, προσθέστε αυτές τις γραμμές: . / etc / apache2 / envvars / usr / sbin / apache2 -D ΠΡΟΒΟΛΗ Γράψτε τις αλλαγές και αποθηκεύστε το αρχείο. Στη συνέχεια, κάντε το εκτελέσιμο: Το μόνο που κάνει αυτό το μικρό σενάριο είναι να φέρει τις κατάλληλες μεταβλητές περιβάλλοντος για το Apache και να ξεκινήσει τη διαδικασία Apache στο προσκήνιο. Έχετε ολοκληρώσει την τροποποίηση του περιεχομένου του κοντέινερ, ώστε να μπορείτε να αποχωρήσετε από το κοντέινερ πληκτρολογώντας Τώρα πρέπει να διαπράττω το κοντέινερ για να αποθηκεύσετε τις αλλαγές που κάνατε: Η δέσμευση θα σώσει το κοντέινερ σας ως νέα εικόνα και θα επιστρέψει ένα μοναδικό αναγνωριστικό. Το επιχείρημα Μπορείτε να το δείτε εκτελώντας την εντολή local apache_web d95238078ab0 πριν από 4 λεπτά 284.1 MB Σημειώστε ότι οι ακριβείς λεπτομέρειες της εικόνας σας - το αναγνωριστικό εικόνας, το μέγεθος του κοντέινερ - θα διαφέρουν από το παράδειγμά μου. Τα δοχεία Docker έχουν σχεδιαστεί για να είναιαμετάβλητος. Κάθε φορά που κάνετε αλλαγές σε ένα κοντέινερ, τα αποτελέσματα γράφονται σε ένα εντελώς νέο κοντέινερ, ποτέ στο αρχικό. Εάν θέλετε να ανταλλάξετε το Apache με, ας πούμε, Nginx, θα ξεκινήσετε με το πρωτότυπο Τώρα που έχετε την εικόνα μας, μπορείτε να ξεκινήσετε το κοντέινερ μας και να αρχίσετε να προβάλλετε σελίδες. Πριν το κάνετε όμως, ας αφιερώσω λίγο χρόνο για να εξηγήσω πώς χειρίζεται το Docker τη δικτύωση. Όταν εγκαθίσταται το Docker, δημιουργεί τρία εικονικά δίκτυα που μπορούν να χρησιμοποιηθούν από κοντέινερ Docker: Όταν θέλετε να ξεκινήσετε ένα κοντέινερ και να το επικοινωνήσετε με τα άλλα κοντέινερ και τον εξωτερικό κόσμο, πρέπει να αντιστοιχίσετε χειροκίνητα τις θύρες από αυτό το κοντέινερ στον κεντρικό υπολογιστή. Για χάρη του παραδείγματός μου, μπορείτε να το κάνετε αυτό στη γραμμή εντολών όταν ξεκινάτε το κοντέινερ που δημιουργήσατε πρόσφατα:$ sudo docker info
πληροφορίες λιμενεργάτη
Η εντολή δείχνει τον αριθμό των κοντέινερ και των εικόνων, μεταξύ άλλων σχετικών πληροφοριών. Σημειώστε ότι μπορεί να είναι αρκετά μακρά. Αυτό το παράδειγμα δείχνει μόνο την τελευταία από τις δύο σελίδες.
$ sudo ufw κατάσταση
ΠΤΩΣΗ
προς την ΑΠΟΔΕΧΟΜΑΙ
. Για να το κάνετε αυτό χρησιμοποιώντας το πρόγραμμα επεξεργασίας Nano, εισαγάγετε τα εξής:$ sudo nano / etc / default / ufw
DEFAULT_FORWARD_POLICY = "DROP"
DEFAULT_FORWARD_POLICY = "ΑΠΟΔΟΧΗ"
Επαναφόρτωση $ sudo ufw
Εργαστείτε με εικόνες Docker και κοντέινερ Docker
λιμενεργάτης ps
εντολή:# Αυτή η εντολή θα δείξει ΟΛΑ τα κοντέινερ στο σύστημα
$ sudo docker ps -a
# Αυτό θα εμφανίζει μόνο κοντέινερ RUNNING
λιμενεργάτης
. Για μια ενημερωμένη λίστα όλων των εντολών, των επιλογών τους και των πλήρων περιγραφών, συμβουλευτείτε την επίσημη τεκμηρίωση πελάτη γραμμής εντολών.τρέξιμο
νωρίτερα, αυτή η εντολή αυτόματα τράβηξε μια εικόνα κοντέινερ Ubuntu από την υπηρεσία μητρώου Docker Hub. Τις περισσότερες φορές, ωστόσο, θα θελήσετε να τραβήξετε τις εικόνες κοντέινερ στην τοπική κρυφή μνήμη εκ των προτέρων, αντί να τις κάνετε κατόπιν αιτήματος. Για να το κάνετε αυτό, χρησιμοποιήστε έλξη λιμενεργάτη
, σαν αυτό:$ sudo docker τραβήξτε το ubuntu
Εικόνες 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.αυθάδης
σύμφωνα με το παραπάνω παράδειγμα, θα το εκτελούσατε πληκτρολογώντας sudo docker run -i -t ubuntu: saucy / bin / bash
. Εάν πληκτρολογείτεsudo docker image rm ubuntu
, για να αφαιρέσετε το Ubuntu
εικόνα, θα αφαιρέσει μόνο την εικόνα με ετικέτα αργότερο
. Για να αφαιρέσετε εικόνες εκτός από την προεπιλογή, όπως το Ubuntu Saucy, πρέπει να συμπεριλάβετε την κατάλληλη ετικέτα:sudo docker image rm ubuntu: saucy
Ροή εργασιών εικόνας και κοντέινερ
τρέξιμο
εντολή. Αφού προσθέσετε λογισμικό και αλλάξετε τυχόν ρυθμίσεις μέσα στο κοντέινερ, μπορείτε να δημιουργήσετε μια νέα εικόνα από αυτές τις αλλαγές χρησιμοποιώντας το δέσμευση λιμενεργάτη
εντολή.Δημιουργήστε μια νέα εικόνα Docker από ένα κοντέινερ
Ξεκινήστε με ένα νέο κοντέινερ Docker
$ sudo docker run -i -t --name apache_web ubuntu / bin / bash
apache_web
. Σας δίνει επίσης ένα κέλυφος ρίζας επειδή ορίσατε / bin / bash
ως εντολή για εκτέλεση. Τώρα εγκαταστήστε τον διακομιστή ιστού Apache χρησιμοποιώντας καταλαβαίνω
:root @ d7c8f02c3c8c: / # apt-get ενημέρωση
sudo
, επειδή τρέχετε ως root μέσα στο δοχείο. Σημειώστε ότι εσείς κάνω πρέπει να τρέξετε apt-get ενημέρωση
, επειδή, πάλι, η λίστα πακέτων μέσα στο δοχείο δεν είναι το ίδιο με αυτό έξω από αυτό.καταλαβαίνω
εμφανίζεται η έξοδος και το πακέτο Apache2 είναι εγκατεστημένο στο νέο σας κοντέινερ. Μόλις ολοκληρωθεί η εγκατάσταση, ξεκινήστε το Apache, εγκαταστήστε το μπούκλα και δοκιμάστε την εγκατάσταση, όλα μέσα από το κοντέινερ σας:root @ d7c8f02c3c8c: / # υπηρεσία apache2 έναρξη
Δημιουργήστε ένα σενάριο εκκίνησης για ένα κοντέινερ Docker
# Ίσως χρειαστεί να εγκαταστήσετε πρώτα το Nano μέσα στο δοχείο
root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh
#! / bin / bash
root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh
έξοδος
. Όταν βγείτε από το κοντέινερ, το κοντέινερ θα σταματήσει.Δεσμεύστε το κοντέινερ για να δημιουργήσετε μια νέα εικόνα Docker
$ sudo docker commache apache_web local: apache_web
τοπικό: apache_web
θα προκαλέσει την τοποθέτηση της δέσμευσης σε ένα τοπικό αποθετήριο που ονομάζεται τοπικός
με μια ετικέτα του apache_web
.sudo docker εικόνες
:ΕΓΓΡΑΦΟ ΕΙΚΟΝΑ ΕΙΚΟΝΑ ΕΙΚΟΝΑ ΔΗΜΙΟΥΡΓΗΜΕΝΟ ΜΕΓΕΘΟΣ
ubuntu: τελευταία
container, προσθέστε το Nginx σε αυτό και αποθηκεύστε τα αποτελέσματα ως ένα ολοκαίνουργιο κοντέινερ που ονομάζεται κάτι σαν τοπικό: nginx
.Κατανοήστε τα βασικά στοιχεία του Docker
$ sudo docker run -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh