פיתוח קוד עם דוקר – docker

היכרות ראשונה

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

באופן טבעי כשיש כמות מרובה של פרויקטים בסביבת פיתוח יש גם גרסאות PHP  ו MySQL שונות לחלוטין שלא לדבר על השונות בסוג האפליקציות שעושים בהם שימוש MySQL/MariaDB Apache/Nginx וכן עוד שכבות מטמון אפשריות כמו Redis/Memcached או שימוש בNode בשביל SSR עם Next.js/Nuxt.js, בקיצור- הרבה וריאציות.
יכולתי באופן תיאורטי להמשיך באותה צורה, רוב הפרויקטים התאימו לגרסת PHP וMySQL ספציפית.

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

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

אז מה זה דוקר?

Docker is an open platform for developing, shipping, and running applications..
By taking advantage of Docker’s methodologies for shipping, testing, and deploying code quickly, you can significantly reduce the delay between writing code and running it in production.

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

היתרון העיקרי שלו לעומת המתחרים שלו Virtual machine ו Vagrant מתבטא במשקל הקל שלו וכתוצאה מזה גם ביצועים הרבה יותר מהירים.

ניתן לראות בתמונה שבעוד שבVM כל מופע שלו יוצר Operating System חדש ועל גבי זה הוא מריץ את האפליקציה, בדוקר כל המופעים מתבססים (או יכולים להתבסס) על גבי OS אחד, ז”א שכולם עושים שימוש באותו Kernel

Docker daemon – המנוע הבסיסי של דוקר

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

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

Images & Containers

בין המונחים הבסיסיים בדוקר נמצאים Images ו Containers.
Images זה למעשה סוג של תוכנית לcontainer, וכשמממשים אותה יוצרים Container.
בImage אפשר להגדיר תמונת בסיס שעליה מתבססים ע”מ להתאים אותה לצרכים האישיים של המפתח.

יצירת Image ע”י Dockerfile

על מנת ליצור תמונה שמותאמת לצרכים שלנו צריך לבנות תמונה חדשה בעזרת קובץ שנקרא Dockerfile

לדוגמא:

בפקודה FROM מגדירים מה התמונה עליה אנו רוצים להתבסס ע”מ ליצור את התמונה (Image) שלנו, בהמשך מריצים פקודה להתקנת עוד אפליקציה ותוסף לPHP

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

הפלט יהיה “Successfully built image-ID”, בעזרת הID לאחר מכן יהיה אפשר ליצור container ולחשוף אותו למחשב המארח.
כדי לתת שם ייחודי, אפשר להריץ את אותה פקודה עם שימוש בפרמטר t או tag בצורה הבאה:

יצירת container מתוך הimage

כעת ניתן להציג את הimage שיצרנו ע”י הפקודה docker image ls שתיתן לנו רשימה של התמונות הקיימות שנמצאות אצלנו:

כעת נקים container מתוך image שנבחר:

בחרתי להשתמש בתגית alpine כשהמשמעות היא שאני משתמש בimage קל משקל. במידה והimage לא קיים עדיין על המחשב שלכם, docker ידע בעצמו למשוך את הimage מתוך dockerhub, כך שבעצם הוא מבצע בשבילכם את הפקודה docker pull image-name מאחורי הקלעים.

הפרמטר -p נותן אפשרות ‘להדביק’ את הפורטים (ports) שלי ושל הcontainer כך שכשתגלשו לlocalhost:8080 אתם בעצם גולשים לפורט 80 של הקונטיינר ואתם אמורים לראות את הפלט הבא:

בפוסט הבא אמשיך להדגים איך יוצרים volume, אסביר על ההמלצות של one process per container, וכן על דרך לחבר את כל הקונטיינרים יחד לתזמורת הרמונית שלימה 🙂

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *