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

אז מה זה קונטיינר?

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

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

לפני שאנו צוללים לאיך משתמשים בקונטיינרים, נסביר ראשית מה זה Image.

מה זה Image?

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

כאשר דוקר מריץ Image מסויים, הוא הופך להיות קונטיינר (Docker Container).

איך מריצים קונטיינר?

על מנת להריץ קונטיינר, עלינו לבחור את ה-Image אותו אנו רוצים להריץ, לצורך ההדגמה נלך כרגע על Image קיים.

על מנת לבחור איזה Image אנחנו רוצים להריץ ניתן לגשת ל-Docker Hub, שימו לב שאתם צריכים לפתוח חשבון לפני שתוכלו לעיין ברשימה, אך אל חשש, הרישום הוא בחינם.

לצורך ההדגמה, אנחנו נריץ Image של NGINX (שרת HTTP), לכן נתחיל בלהוריד עותק של ה-Image, פתחו את הטרמינל והריצו את הפקודה הבאה:

docker pull nginx

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

בסיום ההורדה נוכל להרים קונטיינר ע״י הרצת הפקודה הבאה:

docker run --name nginx-server -v ~/code:/usr/share/nginx/html:ro -d -p 1508:80 nginx

כעת אם ניגש לכתובת http://localhost:1508 בהנחה והפורט לא תפוס, יעלה לנו עמוד 403.
אם ניצור תחת תיקייה ה-Home של המשתמש שלנו תיקייה שנקראת code ואז בתוכה ניצור קובץ index.html עם תוכן כלשהו, ברגע שנרענן את העמוד יעלה לנו התוכן.

על מנת להבין מה עשינו כרגע, אסביר מה הפקודה עושה בפועל.
בתור התחלה אנו אומרים ל-Docker להריץ Image מהמחשב שלנו (docker run), על מנת לזהות את המכולה, אנו מגדירים לה שם (--name nginx-server) ואז יוצרים מיפוי בין תיקייה על המחשב שלנו לתיקייה בתור המכולה (-v ~/code:/usr/share/nginx/html).

אנו מגדירים כי המיפוי הוא Read Only, כלומר שלא יהיה ניתן לשנות אותו מתוך המכולה, ולבסוף אנחנו חושפים את פורט 80 (המשתמש את רוב שרתי ה-HTTP) כפורט 1508 על המחשב שלנו (-p 1508:50) ולבסוף אנו אומרים מה שם ה-Image שיש להריץ (nginx).

איך מתחברים לקונטיינר קיים?

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

בשביל לעשות זאת Docker מאפשרת לנו להתחבר אליו דרך Bash לבצע פעולות, על מנת לעשות זאת נריץ את הפקודה הבאה:

docker exec -it CONTAINER_ID /bin/bash

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

שימו לב כי לא כל פקודות ה-Unix יהיו זמינות לכם בוודאות, אך פקודות הליבה יהיו זמינות לכם.

איך עוצרים קונטיינר?

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

על מנת לראות את המכולות אשר רצות כרגע ניתן להריץ את הפקודה הבאה בטרמינל:

docker ps

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

צילום מסך של רשימת קונטיינרים של דוקר

על מנת לעצור מכולה כל שעלינו לעשות הוא להריץ את הפקודה הבאה:

docker kill CONTAINER_ID

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

איך מחזירים לחיים קונטיינר קיים?

במידה ואנו רוצים להריץ שוב את אותו הקונטיינר, אם נריץ את הפקודה הקודמת docker run אנו נקבל את השגיאה הבאה:

docker: Error response from daemon: Conflict. The container name "/nginx-server" is already in use by container "388a6a4f7faaf4368e61f4afcaa36e97fbc50c558cfb5ea6ba414ee9fffbe4b0". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

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

docker restart CONTAINER_ID

גם כאן יש להחליף את המילה CONTAINER_ID במזהה הקונטיינר או בשם הקונטיינר.

איך מוחקים קונטיינר?

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

docker rm CONTAINER_ID

סיכום

מזל טוב 🎉,
הרצתם את הקונטיינר הראשון שלכם, ואפילו הרמתם שרת Web לתפארת מדינת ישראל 🇮🇱. קונטיינרים הם הליבה של Docker והם מאפשרים לנו להרים שירותים שונים על המחשב שלנו באפס מאמץ, מה שמאפשר לנו להתרכז בפיתוח ופחות בתשתיות.

בחלק הבא בסדרה נלמד על מה זה Dockerfile ואיך אפשר לבנות איתו Image-ים משלנו על מנת לתת תמיכה מלאה לקוד שלנו.

    כתיבת תגובה

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

    שתפו