ניקוי Docker: מדריך מלא עם דוגמאות מעשיות

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

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

פקודות הניקוי הללו הן חלק ממשפחת docker prune, והיום תלמד עליהן הכל. הן יהיו במהרה הפתרון שלך לשחרור שטח דיסק.

בואו נתחיל עם סקירה קצרה לפני שנעבור לדוגמאות מעשיות.

האם אתם חדשים ל-Docker? צפו במדריך שלנו על לימידת Docker מההתחלה עבור מקצוענים בתחום הנתונים כדי להתעדכן במהירות.

מהו Docker Prune?

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

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

עם זאת, יש יותר ל־docker prune מאשר שנראה במבט ראשון.  

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

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

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

רוצים להוסיף Docker לקורות החיים שלכם או לתיק העבודות שלכם? רעיונות פרוייקט Docker אלו יכולים להכניס אתכם למצב מוכנות לעבודה.

כל פקודות הגיזום של Docker עם דוגמאות פרקטיות

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

docker system prune   

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

אם אתה מחפש דרך מהירה לשחרור מקום בדיסק בפקודה יחידה, זו הפקודה לשימוש.

ניתן להעביר אפשרויות לפקודת docker system prune:

  • -a או --all מסיר את כל התמונות שאינן בשימוש במקום רק אלו שפנויות (תמונות שאינן מצויות בכל קיבוץ או מצויינות על ידי כל תוכן).
  • --filter מאפשר לך לציין ערכי סינון.
  • -f או --force דוחף את המאשרת ללא אישור מראש.
  • --volumes מנקה גם כרטיסי אחסון אנונימיים יחד עם תוכניות, רשתות, תמונות ומטמון בנייה.

כברירת מחדל, docker system prune מבקש אישור ממך מאחר שזה פעולה פוטנציאלית הורסת:

תמונה 1 – הודעת אישור למחיקת מערכת דוקר

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

docker system prune -a -f --volumes

תמונה 2 – הסרת הכל עם פקודת סידור יחידה בדוקר

אך מה אם תרצה שליטה יותר גרנולרית? בוא נכסה על זה בשלב הבא.

docker container prune

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

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

כמו docker system prune, פקודה זו תומכת באפשרויות:

  • --filter מאפשר לך לציין זוגות מפתח-ערך כדי לשלוט על אילו מיכלים יוסרו.
  • -f או --force מדלג על הודעת האישור.

כאן רשימת הקונטיינרים שאינם רצים:

תמונה 3 – רשימת הקונטיינרים שאינם רצים

כדי להסיר את code-server (וכל קונטיינר אחר שעצרתו), רוץ:

docker container prune -f

זה לא יבקש אישור ממך, ובתוך שניות, תראה פלט כמו זה:

תמונה 4 – הודעת פליטת הקונטיינרים

וכך, פתאום, אין יותר קונטיינרים שעצרו:

תמונה 5 – רשימת תופעלאים שאינם רצים (2)

עכשיו, בואו נטפל בתמונות שאינן בשימוש.

docker image prune

דומה לפקודה הקודמת, docker image prune מסיר תמונות שאינן בשימוש.

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

הנה רשימת האפשרויות הזמינות

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

עכשיו, בוא נראה את זה בפעולה!

הנה רשימת התמונות שנמצאות כרגע במערכת:

תמונה 6 – רשימת תמונות של Docker

כדי להסיר את כולן בפקודה אחת, הפעל:

docker image prune -a -f

תראו פלט כזה בטרמינל:

תמונה 7 – הודעת פליטת תמונה

לאחר מכן, אין יותר תמונות ב-Docker Desktop:

תמונה 8 – רשימת תמונות Docker (2)

הבא, נתעדף בנפחים שאינם בשימוש.

docker volume prune

כפי שהשם מרמז, פקודת docker volume prune מסירה את כל נפחי האחסון המקומיים שאינם בשימוש. כלומר, היא מוחקת נפחים שאינם מתייחסים לכל תכולת תום.

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

אלו האפשרויות שיש לך זמינות:

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

במערכת שלנו, יש כרגע כרטיסייה אחת יצורה על ידי המשתמש מקובץ docker-compose.yml:

תמונה 9 – רשימת כרטיסיות Docker

הפקודה הבאה מסירה את כל הכרטיסיות המקומיות:

docker volume prune -a -f

לאחר הרצתה, תראה פלט דומה לזה:

תמונה 10 – הודעת פליטת כריות נפח

כעת, אין עוד כריות במערכת:

תמונה 11 – רשימת כריות Docker (2)

לבסוף, נבחן איך למחוק רשתות שאינן בשימוש.

docker network prune

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

הפקודה docker network prune מסירה רשתות שאינן בשימוש על ידי שום קונטיינר כלשהו.

כמו שאר פקודות הגיזום, היא כוללת מספר אפשרויות:

  • --filter מאפשר לך לציין זוגות מפתח-ערך כדי לשלוט ברשתות שיש להם להסיר.
  • -f או --force עובר על מסך האישור.

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

תמונה 12 – רשימת רשתות Docker

כדי להסיר את כל הרשתות שאינן מקושרות להתקנת Docker המוגדרת כברירת מחדל, הפעל:

docker network prune -a -f

לאחר הרצת הפקודה, תראה פלט דומה לזה:

תמונה 13 – הודעת פליטת רשת

כל הרשתות המקושרות עם תוכניות שרצו בעבר אינן קיימות כעת:

תמונה 14 – רשימת רשתות Docker

אך שימו לב כי הרשתות השלוש שנותרות הן חיוניות עבור פעולת Docker לפעול כהלכה ולא ניתן להסירן.

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

שימוש בפקודת Docker Prune בצורה בטוחה  

הפקודות docker prune עוזרות לשחזר מהר מקום בדיסק, אך עליהן לציין שימוש בזהירות, במיוחד בסביבות הייצור.  

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

בקטע הזה ייבארו אמצעי זהירות מרכזיים לקחת בעת ביצוע docker prune בצורה בטוחה.  

הבנת מה יוסר  

פקודות ה-prune עוצבו כך שיסירו רק משאבים שאינם בשימוש פעיל.  

לדוגמה, docker image prune מוחק רק תמונות תלויות, ו־docker volume prune מסיר רק כרטיסי נתונים שאינם מחוברים לשום קונטיינרים. אך, הוספת אפשרויות כמו -a -f תסיר את כל התמונות או כרטיסי הנתונים בלי לבקש אישור.  

בנוסף, בסביבות מורכבות, תלויות יכולות להיות קלות להתעלם מהן, לכן חשוב תמיד לבדוק בקפידה לפני המחיקה.  

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

השתמש בפקודה זו כדי להציג את כל המיכלים, כולל אלה שנעצרו:  

docker ps -a

עליך לראות פלט דומה לזה:

תמונה 15 – רשימת כל ה- Docker containers

באותו אופן, ניתן להשתמש בפקודה זו כדי לרשום את כל התמונות, כולל אלה שאינן בשימוש:  

docker images

הפלט יהיה מאוחסן באופן דומה לזה שמופיע למעלה:  

תמונה 16 – רשימת כל ה- Docker images

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

docker volume ls

תמונה 17 – רשימת כל נפחי Docker

עיין בפלטים הללו בזהירות כדי לוודא שאין משאבים חשובים שימחקו בטעות.  

הרץ יבש לבטיחות  

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

בשל כך, עליך לבדוק באופן ידני משאבים באמצעות הפקודות המצוינות בסעיף הקודם לביצוע פקודת prune.  

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

כמובן, אלה הן רק מדדי זהירות, אבל אנו מקווים לראות אפשרות להרצת בדיקה יבשה מיישם בקרוב.

שיטות מובילות לניקוי דוקר 

כדי לשמור על סביבת הדוקר שלך נקייה מלכלוך בלתי נחוץ, חשוב להפעיל פקודות prune באופן קבוע – ואף לאוטומטיזציה שלהן. 

סעיף זה מדגים את שיטות המובילות להפעלת פקודות docker prune בסביבות הפקה. 

השתמש בפקודת ניקוי של דוקר באופן קבוע 

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

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

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

חשוב להיות זהירים בסביבת הפרודקשן  

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

רגע של חוסר תשומת לב עשוי להוביל לזמן עבודה מושבת או לאובדן נתונים, ואין לך רצון להיות אחראי על כך. לפני הרצת פקודות docker prune בסביבת הפקודה, תבדוק תמיד משאבי מערכת באמצעות docker ps -a, docker images, ו־docker volume ls, כפי שנתבאר בקטע הקודם.

בנוסף, כדאי להשתמש בפקודות כריות מסוימות במקום בפקודת ה־docker system prune הכול־כלולה, מאחר שזה עשוי להיקל על שחזור ממחיקות בלתי רצויות.

אוטומציה של הפקודה docker prune

עוד פרקטיקה טובה היא לסדר את מאמצי הניקיון על ידי אוטומציה של פקודות docker prune באמצעות משימות מתוזמנות.

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

לדוגמה, משימת ה-cron הזו על Linux מריצה פקודת גיזום שכוללת בכל יום ראשון בחצות:

0 0 * * 0 docker system prune -a -f

פתרון בעיות ב-Docker Prune

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

בנוסף, יתכן ותסירו בטעות משאבים חשובים, לכן חשוב לדון באסטרטגיות שחזור.  

שני הנושאים ייעזרו בסעיף זה.  

מתקלים בבעיות של שטח דיסק  

תמונות Docker עשויות להיות גדולות—לאחרונה הייתה לנו אחת שעברה את 13GB—ואנחנו בטוחים שיש גם גדולות יותר שם בחוץ. לכן, גם לאחר הרצת docker prune, עשוי להימצא שהמערכת שלך עדיין חסרת שטח בדיסק.  

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

docker system df

תמונה 18 – מקום בשימוש על ידי Docker

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

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

שחזור ממחיקות אקראיות

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

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

על macOS, ניתן לעשות זאת על ידי הרצת שני הפקודות הבאות (אפשרויות עבור Windows ו-Linux):

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

הרצת הפקודות הללו תשמור את הלוגים הקשורים ל-Docker של ה-30 דקות האחרונות לתוך /tmp/logs.txt. עליך לבדוק את הלוגים אלו כדי לקבוע אילו תכולות או תמונות נמחקו.

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

docker pull <image_name>

ועבור מיכלים שנמחקו, תמיד ניתן לשחזר אותם אם הם היו מבוססים על תמונות קבועות:  

docker run --name <container_name> <image_name>

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

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

סיכום ה-Docker Prune  

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

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

עליך פשוט להיות זהיר, במיוחד בסביבות ייצור. השתמש בפקודות כמו docker ps -a, docker images, ו־docker volume ls לפני שתבצע ניקוי כדי לרשום את כל המיכלים, התמונות והנפחים. בצע את פקודת הניקוי רק לאחר שתהיה בטוח שאתה בסדר עם מחיקת המשאבים שרשומים (בהנחה שהם לא בשימוש על ידי מיכל פעיל).

אם ברצונך ללמוד עוד על Docker, התמכרות במיכלים, ואורכסטרציה של מיכלים, בדוק את הקורסים הללו ב־DataCamp:

Source:
https://www.datacamp.com/tutorial/docker-prune