Table of Contents
Γιατί η Αυτοματοποιημένη Εκκαθάριση Docker είναι απαραίτητη για τη Διαχείριση Διαστήματος Δίσκου
Docker δοχεία προσφέρουν ένα ελαφρύ, σταθερό περιβάλλον για την ανάπτυξη της εφαρμογής, δοκιμές, και την ανάπτυξη. Ωστόσο, η ευκολία της γρήγορης περιστροφής και σκίσιμο κάτω δοχεία έρχεται με κόστος: δισκόσκονη. Με το πέρασμα του χρόνου, κρέμονται εικόνες, σταματημένα δοχεία, αχρησιμοποίητο όγκο, και λανθάνουσα λανθάνουσα λανθάνουσα λανθάνουσα λανθάνουσα λανθάνουσα λανθάνουσα πολύτιμο χώρο του δίσκου. Αριστερά ανεξέλεγκτο, αυτή η ακαταστασία μπορεί να οδηγήσει σε υποβαθμισμένη απόδοση, αποτυχημένες εφαρμογές, και ακόμη και διακοπές του συστήματος. Αυτοματοποίηση καθαρισμού όχι μόνο επανακτά την αποθήκευση, αλλά και εξασφαλίζει ένα προβλέψιμο, διατηρητέο Docker host.
Ένας ενιαίος σταθμός εργασίας προγραμματιστών μπορεί να συγκεντρώσει gigabytes χωρίς χρήση Docker εικόνες[[LFT:1]] μέσα σε εβδομάδες. Σε περιβάλλοντα παραγωγής, όπου τα δοχεία συχνά ενημερώνονται ή αντικαθίστανται, η κλίμακα προβλήματος γρήγορα. Ο χειροκίνητος καθαρισμός είναι αποτέλεσμα σφάλματος και συχνά παραμελείται. Με την εφαρμογή μιας αυτοματοποιημένης, προγραμματισμένης στρατηγικής κλαδέματος, εξαλείφετε την εικασία και ελευθερώνετε πόρους για ό,τι έχει μεγαλύτερη σημασία: την εκτέλεση των εφαρμογών σας.
Κατανόηση των Βοηθειών Καθαρισμού του Ντόκερ
Το πιο ισχυρό είναι [[LFT:0]]], το οποίο μπορεί να στοχεύσει τα δοχεία, τις εικόνες, τους όγκους και τα δίκτυα. Ας αναλύσουμε τις βασικές επιλογές:
- ⁇ Απομακρύνει όλα τα σταματημένα δοχεία, όλες τις αιωρούμενες εικόνες και τα αχρησιμοποίητα δίκτυα.
- ] ⁇ Προσθέτει αφαίρεση όλων των αχρησιμοποίητων εικόνων (όχι μόνο των κρεμασμένων), συμπεριλαμβανομένων εικόνων που δεν αναφέρονται από κανένα δοχείο.
- ⁇ Επίσης δαμάσκηνα αχρησιμοποίητα όγκοι (από προεπιλογή δεν αφαιρούνται οι όγκοι).
- ⁇ Συνδυάζει όλες τις σημαίες: αφαίρεση δύναμης χωρίς επιβεβαίωση, όλες τις αχρησιμοποίητες εικόνες και τόμους. Αυτή είναι η πυρηνική επιλογή για καθαρισμό.
Για περισσότερο κοκκώδη έλεγχο, ο Ντόκερ προσφέρει ξεχωριστές εντολές: , , , και . Κάθε δέχεται φίλτρα (π.χ., ) για να περιορίσει τη διαγραφή σε πόρους παλαιότερους από ορισμένο χρόνο.
Βήμα-προς-Βήμα για Cron-βασισμένο Αυτοματισμού
Στα συστήματα Linux, το cron παραμένει το απλούστερο εργαλείο προγραμματισμού για επαναλαμβανόμενες εργασίες. Για να αυτοματοποιήσετε το Docker cleanup, χρειάζεστε μόνο μερικές γραμμές στην crontab σας.
1. Επαλήθευση διαδρομής εντολών Docker
Οι εργασίες Cron λειτουργούν με περιορισμένο περιβάλλον. Καθορίστε την πλήρη πορεία του με την εκτέλεση:
which docker
Τυπικά αυτό επιστρέφει . Χρησιμοποιήστε αυτή την διαδρομή στην εντολή cron.
2. Επεξεργασία Crontab σας
Εκτέλεση:
crontab -e
Αν αυτή είναι η πρώτη σας φορά, θα σας ζητηθεί να επιλέξετε έναν επεξεργαστή. Προσθέστε μια γραμμή όπως η ακόλουθη για να τρέξει καθημερινά στις 2:00 π.μ.:
0 2 * * * /usr/bin/docker system prune -af --volumes > /dev/null 2>&1
Το ανακατευθύνει το stdout και stderr σε null για να αποφευχθεί η συμπλήρωση του γραμματοκιβώτιου σας με έξοδο. Ρυθμίστε το πρόγραμμα όπως απαιτείται (π.χ., για εβδομαδιαία).
3. Δοκιμάστε την εργασία
Πριν βασιστείτε στην cron, εκτελέστε την εντολή χειροκίνητα για να βεβαιωθείτε ότι λειτουργεί όπως αναμενόταν:
sudo /usr/bin/docker system prune -af --volumes
Εάν χρησιμοποιείτε μια μη ριζική εγκατάσταση Docker, μπορεί να χρειαστεί να προσθέσετε ή να εκτελέσετε την εργασία cron ως ο χρήστης στην ομάδα.
Προηγμένη Αυτοματοποίηση με Συστημένους Χρονομέτρους
Ενώ η cron είναι επαρκής για πολλούς, οι ρυθμισμένοι χρονιστές προσφέρουν καλύτερη υλοτομία, διαχείριση εξάρτησης, και την ενσωμάτωση με το υπόλοιπο σύστημα init.
1. Δημιουργήστε μια μονάδα υπηρεσιών
Αποθήκευση των ακόλουθων ως :
[Unit]
Description=Docker system prune
Wants=docker.service
After=docker.service
[Service]
Type=oneshot
ExecStart=/usr/bin/docker system prune -af --volumes
User=root
StandardOutput=journal
2. Δημιουργία μιας μονάδας χρονομέτρων
Αποθήκευση ως :
[Unit]
Description=Run Docker cleanup daily
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
3. Ενεργοποίηση και έναρξη του χρονοδιακόπτη
sudo systemctl daemon-reload
sudo systemctl enable docker-cleanup.timer
sudo systemctl start docker-cleanup.timer
Επαλήθευση με [[LFT:25]]]. Αυτή η προσέγγιση καταγράφει την έξοδο στο περιοδικό που έχει δημιουργηθεί, καθιστώντας ευκολότερο τον έλεγχο των εργασιών καθαρισμού.
⁇ φίλτρων καθαρισμού για πολιτικές διατήρησης
Επιθετικά κλάδεμα είναι ασφαλές για τα περισσότερα περιβάλλοντα ανάπτυξης, αλλά τα συστήματα παραγωγής μπορεί να απαιτούν [[LFT:0]] πολιτικές διατήρησης[[[LFT:1]]]. Για παράδειγμα, μπορεί να θέλετε να κρατήσετε εικόνες με ετικέτα [[LFT:26]]] ή [[LFT:27]], ή να αφαιρέσετε μόνο πόρους που είναι μεγαλύτεροι από 48 ώρες.
Φίλτρο ανά ηλικία
Για να κλαδέψουν αχρησιμοποίητες εικόνες και δοχεία που είναι ηλικίας άνω των 24 ωρών:
docker system prune -af --filter "until=24h" --volumes
Το φίλτρο λειτουργεί τόσο για εικόνες όσο και για δοχεία. Συνδυάστε με πολλές φορές για πιο πολύπλοκους κανόνες.
Εξαίρεση ειδικών πόρων
Το Docker δεν έχει ενσωματωμένη λίστα αγνοήσεων, αλλά μπορείτε να χρησιμοποιήσετε ετικέτες για να αποτρέψετε την αφαίρεση. Η ετικέτα σημαντικών δοχείων ή εικόνων (π.χ., ), στη συνέχεια να χρησιμοποιήσετε ένα αρνητικό φίλτρο ετικέτας (δεν υποστηρίζεται ακόμα σε ). Μια αναζήτηση εργασίας είναι να συνδυάσετε [] με προσαρμοσμένα σενάρια που ελέγχουν ετικέτες πριν τη διαγραφή. Εναλλακτικά, χρησιμοποιήστε ένα εργαλείο όπως ] docker-gc]] ή ] docker-cleanup] για καθαρισμό ετικέτας.
Παρακολούθηση του χώρου και της αποτελεσματικότητας καθαρισμού δίσκων
Ο αυτοματισμός είναι μόνο τόσο καλός όσο η παρακολούθησή σας. ⁇ ειδοποιήσεων για την παρακολούθηση της χρήσης του δίσκου μετά από κάθε καθαρισμό. Απλές προσεγγίσεις περιλαμβάνουν:
- Τρέχοντας σε μια δουλειά cron και καταγράφοντας τα αποτελέσματα.
- Χρησιμοποιώντας ένα εργαλείο όπως docker-system-resource-influx για να στείλετε μετρήσεις στο InfluxDB ή στον Προμηθέα.
- Ενσωματώνοντας με Datadog] ή New Relic] για να απεικονίσει την αποθήκευση Docker με την πάροδο του χρόνου.
Αν ο καθαρισμός σας τρέχει αλλά η χρήση του δίσκου παραμένει υψηλή, ερευνήστε χρησιμοποιώντας [] για να δείτε πού καταναλώνεται ο χώρος.
Βέλτιστες Πρακτικές για Περιβάλλοντα Παραγωγής
1. Να χρησιμοποιείτε πάντα μια σταδιακή προσέγγιση
Έναρξη με εβδομαδιαία ξηρή ⁇ σε λειτουργία με χρήση [[LFT:36]] χωρίς [[LFT:37]]] σημαία (για να δείτε τι θα αφαιρεθεί). Επανεξέταση της εξόδου πριν ενεργοποιήσετε την αυτοματοποιημένη διαγραφή.
2. Συντονισμός με CI/CD αγωγούς
Αν το σύστημα κατασκευής σας δημιουργεί πολλές προσωρινές εικόνες, κλαδέματος πρόγραμμα μετά από κατασκευές ή κατά τη διάρκεια χαμηλής κυκλοφορίας παράθυρα. Αποφύγετε το κλάδεμα ενώ οι κατασκευές λειτουργούν για να αποτρέψετε την τυχαία αφαίρεση των ενδιάμεσων στρωμάτων που είναι ακόμα σε χρήση.
3. Δημιουργία αντιγράφων ασφαλείας κρίσιμα δεδομένα
Χρησιμοποιήστε εργαλεία διαχείρισης όγκου Docker όπως [[[LFT:38]]] με [[LFT:39]] για να δέσετε την εξωτερική αποθήκευση mount που δεν θα επηρεαστεί από δαμάσκηνο.
4. Εκτέλεση του κούρνιασμα ως μη ⁇ ⁇ ⁇ ⁇ χρήστη
Για ασφάλεια, αποφύγετε να τρέχετε τις εργασίες cron ως ρίζα εκτός αν είναι απαραίτητο. Προσθέστε το χρήστη σας στην [[LFT:40]] ομάδα και εκτελέστε τη δουλειά χωρίς [[LPT:41]]. Ωστόσο, σημειώστε ότι οποιοσδήποτε χρήστης στην [[LFT:42] ομάδα έχει αποτελεσματικά ριζική πρόσβαση στον υπολογιστή, αξιολογήστε τον κίνδυνο στο περιβάλλον σας.
5. Καθαρισμός καταγραφής δραστηριότητα
Επανακατεύθυνση εξόδου σε αρχείο καταγραφής αντί για [[LFT:43]] για τον έλεγχο:
0 2 * * * /usr/bin/docker system prune -af --volumes >> /var/log/docker-cleanup.log 2>&1
Τακτικά ελέγξτε το αρχείο καταγραφής για λάθη ή απροσδόκητες αφαιρέσεις.
Συχνές Παγίδες και Πώς να τις Αποφύγετε
- Χάνοντας τα τρέχοντα δεδομένα των δοχείων: Η σημαία αφαιρεί όλες τις αχρησιμοποίητες εικόνες, συμπεριλαμβανομένων των ενδιάμεσων στρωμάτων που μπορεί να χρειαστούν για μελλοντικές κατασκευές. Αν ξαναχτίσετε συχνά, σκεφτείτε να ρυθμίσετε ένα σύντομο [[LFT:46]] φίλτρο ή να εκτελέσετε χωρίς ].
- Τόμοι που περιέχουν σημαντική κατάσταση: Εξ ορισμού, δεν αφαιρεί όγκους εκτός εάν χρησιμοποιείται η σημαία . Προσθέτουμε μόνο τη σημαία αυτή εάν είστε σίγουροι ότι δεν υπάρχουν όγκοι που να κρατούν επίμονα δεδομένα.
- Δίκτυο που σπάει τη συνδεσιμότητα του δοχείου με δαμάσκηνα: [[LFT:51]] αφαιρεί τα αχρησιμοποίητα δίκτυα. Αν ένα προσαρμοσμένο δίκτυο δεν αναφέρεται πλέον από οποιοδήποτε δοχείο, θα αφαιρεθεί, ενδεχομένως σπάζοντας τη μελλοντική εκκίνηση του δοχείου. Να το έχετε υπόψη σας εάν χρησιμοποιείτε δίκτυα επικάλυψης στο Swarm.
- Cron θέματα περιβάλλοντος: Docker μπορεί να μην είναι στο PATH όταν τρέχει το cron. Πάντα να χρησιμοποιείτε την πλήρη διαδρομή προς το δυαδικό.
Εναλλακτικά εργαλεία και προσεγγίσεις
Ενώ οι ιθαγενείς εντολές Docker καλύπτουν τις περισσότερες ανάγκες, αρκετά εργαλεία τρίτων παρέχουν προηγμένα χαρακτηριστικά:
- Watchtower[[LFT:3]]] ⁇ Αυτόματες ενημερώσεις τρεχόντων δοχείων και μπορούν να καθαρίσουν παλιές εικόνες μετά από ενημερώσεις.
- Portainer ⁇ Ένα web UI για τη διαχείριση Docker που περιλαμβάνει ένα προγραμματισμένο χαρακτηριστικό καθαρισμού.
- οικοδόμος δαμάσκηνο ⁇ Συγκεκριμένα στόχοι κατασκευάζουν cache, η οποία μπορεί να είναι τεράστια σε αγωγούς CI/CD.
Για τα περιβάλλοντα Kubernetes, εξετάστε τη χρήση [[LFT:0]]kubelet συλλογής απορριμμάτων[[LFT:1]]] και εργαλείων όπως [[LFT:2]]Kured[[[LFT:3]]] ή [[LFT:4]]Desseduler[[[LFT:5]]]] για καθαρισμό σε επίπεδο κόμβου.
Συμπέρασμα
Αυτόματη εκκαθάριση δοχείο Docker είναι μια απλή αλλά κρίσιμη πρακτική για τη διατήρηση ενός υγιεινού, αποδοτικού ξενιστή Docker. Είτε επιλέξετε cron, συστηματοποιημένα χρονοδιακόπτες, ή ένα εργαλείο τρίτου μέρους, το κλειδί είναι να τρέξει το κλάδεμα τακτικά με μια πολιτική που ισορροπεί την εξοικονόμηση δίσκων έναντι του κινδύνου αφαίρεσης δεδομένων που χρειάζεστε. Ξεκινήστε συντηρητικά με φίλτρα και κορμούς, στη συνέχεια, σφίγγετε το πρόγραμμά σας καθώς αυξάνεται η εμπιστοσύνη σας. Με την ενσωμάτωση αυτοματοποιημένη εκκαθάριση στην επιχειρησιακή ρουτίνα σας, εξασφαλίζετε ότι ο χώρος του δίσκου δεν γίνεται ποτέ ένα στενάκι και τα δοχεία σας παραμένουν άπαχο, ασφαλές, και εκτελέσιμο.