הקדמה
דוקר הוא כלי נפוץ לקונטיינריזציה המשמש לספק ליישומי תוכנה עם מערכת קבצים המכילה את כל מה שהם צריכים כדי לרוץ. באמצעות קונטיינרים של דוקר מתבטית התוכנה להתנהג באותה הדרך, בלתי תלוי איפה היא מופעלת, משום שסביבת הזמן הריצה שלה היא עקבית למות.
במדריך זה, נספק סקירה קצרה של הקשר בין תמונות דוקר לבין קונטיינרים של דוקר. לאחר מכן, נציג מבט מפורט יותר על איך להריץ, להתחיל, לעצור ולהסיר קונטיינרים.
סקירה
נוכל לחשוב על תמונת דוקר כתבנית לא פעילה המשמשת ליצירת קונטיינרים של דוקר. תמונות רגילות מתחילות בקובץ מערכת שורש ומוסיפות שינויי מערכת והפרמטרים המתאימים שלהם בשכבות מסודרות ולקריאה בלבד. להבדיל מהפצת Linux רגילה, תמונת דוקר כוללת בדרך כלל רק את הדברים הקריטיים המוכרחים להרצת היישום. התמונות אינן מחזיקות במצב והן אינן משתנות. למעשה, הן מהוות את נקודת ההתחלה לקונטיינרים של דוקר.
התמונות מתחייבות עם הפקודה docker run
, שיוצרת container על ידי הוספת שכבת כתיבה על התמונה. השילוב הזה של שכבות קריאה בלבד בצד עם שכבת כתיבה מכונה union file system. כאשר שינוי מתבצע לקובץ קיים ב-container הפועל, הקובץ מועתק מהמרחק של קריאה לשכבת כתיבה, היכן שהשינויים מתיישבים. הגרסה בשכבת כתיבה מסתירה את הקובץ המקורי אך אינה מסירה אותו. שינויים בשכבת הכתיבה קיימים רק בתוך מופע ספציפי של ה-container. כאשר מוחקים את ה-container, כל השינויים מאובדים אלא אם יתקבלו צעדים כדי לשמר אותם.
כיצד לעבוד עם תפקידי Docker
- צור שני Containers של Docker
- אתחל את ה-container הראשון מחדש
- מחק את שני ה-Containers
עבודה עם תופסים
בכל פעם שאתה משתמש בפקודת docker run
, היא יוצרת תופס חדש מהתמונה שאתה מציין. זה עשוי להיות מקור לבלבול, אז בואו נסתכל על זה עם כמה דוגמאות:
שלב 1: יצירת שני תופסים
הפקודה docker run
הבאה תיצור תופס חדש באמצעות תמונת הבסיס ubuntu
. -t
יאפשר לנו לקבל מסוף, ו־-i
יאפשר לנו להתמודד איתו. נסמך על הפקודה הברירת מחדל בקובץ ה־Docker של התמונה של Ubuntu, bash
, כדי להכניס אותנו לשאל.
ההוראת שורת הפקודה משתנה כדי לציין שאנחנו בתוך התופס כשהמשתמש הראשי, ואחריו מספר מזהה של 12 תווים של התופס.
נבצע שינוי על ידי להדפסת טקסט אל מדור ה־/tmp
של התופס, ואז נשתמש ב־cat
כדי לוודא שהוא נשמר בהצלחה.
OutputExample1
עכשיו, בואו ניצא מהתופס.
התוכניות של Docker עוצרות לרוץ כשהפקודה שהוזנה סיימה, כך שהתוכנייה שלנו עצרה כאשר יצאנו מסוף ה- bash. אם נריץ docker ps
, הפקודה להצגת התוכניות שרצות, לא נראה את השלנו.
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
אם נוסיף את הדגל -a
, שמציג את כל התוכניות, עצורות או רצות, אז התוכנית שלנו תופיע ברשימה:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11cc47339ee1 ubuntu "/bin/bash" 6 minutes ago Exited (127) 8 seconds ago small_sinoussi
כאשר נוצרה התוכנית, ניתן לה ID שלה ולשם נוצר רנדומלית. במקרה זה, 11cc47339ee1 הוא ה-ID של התוכנית ו- small_sinoussi
הוא השם שנוצר רנדומלית. ps -a
מציגה את הערכים האלה, כמו גם את התמונה ממנה נבנתה התוכנית (ubuntu
), מתי נוצרה התוכנית (שיש דקות לפני
), והפקודה שנרצתה בה (/bin/bash
). הפלט מספק גם את מצב התוכנית (Exited
) וכמה זמן עבר מאז שהתוכנית נכנסה למצב הזה (6 שניות לפני
). אם התוכנית הייתה עדיין רצה, ראינו היינו את המצב "מופעל", לאחריו כמה זמן היא רצתה.
אם נפעיל שוב את אותה הפקודה, יוצרת תוכנית חדשה לגמרי:
ניתן לזהות שזו תוכנית חדשה מכיוון שהמזהה בשורת הפקודה שונה, וכאשר נחפש את הקובץ Example1 שלנו, לא נמצא אותו:
Outputcat: /tmp/Example1: No such file or directory
זה יכול להיראות כאילו הנתונים נעלמו, אך זה אינו המקרה. ניצא כעת מהתוכנית השנייה כדי לראות שהיא, והתוכנית הראשונה שלנו עם הקובץ שיצרנו, נמצאות שניהם במערכת.
כאשר אנו מפרטים את התוכניות שוב, שניהם מופיעים:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e4341887b69 ubuntu "/bin/bash" About a minute ago Exited (1) 6 seconds ago kickass_borg
11cc47339ee1 ubuntu "/bin/bash" 13 minutes ago Exited (127) 6 minutes ago small_sinoussi
שלב 2: איתחול המיכל הראשון מחדש
כדי לאתחול מחדש מיכל קיים, נשתמש בפקודת start
עם הדגל -a
כדי להתחבר אליו ועם הדגל -i
כדי להפעיל אותו באופן אינטראקטיבי, לאחר מכן נזין את מזהה המיכל או שמו. וודאו להחליף את מזהה המיכל שלכם בפקודה שלמטה:
אנו מוצאים את עצמנו בתוך פקודת ה- bash של המיכל שוב וכאשר אנו מבצעים cat
על הקובץ שיצרנו לפני כן, הוא עדיין נמצא שם.
OutputExample1
ניתן לצאת מהמיכל כעת:
פלט זה מראה כי השינויים שנעשו בתוך המיכל מתמידים דרך העצירה וההתחלה שלו. רק כאשר המיכל מוסר מתוך המערכת נמחק התוכן. מקרה זה מדגים גם כי השינויים התרחשו בתוך המיכל האישי. כאשר התחלנו מיכל שני, הוא שיקף את המצב המקורי של התמונה.
שלב 3: מחיקת שני המיכלים
יצרנו שני מיכלים, ונסיים את המדריך הקצר שלנו על ידי מחיקתם. פקודת docker rm
, שעובדת רק על מיכלים שנעצרו, מאפשרת לך לציין את השם או המזהה של מיכל אחד או יותר, לכן נוכל למחוק את שניהם באמצעות הפקודה הבאה:
Output11cc47339ee1
kickass_borg
שני התופפים, וכל השינויים שביצענו בתוכם, אינם כבר קיימים.
מסקנה
בדקנו בפרט את הפקודה docker run
כדי לראות כיצד היא יוצרת אוטומטית תופף חדש בכל פעם שהיא מופעלת. ראינו גם איך לאתר תופף שנעצר, להתחיל אותו ולהתחבר אליו. אם ברצונך ללמוד עוד על ניהול תופפים, עשוי לעניין אותך המדריך, שמיתו של תופף ב-Docker: 3 טיפים למתחילים.
Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers