Πού αποθηκεύονται οι εικόνες Docker; Επεξήγηση διαδρομών κοντέινερ Docker

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

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

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

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

Η έξοδος περιέχει πληροφορίες σχετικά με το πρόγραμμα οδήγησης αποθήκευσης και τον ριζικό κατάλογο του docker.

Η θέση αποθήκευσης των εικόνων και των κοντέινερ του Docker

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

  • Ubuntu: /var/lib/docker/
  • Μαλακό καπέλλο: /var/lib/docker/
  • Debian: /var/lib/docker/
  • Παράθυρα: C:\ProgramData\DockerDesktop
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

Σε macOS και Windows, το Docker εκτελεί κοντέινερ Linux σε εικονικό περιβάλλον. Επομένως, υπάρχουν μερικά επιπλέον πράγματα που πρέπει να γνωρίζετε.

Docker για Mac

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

~/Library/Containers/com.docker.docker/Data/vms/0

Μέσα στην εικονική εικόνα, η διαδρομή είναι η προεπιλεγμένη διαδρομή Docker /var/lib/docker.

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

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

Μπορείτε να σκοτώσετε αυτήν την περίοδο λειτουργίας πατώντας Ctrl + a και , στη συνέχεια, πατώντας k και y .

Docker για Windows

Στα Windows, το Docker είναι λίγο κλασματικό. Υπάρχουν εγγενή κοντέινερ Windows που λειτουργούν παρόμοια με τα κοντέινερ Linux. Τα κοντέινερ Linux εκτελούνται σε ένα ελάχιστο εικονικό περιβάλλον Hyper-V.

Η διαμόρφωση και η εικονική εικόνα για την εκτέλεση εικόνων linux αποθηκεύονται στον προεπιλεγμένο ριζικό φάκελο Docker.

C:\ProgramData\DockerDesktop

Εάν επιθεωρήσετε κανονικές εικόνες, θα λάβετε διαδρομές linux όπως:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

Μπορείτε να συνδεθείτε στην εικονική εικόνα μέσω:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

Εκεί, μπορείτε να μεταβείτε στην τοποθεσία αναφοράς:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

Η εσωτερική δομή του ριζικού φακέλου Docker

Στο εσωτερικό /var/lib/docker, αποθηκεύονται διαφορετικές πληροφορίες. Για παράδειγμα, δεδομένα για κοντέινερ, τόμους, κατασκευές, δίκτυα και συμπλέγματα.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

Εικόνες Docker

Το βαρύτερο περιεχόμενο είναι συνήθως εικόνες. Εάν χρησιμοποιείτε την προεπιλεγμένη επικάλυψη προγράμματος οδήγησης αποθήκευσης2, τότε αποθηκεύονται οι εικόνες του Docker /var/lib/docker/overlay2. Εκεί, μπορείτε να βρείτε διαφορετικά αρχεία που αντιπροσωπεύουν επίπεδα μόνο για ανάγνωση μιας εικόνας Docker και ένα επίπεδο πάνω του που περιέχει τις αλλαγές σας.

Ας εξερευνήσουμε το περιεχόμενο χρησιμοποιώντας ένα παράδειγμα:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

Το LowerDir περιέχει τα επίπεδα μόνο για ανάγνωση μιας εικόνας. Το επίπεδο ανάγνωσης-εγγραφής που αντιπροσωπεύει αλλαγές αποτελούν μέρος του UpperDir . Στην περίπτωσή μου, ο φάκελος NGINX UpperDir περιέχει τα αρχεία καταγραφής:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

Το MergedDir αντιπροσωπεύει το αποτέλεσμα των UpperDir και LowerDir που χρησιμοποιούνται από το Docker για την εκτέλεση του κοντέινερ. Το WorkDir είναι ένας εσωτερικός κατάλογος για επικάλυψη2 και πρέπει να είναι κενός.

Όγκοι Docker

Είναι δυνατή η προσθήκη μόνιμου χώρου αποθήκευσης σε κοντέινερ για τη διατήρηση δεδομένων περισσότερο από το υπάρχον κοντέινερ ή για κοινή χρήση του τόμου με τον κεντρικό υπολογιστή ή με άλλα κοντέινερ. Ένα κοντέινερ μπορεί να ξεκινήσει με έναν τόμο χρησιμοποιώντας την επιλογή -v :

$ docker run --name nginx_container -v /var/log nginx

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

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

Ο αναφερόμενος κατάλογος περιέχει αρχεία από τη θέση /var/logτου κοντέινερ NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

Καθαρίστε χώρο που χρησιμοποιείται από το Docker

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

$ docker system prune -a

Επιπλέον, μπορείτε επίσης να αφαιρέσετε τόμους που δεν χρησιμοποιούνται εκτελώντας:

$ docker volumes prune

Περίληψη

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

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

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

Είμαι συνιδρυτής της επαναστατικής πλατφόρμας ταξιδιού μας που ονομάζεται Explore The World. Είμαστε μια νέα εταιρεία που βρίσκεται στη Δρέσδη της Γερμανίας και θα στοχεύσουμε πρώτα στη γερμανική αγορά. Επικοινωνήστε μαζί μου αν έχετε σχόλια και ερωτήσεις σχετικά με οποιοδήποτε θέμα.

Καλή εξερεύνηση του Docker :)

βιβλιογραφικές αναφορές

  • Τεκμηρίωση αποθήκευσης Docker

    //docs.docker.com/storage/storagedriver/

  • Σύστημα αρχείων επικάλυψης τεκμηρίωσης

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt