Περισσότερα
Ποια είναι η διαφορά μεταξύ μιας εικόνας Docker και ενός εμπορευματοκιβωτίου;
Όταν χρησιμοποιούμε το Docker, ξεκινάμε με μια βασική εικόνα. Την εκκινούμε, δημιουργούμε αλλαγές και αυτές οι αλλαγές αποθηκεύονται σε στρώματα σχηματίζοντας μια άλλη εικόνα.
Έτσι, τελικά έχω ένα image για την παρουσία μου στην PostgreSQL και ένα image για την web εφαρμογή μου, οι αλλαγές στις οποίες συνεχίζουν να διατηρούνται.
Τι είναι ένα εμπορευματοκιβώτιο;
802
3
Μια περίπτωση μιας εικόνας ονομάζεται περιέκτης. Έχετε μια εικόνα, η οποία είναι ένα σύνολο επιπέδων, όπως περιγράφετε. Εάν εκκινήσετε αυτή την εικόνα, έχετε ένα τρέχον δοχείο αυτής της εικόνας. Μπορείτε να έχετε πολλά τρέχοντα κοντέινερ της ίδιας εικόνας.
Μπορείτε να δείτε όλες τις εικόνες σας με την εντολή
docker images
ενώ μπορείτε να δείτε τα τρέχοντα containers σας με την εντολήdocker ps
(και μπορείτε να δείτε όλα τα containers με την εντολήdocker ps -a
).Έτσι, μια εκτελούμενη παρουσία ενός image είναι ένα container.
Από το άρθρο μου Αυτοματοποίηση των αναπτύξεων Docker:
Docker Images vs. Containers
Στη χώρα του Docker, υπάρχουν τα images και τα containers. Τα δύο είναι στενά συνδεδεμένα, αλλά διακριτά. Για μένα, η κατανόηση αυτής της διχοτόμησης έχει αποσαφηνίσει το Docker σε μεγάλο βαθμό.
Τι είναι μια εικόνα;
Μια εικόνα είναι ένα αδρανές, αμετάβλητο αρχείο που αποτελεί ουσιαστικά ένα στιγμιότυπο ενός εμπορευματοκιβωτίου. Οι εικόνες δημιουργούνται με την εντολή build, και θα παράγουν ένα δοχείο όταν ξεκινούν με την εντολή run. Οι εικόνες αποθηκεύονται σε ένα μητρώο του Docker, όπως το registry.hub.docker.com. Επειδή μπορούν να γίνουν αρκετά μεγάλα, οι εικόνες έχουν σχεδιαστεί ώστε να αποτελούνται από στρώματα άλλων εικόνων, επιτρέποντας την αποστολή ελάχιστων δεδομένων κατά τη μεταφορά εικόνων μέσω δικτύου.
Οι τοπικές εικόνες μπορούν να καταχωρηθούν εκτελώντας την εντολή
docker images
:Κάποια πράγματα που πρέπει να σημειωθούν:
-t
της εντολήςdocker build
ή από την ετικέταdocker tag
-ing μιας υπάρχουσας εικόνας. Είστε ελεύθεροι να επισημάνετε εικόνες χρησιμοποιώντας μια ονοματολογία που έχει νόημα για εσάς, αλλά να ξέρετε ότι το docker θα χρησιμοποιήσει την ετικέτα ως θέση μητρώου σε έναdocker push
ήdocker pull
.[REGISTRYHOST/][USERNAME/]NAME[:TAG]
. Για τοubuntu
παραπάνω, το REGISTRYHOST συμπεραίνεται ότι είναι τοregistry.hub.docker.com
. Έτσι, αν σκοπεύετε να αποθηκεύσετε την εικόνα σας με το όνομαmy-application
σε ένα μητρώο στοdocker.example.com
, θα πρέπει να επισημάνετε την εικόνα αυτή με την ετικέταdocker.example.com/my-application
.latest
δεν είναι μαγική, είναι απλά η προεπιλεγμένη ετικέτα όταν δεν καθορίζετε ετικέτα.Περισσότερες πληροφορίες σχετικά με τις εικόνες είναι διαθέσιμες από την τεκμηρίωση του Docker και το γλωσσάριο.
Τι είναι ένα εμπορευματοκιβώτιο;
Για να χρησιμοποιήσουμε μια μεταφορά προγραμματισμού, αν μια εικόνα είναι μια κλάση, τότε ένα εμπορευματοκιβώτιο είναι μια περίπτωση μιας κλάσης - ένα αντικείμενο χρόνου εκτέλεσης. Τα εμπορευματοκιβώτια είναι ελπίζω ο λόγος για τον οποίο χρησιμοποιείτε το Docker- είναι ελαφρές και φορητές ενθυλακώσεις ενός περιβάλλοντος στο οποίο εκτελούνται εφαρμογές.
Δείτε τα τοπικά κοντέινερ που εκτελούνται με το
docker ps
:Εδώ τρέχω μια dockerized έκδοση του docker registry, έτσι ώστε να έχω ένα ιδιωτικό μέρος για να αποθηκεύω τις εικόνες μου. Και πάλι, μερικά πράγματα που πρέπει να σημειωθούν:
docker ps
εξάγει μόνο τα τρέχοντα εμπορευματοκιβώτια. Μπορείτε να δείτε όλα τα εμπορευματοκιβώτια (running ή stopped) με την εντολήdocker ps -a
.--name
.Πώς να αποφύγετε τη συσσώρευση εικόνων και εμπορευματοκιβωτίων
Μία από τις πρώτες απογοητεύσεις μου με το Docker ήταν η φαινομενικά συνεχής συσσώρευση εικόνων χωρίς ετικέτες και σταματημένων containers. Σε μια χούφτα περιπτώσεις αυτή η συσσώρευση είχε ως αποτέλεσμα να φτάσουν στο μέγιστο οι σκληροί δίσκοι και να επιβραδύνουν τον φορητό μου υπολογιστή ή να σταματήσει η αυτοματοποιημένη αγωγός κατασκευής μου. Μιλάμε για "κοντέινερ παντού"!
Μπορούμε να αφαιρέσουμε όλες τις εικόνες χωρίς ετικέτες συνδυάζοντας το
docker rmi
με το πρόσφατο ερώτημαdangling=true
:docker images -q --filter "dangling=true" | xargs docker rmi
Το Docker δεν θα μπορέσει να αφαιρέσει εικόνες που βρίσκονται πίσω από υπάρχοντα containers, οπότε ίσως χρειαστεί να αφαιρέσετε πρώτα τα σταματημένα containers με το
docker rm
:Αυτά είναι γνωστά σημεία πόνου με το Docker και μπορεί να αντιμετωπιστούν σε μελλοντικές εκδόσεις. Ωστόσο, με μια σαφή κατανόηση των εικόνων και των εμπορευματοκιβωτίων, αυτές οι καταστάσεις μπορούν να αποφευχθούν με μερικές πρακτικές:
docker rm [CONTAINER_ID]
.docker rmi [IMAGE_ID]
.Αν και είναι πιο απλό να σκεφτούμε ένα κοντέινερ ως μια εικόνα που τρέχει, αυτό δεν είναι ακριβές.
Ένα image είναι στην πραγματικότητα ένα πρότυπο που μπορεί να μετατραπεί σε container. Για να μετατραπεί ένα image σε container, η μηχανή Docker παίρνει το image, προσθέτει ένα σύστημα αρχείων ανάγνωσης-εγγραφής από πάνω και αρχικοποιεί διάφορες ρυθμίσεις, συμπεριλαμβανομένων των θυρών δικτύου, του ονόματος του container, του ID και των ορίων των πόρων. Ένα τρέχον εμπορευματοκιβώτιο έχει μια τρέχουσα διεργασία εκτέλεσης, αλλά ένα εμπορευματοκιβώτιο μπορεί επίσης να σταματήσει (ή να εξέλθει στην ορολογία του Docker). Ένα container που έχει τερματιστεί δεν είναι το ίδιο με ένα image, καθώς μπορεί να επανεκκινηθεί και θα διατηρήσει τις ρυθμίσεις του και τυχόν αλλαγές στο σύστημα αρχείων.