✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

דוקר - הקדמה

רן בר זיק
|
קלה
|
Oct 11, 2018
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

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

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

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

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

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

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

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

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

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

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

docker -v

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

docker ps -a

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

עכשיו מה? עכשיו צריך ליצור קובץ הגדרות. כאמור דוקר הוא בסך הכל מנגנון שמפעיל מכונות וירטואליות. בגדול, יש לנו מכונה וירטואלית, ממש כמו 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- ותראו אותו רץ, ממש כמו בדוגמה.

מאת: רן בר זיק, מתכנת ובלוגר

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

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

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

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

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

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

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

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

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

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

docker -v

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

docker ps -a

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

עכשיו מה? עכשיו צריך ליצור קובץ הגדרות. כאמור דוקר הוא בסך הכל מנגנון שמפעיל מכונות וירטואליות. בגדול, יש לנו מכונה וירטואלית, ממש כמו 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- ותראו אותו רץ, ממש כמו בדוגמה.

מאת: רן בר זיק, מתכנת ובלוגר

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
רן בר זיק
בואו נעבוד ביחד
צרו קשר