עבודה עם תוכניות קונטיינרים

הקדמה

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

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

סקירה

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

התמונות מתחייבות עם הפקודה docker run, שיוצרת container על ידי הוספת שכבת כתיבה על התמונה. השילוב הזה של שכבות קריאה בלבד בצד עם שכבת כתיבה מכונה union file system. כאשר שינוי מתבצע לקובץ קיים ב-container הפועל, הקובץ מועתק מהמרחק של קריאה לשכבת כתיבה, היכן שהשינויים מתיישבים. הגרסה בשכבת כתיבה מסתירה את הקובץ המקורי אך אינה מסירה אותו. שינויים בשכבת הכתיבה קיימים רק בתוך מופע ספציפי של ה-container. כאשר מוחקים את ה-container, כל השינויים מאובדים אלא אם יתקבלו צעדים כדי לשמר אותם.

כיצד לעבוד עם תפקידי Docker

  1. צור שני Containers של Docker
  2. אתחל את ה-container הראשון מחדש
  3. מחק את שני ה-Containers

עבודה עם תופסים

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

שלב 1: יצירת שני תופסים

הפקודה docker run הבאה תיצור תופס חדש באמצעות תמונת הבסיס ubuntu. -t יאפשר לנו לקבל מסוף, ו־-i יאפשר לנו להתמודד איתו. נסמך על הפקודה הברירת מחדל בקובץ ה־Docker של התמונה של Ubuntu, bash, כדי להכניס אותנו לשאל.

  1. docker run -ti ubuntu

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

נבצע שינוי על ידי להדפסת טקסט אל מדור ה־/tmp של התופס, ואז נשתמש ב־cat כדי לוודא שהוא נשמר בהצלחה.

  1. echo "Example1" > /tmp/Example1.txt
  2. cat /tmp/Example1.txt
Output
Example1

עכשיו, בואו ניצא מהתופס.

  1. exit

התוכניות של Docker עוצרות לרוץ כשהפקודה שהוזנה סיימה, כך שהתוכנייה שלנו עצרה כאשר יצאנו מסוף ה- bash. אם נריץ docker ps, הפקודה להצגת התוכניות שרצות, לא נראה את השלנו.

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

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

  1. docker ps -a
Output
CONTAINER 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 שניות לפני). אם התוכנית הייתה עדיין רצה, ראינו היינו את המצב "מופעל", לאחריו כמה זמן היא רצתה.

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

  1. docker run -ti ubuntu

ניתן לזהות שזו תוכנית חדשה מכיוון שהמזהה בשורת הפקודה שונה, וכאשר נחפש את הקובץ Example1 שלנו, לא נמצא אותו:

  1. cat /tmp/Example1
Output
cat: /tmp/Example1: No such file or directory

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

  1. exit

כאשר אנו מפרטים את התוכניות שוב, שניהם מופיעים:

  1. docker ps -a
Output
CONTAINER 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 כדי להפעיל אותו באופן אינטראקטיבי, לאחר מכן נזין את מזהה המיכל או שמו. וודאו להחליף את מזהה המיכל שלכם בפקודה שלמטה:

  1. docker start -ai 11cc47339ee1

אנו מוצאים את עצמנו בתוך פקודת ה- bash של המיכל שוב וכאשר אנו מבצעים cat על הקובץ שיצרנו לפני כן, הוא עדיין נמצא שם.

  1. cat /tmp/Example1.txt
Output
Example1

ניתן לצאת מהמיכל כעת:

  1. exit

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

שלב 3: מחיקת שני המיכלים

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

  1. docker rm 11cc47339ee1 kickass_borg
Output
11cc47339ee1 kickass_borg

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

מסקנה

בדקנו בפרט את הפקודה docker run כדי לראות כיצד היא יוצרת אוטומטית תופף חדש בכל פעם שהיא מופעלת. ראינו גם איך לאתר תופף שנעצר, להתחיל אותו ולהתחבר אליו. אם ברצונך ללמוד עוד על ניהול תופפים, עשוי לעניין אותך המדריך, שמיתו של תופף ב-Docker: 3 טיפים למתחילים.

Source:
https://www.digitalocean.com/community/tutorials/working-with-docker-containers