Docker – הקדמה

דוקר - מבוא והסבר ראשוני שבו אני מדגים ומראה איך מתקינים ואיך מריצים אפליקצית PHP מתוך חלונות בלי בעיות

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

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- ותראו אותו רץ, ממש כמו בדוגמה.

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

המנעו מהעלאת source control לשרת פומבי

לא תאמינו כמה אתרים מעלים את ה-source control שלהם לשרת. ככה תמצאו אותם וגם הסבר למה זה רעיון רע.

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

גלילה לראש העמוד