Docker – הקדמה

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

Docker הוא פרויקט קוד פתוח, המאפשר אוטומציה של התקנה והרצת יישומים בתוך מכולות תוכנה.
דוקר מספק שכבה נוספת של הפשטה ואוטומציה של וירטואליזציה ברמת מערכת ההפעלה על Windows ו – Linux. דוקר משתמש בתכונת בידוד משאבים (Resource Isolation) של ליבת לינוקס, כגון: cgroups, ו-Kernel Namespaces, וכן במערכת קבצים טעינה (Union Capable), כגון OverlayFS ואחרים כדי לאפשר למכולות עצמאיות לרוץ בתוך מופע לינוקס, להימנע מהתקורה של הקמת ותחזוקת של מכונות וירטואליות.

ברור, לא? האמת היא שלא. אז אני אנסה להסביר דווקא מהצד הפרקטי – דוקר מאפשרת לנו בקלות לכתוב מה שבא לנו ולהריץ אותו איפה שבא לנו. למשל, אם אני רוצה לכתוב PHP אבל מה לעשות יש לי חלונות, אני יכול. אם אני רוצה לכתוב ב-node אבל לא בא לי לטנף את מערכת ההפעלה המקומית שלי ב-nvm, אני גם יכול. אם אני רוצה לפתח על וורדפרס אבל לא בא לי להתקין MySQL ו-PHP ואני בכלל עובד על חלונות אני גם יכול. יותר מזה, דוקר מאפשר לצוות שלם לרוץ על אותה סביבה. במקום לבדוק שלכולם יש אותה גרסה של MySQL או אותה גרסה של PHP או אותה גרסה של לינוקס, אנחנו יכולים לאכוף את אותה סביבת עבודה לכל המפתחים בקלות.

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

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

אתם יודעים מה? בואו נדבר ת'כלס . אנו נתקין את דוקר ואז אנחנו ניצור קונטיינר. מה זה קונטיינר? זוהי מכונה שמריצה את כל מה שאנחנו צריכים. למשל PHP ו-Apache או למשל node ולינוקס. כל המכונות מבוססות לינוקס. כל קונטיינר מוגדר עם קובץ הגדרות. למשל בקובץ ההגדרות כתוב שאנחנו צריכים PHP מגרסה 7 ו-apache מגרסה 2.1. דוקר לוקח את קובץ ההגדרות ויוצר קונטיינר – מכונה וירטואלית שיש בה את מה שאנחנו רוצים ומוגדרת כבר עם מערכת קבצים שמתממשקת אלינו, פורט משל עצמה וכו'. זה נעשה בקלות ובמהירות.

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

השלב הראשון הוא התקנת הדוקר.

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

אייקון דוקר בחלונית החיפוש של חלונות 10

אנו נכנס לסוג של CMD שמאפשר לי להריץ פקודות לינוקס על חלונות כמו cygwin למי שמכיר. זה נקרא docker shell והוא ייחודי לחלונות/מק. על מנת לבדוק שהכל עובד ותקין, אני אכתוב

docker -v

זה יראה לי את הגרסה של דוקר אם הכל תקין. אני אנסה גם

docker ps -a

שמראה לי את רשימת כל מכונות ה-docker הקיימות. מן הסתם זו תהיה רשימה ריקה. אם יש איזושהי תקלה – עצרו הכל ונסו לתקן. התיקון המיידי הוא התקנה מחדש של הגרסה העדכנית ביותר של docker tools. אם אתם משתמשים במכונות וירטואליות, נסו לכבות את Virtual box ולהריץ שוב את docker shell. בגדול זה צריך להיות תקין. הנה, ככה:
הרצת פקודות docker

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

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

אנו נלך על אפשרות 2. בהמשך נלמד על קובץ הגדרות יותר לעומק. לדוקר יש מאגר עצום של קבצים דיפולטיביים. חלק מהם נחשבים לרשמיים. ל-PHP יש קובץ דוקר רשמי שאנו נשתמש בו. הוא מכיל המון קישורים לכל מיני סביבות של PHP. אנחנו צריכים את הסביבה שתומכת ב-apache, כי אנחנו צריכים שרת ווב שיבוא עם ה-PHP. שם החבילה הוא: php:7.0-apache

על מנת להתקין קובץ דוקר ראשוני אני חייב להשתמש ב docker run. מדובר בפקודה רבת עוצמה שלוקחת docker file והופכת אותו ל-docker container.

docker run -d -p 80:80 --name my-apache-php-app -v "$PWD":/var/www/html php:7.0-apache

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

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

p- הפלאג הזה קובע את הפורטים או יותר נכון מה שקובע אחריו. 80:80 אומר כל בקשה שמופנית לפורט 80 של הדוקר עוברת לפורט 80 של הקונטיינר. אני יכול למשל לכתוב

-p 3000:80

ואז כשאכתוב את ה-ip של הדוקר אני אצטרך להוסיף 3000. אנו משתמשים בזה אם אנו מריצים כמה קונטיינרים במקביל. וכן, זה קורה.

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

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

docker run -d -p 80:80 --name my-apache-php-app -v /c/temp:/var/www/html php:7.0-apache

החלק האחרון והחשוב ביותר הוא החבילה, במקרה שלנו זה php:7.0-apache.

הרצה של זה תתחיל להתקין דרך קובץ הדוקר את כל מה שאנחנו צריכים: PHP, apache וכו'. איך זה מתקין? על המחשב המקומי?!? לא. מה פתאום. זה יוצר סוג של מערכת וירטואלית. ההתקנה תיקח מספר דקות (תלוי במהירות שלכם) כי דוקר מוריד את הכל. ההורדה הזו היא חד פעמית, אם נרצה ליצור מכונה נוספת, דוקר ישתמש במה שיש כבר. מיד אחרי ההרצה, אנו נקבל את שם המכונה. אם נכתוב:

docker ps -a

נוכל לראות את המכונה שלנו. ואיך ניגש אליה? אנחנו צריכים את ה-IP שדוקר התחבר אליו. זה לא ה-IP של המחשב אלא IP של המכונה הוירטואלית שדוקר נמצא עליה. איך מוצאים אותו? עם הפקודה:

docker-machine ip

אם נקליד את ה-IP הזה יחד עם הפורט (במידה ולא בחרתם בפורט 80) אתם תוכלו לראות Forbidden, הציבו index.php בנתיב ה-C:\Users\YOURUSER שלכם או בנתיב שבחרתם עם פלאג v- ותראו אותו רץ, ממש כמו בדוגמה.

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (9 הצבעות, ממוצע: 5.00 מתוך 5)

תגיות: פורסם בקטגוריה: docker

אל תשארו מאחור! יש עוד מה ללמוד!

9 comments on “Docker – הקדמה
  1. למי שמשתמש ב windows 10 ניתן להוריד סביבת דוקר חדשה מפה:

    https://www.docker.com/docker-windows

    עם אינטגרציה טובה יותר, שמאפשרת להשתמש ב docker client ישירות מ command prompt הרגיל, ולא מצריכה לפתוח terminal מסויים. אין שימוש ב VM בכלל. רץ ישירות מעל Hyper-V,
    עם תמיכה ב windows container וב linux container ועוד ועוד.
    שווה לנסות.

    עומר

    • ביל גייטס הגיב:

      חשוב להבהיר שזה לא עובד על home edition שזו הגרסה שיש לרוב המשתמשים הפרטיים

    • רן בר-זיק הגיב:

      זו הבהרה חשובה,מי שמשתמש בחלונות 10 שהוא לא home – שישתמש בזה. אבל גם עם docker tools, אפשר להשתמש ב-docker מה-CMD הרגיל.

  2. שמוליק הגיב:

    בן אדם תודה רבה.
    מזמן שאני מנסה להבין מה זה הדבר הזה ועכשיו ניראה שהובן.
    ישר כח!

  3. מתלמד הגיב:

    לא הבנתי..
    רשת ביתית בלי פרוקסי גרועה מאינטרנט אקספלורר??

  4. קורא קבוע הגיב:

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

  5. עידו הגיב:

    אהלן,
    תודה על המדריך המצוין.
    אחרי הרצת פקודת ה-run אני מקבל כצפוי 403.
    העניין הוא שיצירת קובץ ה-PHP בתקייה על המחשב שלי לא גורמת לקובץ להופיע בתוך הקונטיינר.
    אם אני נכנס לקונטיינר עצמו ודרך ה-docker ויוצר קובץ index.php זה עובד.
    מה אני מפספס?

    הפקודה שהרצתי כדי ליצור את הקונטיינר:
    docker run -d -p 80:80 –name php-7.1.6-apache-2.1 -v /c/docker/containers/php-7.1.6-apache-2.1:/var/www/html php:7.1.6-apache

    תודה!

    • רן בר-זיק הגיב:

      לא יצרת קישור בין המחשב שלך לדוקר. תראה אם הנתיב שכתבת אחרי הפלאג של ה-v הוא הנתיב הנכון. במקרה שלך הוא: – /c/docker/containers/php. האם יש נתיב כזה? תנסה להגיע אליו באמצעות הקונסולה.

הצטרפו לעדכונים!

העדכונים נשלחים אך ורק כאשר האתר מתעדכן.

רן בר-זיק

רן בר-זיקכותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי

הטוויטר שלי

פרופיל הפייסבוק שלי

אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.