בדרך כלל בפסקה הראשונה של כל מדריך אני מביא את ההגדרה הרשמית של המונח ומסביר מהנקודה הזו והלאה. הבעיה היא שעם דוקר אפילו ההגדרה הרשמית מאיימת יותר מהרגיל. בויקיפדיה בעברית למשל, ההגדרה היא כזו:
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 בחלונית החיפוש של חלונות ומפעילים.
אנו נכנס לסוג של 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- ותראו אותו רץ, ממש כמו בדוגמה.
22 תגובות
למי שמשתמש ב 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 הרגיל.
הדרך שעומר מציע היא הדרך המומלצת היום ולא רק למשתמשי windows.
https://docs.docker.com/toolbox/toolbox_install_windows/
גם הקישורים ששמת להתקנה מעבירים לעמוד התקנה של docker desktop.
כך שהיום אין docker quickstart Terminal ופשוט מריצים מהטרמינל.
מי שיש לו windows10 home יכול להתקין בעזרת התשובה הבאה:
https://forums.docker.com/t/installing-docker-on-windows-10-home/11722/32
התשובה הזאת מסכמת את השלבים שצריך לעשות כדי שזה יעבוד. איך עושים אותם את אותם פעולות כתוב בתשובות שמעל התשובה הזאת. אני עשיתי ועובד לי מצויין
בגרסאות החדשות בשילוב עם WSL2 אפשר להתקין גם על HOME
בן אדם תודה רבה.
מזמן שאני מנסה להבין מה זה הדבר הזה ועכשיו ניראה שהובן.
ישר כח!
לא הבנתי..
רשת ביתית בלי פרוקסי גרועה מאינטרנט אקספלורר??
תודה על המאמר רן
אני משתמש בפרוקסי בגלל הסינון נטפרי שיש לי על המחשב. יש פתרון עבורי?
אפשר בהחלט, זה רק דורש יותר קונפיגורציה.
אהלן,
תודה על המדריך המצוין.
אחרי הרצת פקודת ה-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. האם יש נתיב כזה? תנסה להגיע אליו באמצעות הקונסולה.
גם אצלי השגיאה הופיעה
הבעיה לא בניתוב לקבצים של הפרוייקט אלא בניתוב לקבצים שבקונטיינר
התקיה /var/www/html לא קיימת
לא כל החבילות יוצרות את התקיה באופן אוטומטי ובחלק צריך ליצור אותה לבד
תודה רבה על המאמר.
ברשותך, דבר אחד אינו ברור לי- היכן בפועל מותקנות מערכות ההפעלה או ההרחבות שאני יוצר?
האם כתובת ה-IP היא כתובת IP של שרת חיצוני עליו מותקן הכל או שמא זה מותקן על המחשב שלי? ובמידה וזה מותקן על המחשב שלי- מהיכן מגיעה כתובת ה-IP?
התכוונתחי לתגובה לזה!!
גם אני לא הבנתי את זה מהמאמר ?
תודה רן על המאמר הנפלא.
יש לי בעיה, אני ניסיתי להרים docker של ejabberd (יצא לך להתעסק עם זה?) ואני לא מצליח אפילו להיכנס לדשבורד.
הפקודה היא:
docker run -d -u root -P –name "ejabberd" -p 5222:5222 -p 5269:5269 -p 5280:5280 -h 'localhost' -e "XMPP_DOMAIN=localhost" -e "EJABBERD_ADMINS=admin@localhost admin2@localhost" -e "EJABBERD_USERS=admin@localhost:p
assword1234 admin2@localhost" -e "TZ=Europe/Berlin" rroemhild/ejabberd
גם אני לא הבנתי את זה מהמאמר 🙁
תודה רבה לך ! הסבר מאוד טוב כדי להתחיל להכנס לעניינים
תודה רבה על המאמר.
אשמח אם תעזור לי כי אני לא מצליח להוריד את הקובץ הראשוני וזה השגיאה שאני מקבל
C:\Users\Administrator>docker run -d -p 80:80 –name my-apache-php-app -v /c/temp:/var/www/html php:7.0-apache
Unable to find image 'php:7.0-apache' locally
docker: Error response from daemon: Get https://registry-1.docker.io/v2/library/php/manifests/7.0-apache: unauthorized: incorrect username or password.
See 'docker run –help'.
הי ,
כאשר אני כותב את הפקודה בPS:
docker-machine ip
הוא כותב לי:
Error: No machine name(s) specified and no "default" machine exists
מה לעשות?
ד"א , הCLI של DOCKER לא הותקן לי,
תודה רבה
אשמח לתגובה מאד עזרת…
הי רן, במה אתה ממליץ להשתמש, בדוקר או בוירטואל בוקס?
שלום רב! אנחנו מנסים ליישם docker אצלנו בחברה ומחפשים יועץ לסייע בנושא האם תוכל להמליץ?
תודה עופר
היי ראשית תודה על כל המדריכים שלך ממש מרתקים ועוזרים!
שנית דוקר את ההתקנות שלהם לגרסת DESKTOP כך שבעצם אין לי את הטרמינל הרגיל…
תוכל במקרה לעשות מדריך נפרד עבור גרסא זו?
תודה