איך להסיר תמונות, תקיות ונפחים של Docker

הקדמה

Docker עושה את הדבר הרבה יותר קל עבורך לארוז את היישומים והשירותים שלך בתוך קונטיינרים כך שתוכל להפעיל אותם בכל מקום. אולם, בעוד שאתה עובד עם Docker, זה גם קל לצבור מספר רב מידי של תמונות, קונטיינרים ונפחי נתונים בלתי משמשים שמבלבלים את הפלט ומצרפים מקום בדיסק.

Docker נותן לך את כל הכלים שאתה צריך כדי לנקות את המערכת שלך מהשורת פקודה. מדריך זה בסגנון גיליון המרמור מספק הפניה מהירה לפקודות שימושיות לשחרור שטח דיסק ולשמירה על המערכת שלך מאורגנת על ידי הסרת תמונות, קונטיינרים ונפחי נתונים בלתי משמשים.

איך להשתמש במדריך זה:

  • מדריך זה בפורמט של גיליון המרמור עם קטעי קוד של שורת פקודה עצמאיים.
  • קפוץ לאיזו מקטע שנראה לך רלוונטי למשימה שאתה מנסה להשלים.

הערה: תחבורת התחלואה של פקודה, פקודה $(פקודה), השמושה בפקודות זמינה ברוב הקליפים הפופולריים, כמו bash, zsh, ו־Windows Powershell. אם ברצונך בדרך לחציה להטמיע אפליקציית Docker בשרת חי, תסתכל על פלטפורמת האפליקציות של DigitalOcean.

אם אתה רוצה דרך קליק אחד לפרוס אפליקציה דוקר על שרת חי, תסתכל על פלטפורמת משרד התקשורת הדיגיטלית.

ניקוי כל התמונות הלא משמשות או המקושרות, המכורים, הנפחים והרשתות

דוקר מספק פקודה אחת שתן קרא לניקוי כל המשאבים – תמונות, מכונות, נפחים ורשתות – שהם מקושרים (לא מסומנים או קשורים למכונה):

docker system prune

כדי גם להסיר כל מכונות עצמו וכל התמונות לא משמשות (לא רק תמונות מקושרות), הוסף את ה-a הדגל לפקודה:

docker system prune -a

הסרת תמונות Docker

הסרת תמונות ספציפיות אחת או יותר

לשלב את הפקודה docker images עם הדגל -a כדי לאתר את מזהה התמונות שברצונך להסיר. זה יראה לך כל תמונה, כולל שכבות תמונה ביניים. כשאתה מצאת את התמונות שאתה רוצה למחוק, אתה יכול להעביר את מזההם או תגם לdocker rmi:

רשימה:

docker images -a

הסר:

docker rmi Image Image

הערה: הדגל -a או --all בפקודת docker images מציג כל תמונות הדוקר, כולל שכבות ביניים שאינן מקושרות לתגים כלשהם. כברירת מחדל, docker images מראה רק את התמונות עם לפחות תג אחד.עם זאת, ייתכן שיש כמה תמונות ללא תגים שעדיין גורמות לשימוש בחירום במקום במערכת. הדגל -a יכול לעזור בזיהוי תמונות שניתן לטוס כדי לחסוך במקום על המדחס. כשמשתמשים עם הפקודה docker rmi, הדגל -f או --force יכול גם לשמש כדי להסיר תמונות בלי תגים.

הסרת תמונות דוקר מקופלות

תמונות דוקר מורכבות ממספר שכבות. תמונות מקופלות הן שכבות שאין להן קשר לתמונות מתועדות כלשהן.הם כבר אינם משרתים מטרה ומשתמשים במקום על מדחס. ניתן לאתר אותם על ידי הוספת הדגל -f עם ערך של dangling=true לפקודת docker images. כשאתה בטוח שאתה רוצה למחוק אותם, אתה יכול להשתמש בפקודת docker image prune:

הערה: אם תבנה תמונה בלי לתייג אותה, התמונה תופיע ברשימת התמונות התלויות משום שאין להם קשר לתמונה מתוגה. אפשר למנוע את המצב הזה על ידי סימון בתג בעת הבנייה, וניתן גם להוסיף תג לתמונה אחרי הפקתה באמצעות הפקודה docker tag.

רשימה:

docker images -f dangling=true

הסרה:

docker image prune

מחיקת תמונות על פי תבנית

ניתן למצוא את כל התמונות שתואמות לתבנית באמצעות שילוב של docker images ו־grep. כאשר אתה מרוצה, ניתן למחוק אותן באמצעות awk להעברת המזהים ל־docker rmi. שים לב שכלי אלה לא מסופקים על ידי Docker ואינם זמינים בהכרח בכל המערכות:

רשימה:

docker images -a |  grep "pattern"

הסרה:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

הסר את כל התמונות

כל התמונות של Docker במערכת ניתן לרשום על ידי הוספת -a לפקודת docker images. לאחר שאתה בטוח שברצונך למחוק אותן כולן, תוכל להוסיף את הדגל -q כדי להעביר את מזהה התמונה ל־docker rmi:

רשימה:

docker images -a

הסר:

docker rmi $(docker images -a -q)

מסירת קונטיינרים

הסר קונטיינר אחד או יותר

השתמש בפקודת docker ps עם הדגל -a כדי לאתר את שם או מזהה הקונטיינרים שברצונך להסיר:

רשימה:

docker ps -a

הסר:

docker rm ID_or_Name ID_or_Name

הסר קונטיינר בעת היציאה ממנו

אם אתה יודע כשאתה יוצר תוכן שלא תרצה לשמור אותו כאשר אתה סיים, תוכל להריץ docker run --rm כדי למחוק אותו אוטומטית כאשר הוא ייצא:

הרץ ומחק:

docker run --rm image_name

מחק את כל המיכלים שיצאו

ניתן לאתר מיכלים באמצעות docker ps -a ולסנן אותם לפי מצבם: created, restarting, running, paused, או exited. כדי לבדוק את רשימת המיכלים exited, השתמש בדגל -f כדי לסנן לפי מצב. כשאתה מאשר שאתה רוצה להסיר את המיכלים האלו, השתמש ב־-q כדי להעביר את המזהים לפקודת docker rm:

רשימה:

docker ps -a -f status=exited

הסר:

docker rm $(docker ps -a -f status=exited -q)

הסר מיכלים באמצעות יותר מסנן אחד

מסנני Docker ניתן לשלב על ידי חזרה על דגל הסינון עם ערך נוסף. תוצאת זהו רשימת תופסים שעומדים באחד מהתנאים. לדוגמה, אם ברצונך למחוק את כל התופסים שמסומנים כ-נוצר (מצב שעשוי להתרחש כאשר אתה מפעיל תופס עם פקודה שאינה תקפה) או יצא, תוכל להשתמש בשני מסננים:

docker ps -a -f status=exited -f status=created

רשימה:

docker rm $(docker ps -a -f status=exited -f status=created -q)

הסרה:

ניתן למצוא את כל התופסים שתואמים תבנית בשילוב של docker ps ו-grep. כאשר אתה מרוצה שיש לך את הרשימה שברצונך למחוק, תוכל להשתמש ב-awk וב-xargs כדי לספק את המזהה ל-docker rm. שים לב שכלי אלה אינם מסופקים על ידי Docker ואינם זמינים בהכרח בכל המערכות:

רשימה:

docker ps -a |  grep "pattern

הסרה:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

עצור והסר את כל המיכלים

ניתן לבדוק את המיכלים במערכת שלך עם docker ps. הוספת הדגל -a תציג את כל המיכלים. כאשר אתה בטוח שברצונך למחוק אותם, תוכל להוסיף את הדגל -q כדי לספק את המזהים לפקודות docker stop ו־docker rm:

רשימה:

docker ps -a

הסרה:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

מסירת נפחים

הסרת נפח אחד או יותר מספציפיים

השתמש בפקודת docker volume ls כדי לאתר את שמות הנפח או הנפחים שברצונך למחוק. לאחר מכן תוכל להסיר נפח או יותר עם הפקודה docker volume rm:

רשימה:

docker volume ls

הסרה:

docker volume rm volume_name volume_name

הסר כתוביות תלויות

מאחר והמטרה של הכתוביות היא להיות תלויות באופן עצמאי מהמיכלים, כאשר מיכל מסוים נמחק, כתובית לא נמחקת אוטומטית באותו הזמן. כאשר כתובית קיימת ואינה מחוברת עוד לאף מיכל, זה נקרא כתובית תלויה. כדי לאתר אותן ולאשר את המחיקה שלהן, תוכל להשתמש בפקודת docker volume ls עם מסנן להגבלת התוצאות לכתוביות תלויות. כאשר אתה מרוצה מהרשימה, תוכל למחוק אותן כולן בעזרת docker volume prune:

רשימה:

docker volume ls -f dangling=true

מחק:

docker volume prune

מחק מיכל ואת כתוביותיו

אם יצרת כתובית שאינה מקובטת, ניתן למחוק אותה בו זמנית עם המיכל באמצעות הדגל -v. שים לב כי זה עובד רק עם כתוביות לא מקובטות. כאשר המיכל נמחק בהצלחה, נצגת זהותו. שים לב כי אין התייחסות למחיקת הכתובית. אם היא אינה מקובטת, היא תמחק בשקט מהמערכת. אם היא מקובטת, היא תישאר במערכת בשקט.

מחק:

docker rm -v container_name

מסקנה

מדריך זה מכסה חלק מהפקודות הנפוצות המשמשות להסרת תמונות, תושבות ונפחים עם Docker. ישנן הרבה קומבינציות ודגלים נוספים שניתן להשתמש בהם עם כל פקודה. למדריך מקיף על מה שזמין, ראה את תיעוד ה-Docker עבור docker system prune, docker rmi, docker rm, ו־docker volume rm. אם ישנם משימות ניקוי נפוצות שתרצה לראות במדריך, נא לשאול או להציע הצעות בתגובות.

למבט מפורט על הרכיבים השונים של תושבת Docker, ראה אקוסיסטמה של Docker: מבוא לרכיבים נפוצים.

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes