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

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

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

תוכן עניינים

מהן תוכניות המיכל?

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

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

תכונות מרכזיות של תוכניות המיכל:

  • קלות המשקל: תוכניות המיכל משתפות את ליבת המערכת של המארח, להבדיל ממכונות וירטואליות (VMs) שדורשות מופעים שונים של מערכת הפעלה, מה שהופך אותן למהירות ויעילות יותר.

  • נייד: לאחר בנייה, תיק יכול לרוץ באופן עקבי במגוון סביבות.

  • מבודד: תיקים רצים בתהליכים מבודדים, מה שאומר שהם לא מערבבים עם יישומים אחרים שרצים על אותו מערכת.

מה זה Docker?

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

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

עקרונות מרכזיים ב-Docker

  1. תמונות Docker: חשבו על תמונת Docker כתוכנית לתיק שלכם. היא מכילה הכל נדרש להפעלת היישום, כולל קוד, ספריות ותלות מערכת. תמונות מבונות מסדרת הוראות שכתבו בקובץ Dockerfile.

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

  3. קובץ Dockerfile: זהו קובץ טקסט שמכיל את השלבים הנדרשים ליצירת תמונת דוקר. זהו המקום בו אתה מגדיר איך תראה הקונטיינר שלך, כולל התמונה הבסיסית, קוד היישום, וכל התלותים הנוספים.

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

  5. Docker Compose: עבור אפליקציות שדורשות מספר רב של תופסים (לדוגמה, שרת אינטרנט ומסד נתונים), Docker Compose מאפשר לך להגדיר ולנהל סביבות מרובות תופסים באמצעות קובץ YAML פשוט.

למה Docker?

הפופולריות של Docker נבנית על יכולתה לפתור מגוון אתגרים שפותרים פתחים היום:

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

  • מהירות: תופסי Docker מהירים להתחל ולעצירה, מה שהופך אותם לאידיאליים לניסויים ולשיגורי ההפצה.

  • שימוש יעיל במשאבים: מאחר ותופסים משתפים את משאבי המערכת המארחת בצורה יעילה יותר ממכונות וירטואליות, הם מפחיתים עליות ומאפשרים עבור צפיפות גדולה יותר ביישומים.

  • בקרת גרסאות עבור היישומים שלך: Docker מאפשרת לך בקרת גרסאות לא רק על הקוד שלך אלא גם על הסביבה בה מבוצע הקוד שלך. זה מועיל במיוחד לשחזור לגרסאות קודמות או לאיתור תקלות בייצור.

ארכיטקטורת Docker

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

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

ארכיטקטורת Docker: רכיבים מרכזיים

ארכיטקטורת Docker מבוססת על מודל לקוח-שרת שכולל את הרכיבים הבאים

  • לקוח Docker

  • דֵימון Docker (dockerd)

  • מנוע דוקר

  • תמונות דוקר

  • מיכלי דוקר

  • רישומי דוקר

1. לקוח דוקר

לקוח דוקר הוא הדרך העיקרית שבה המשתמשים מתקשרים עם דוקר. זהו כלי שורת פקודה ששולח הוראות לדוקר דיימון (שנכסוף נדון בו לאחר מכן) באמצעות ממשקי REST API. פקודות כמו docker build, docker pull, ו־docker run מבוצעות מהלקוח של דוקר.

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

2. דוקר דיימון (dockerd)

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

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

  • בניית והפעלת מיכלים: כאשר הלקוח שולח פקודה להפעלת מיכל, הדיימון מושך את התמונה, יוצר את המיכל, ומפעיל אותו.

  • ניהול משאבי Docker: הדימון עוסק במשימות כמו הגדרות רשת וניהול נפחים.

  • הדימון של Docker רץ על המכונה המארחת ותקשורת עם הלקוח של Docker באמצעות REST API, קופסאות Unix, או ממשק רשת. הוא גם אחראי על התקשורת עם זמני הריצה של התופסים, שעוסקים בביצוע הפועל האמיתי של התופסים.

3. מנוע Docker

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

ישנן שתי הגדרות של מנוע Docker

  • Docker CE (Community Edition): זוהי הגרסה החינמית והקוד פתוח של Docker שמשמשת במידה רבה לפרויקטים אישיים ולפרויקטים בקנה קטן.

  • Docker EE (Enterprise Edition): הגרסה המועדפת בתשלום, ברמת עסקים של Docker מגיעה עם תכונות נוספות כמו אבטחה משופרת, תמיכה ותעודה.

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

4. Docker Images

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

תמונות Docker בדרך כלל מבנות מ-Dockerfiles, שהם קבצי טקסט המכילים הוראות על איך לבנות את התמונה. לדוגמה, קובץ Dockerfile בסיסי עשוי להתחיל עם תמונה בסיסית כמו nginx או ubuntu ולכלול פקודות להעתקת קבצים, התקנת תלות או הגדרת משתנים סביבה.

הנה דוגמה פשוטה של Dockerfile

dockerfileCopy codeFROM nginx:latest
COPY ./html /usr/share/nginx/html
EXPOSE 80

בדוגמה זו, אנו משתמשים בתמונת Nginx הרשמית כתבנית ומעתיקים את קבצי ה-HTML המקומיים שלנו אל תיקיית האינטרנט של התוכנה.

ברגע שהתמונה מוכנה, ניתן לאחסן אותה בריגיסטר של Docker ולשתף אותה עם אחרים.

5. Docker Containers

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

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

מאפיינים מרכזיים של מיכלי Docker:

  • בידוד: המיכלים מבודדים זה מזה ומהמארח, אך הם עדיין משתפים את אותו ליבת מערכת ההפעלה.

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

6. רישומי Docker

רישומי Docker הם מקום מרכזי שבו מאוחסנות ומשוקללות תמונות Docker. הרישומי הפופולרי ביותר הוא Docker Hub, המארח מיליוני תמונות זמינות לציבור. ארגונים יכולים גם להקים רישומים פרטיים לאחסון והפצת התמונות שלהם בצורה מאובטחת.

רישומי Docker מספקים מאפיינים מרכזיים מסוימים:

  • גרסאות תמונה: התמונות מקבלות גרסאות באמצעות תגים, מה שהופך את ניהול הגרסאות השונות של אפליקציה לפשוט.

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

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

ריצת קונטיינר של Docker: containerd

פיתוח חשוב וחדש במבנה של Docker הוא השימוש ב-containerd. בעבר, ל-Docker היה מנוע קונטיינרים משלו, אך עכשיו הוא משתמש ב-containerd, מנוע קונטיינרים העומד בסטנדרטים של התעשייה ומשמש גם על ידי פלטפורמות אחרות כמו Kubernetes.

  1. containerd אחראי על

    • התחלה וכיבוי של קונטיינרים

    • ניהול אחסון ורשתות עבור קונטיינרים

    • משיכת תמונות קונטיינר מרישומים

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

כיצד ליצור קונטיינר פשוט באמצעות Docker

משיכת תמונת ה-Linux

התחל על ידי משיכת תמונת ה-alpine מ-Docker Hub. תמונת ה-alpine היא הפצת Linux מינימלית, מיועדת להיות קלה ומהירה.

הפעל את הפקודה הבאה:

docker pull alpine

זה יוריד את תמונת ה-alpine למערכת המקומית שלך.

הפעל את הקונטיינר

צור והפעל קונטיינר באמצעות תמונת ה-alpine. אנו גם נפעיל סשן טרמינל בתוך הקונטיינר.

docker run -it alpine /bin/sh

הנה מה שכל אפשרות אומרת:

  • docker run: יוצר ומפעיל קונטיינר חדש.

  • -it: מאפשר לך לאינטראקט עם הקונטיינר (מצב אינטראקטיבי + טרמינל).

  • alpine: מציין את התמונה שיש להשתמש בה.

  • /bin/sh: מציין את הפקודה שיש להריץ בתוך הקונטיינר (סשן של של פקודת shell במקרה זה).

גלה את התוכן

כאשר הקונטיינר רץ, תראה ערימת מסוף שנראית משהו כזה

/ #

זה מרמז שאתה בתוך הקונטיינר של Alpine Linux. כעת ניתן להריץ פקודות Linux. לדוגמה:

בדוק את תיקיית העבודה הנוכחית:

pwd

רשום רשימת קבצים בתיקייה:

ls

פלט: מבנה תיקייה מינימלי, מכיוון ש-Alpine הוא תמונת מערכת קלה.

ניתן גם להתקין חבילה (Alpine משתמשת ב־apk כמנהל החבילות שלה):

apk add curl

צא מהקונטיינר

כאשר תסיים לחקור, הקלד exit כדי לסגור את ההפעלה ולעצור את הקונטיינר

bashCopy codeexit

גישה לקונטיינר לאחר הפסקה

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

docker ps -a

תראה רשימת קונטיינרים עם המזהים והמצבים שלהם, ואז תוכל להתחיל את הקונטיינר שנעצר:

docker start <container-id>

ניתן להתחבר למסוף הקונטיינר באמצעות הפקודה הזו:

docker exec -it <container-id> /bin/sh

אם אין צורך יותר בקונטיינר, ניתן להסיר אותו

  1. עצור את הקונטיינר (אם הוא עדיין פועל):

     docker stop <container-id>
    
  2. הסר את ה container:

     docker rm <container-id>
    

סיכום פקודות Docker המרכזיות

פקודה תיאור
docker pull alpine מוריד את תמונת ה-Alpine Linux.
docker run -it alpine /bin/sh יוצר ומתחיל container אינטראקטיבי.
docker ps -a מציג את רשימת כל ה-container (רצים ועצורים).
docker start <container-id> מתחיל container שנעצר.
docker exec -it <container-id> מצרף ל-container שפועל.
docker stop <container-id> עוצר container שפועל.
docker rm <container-id> מסיר container שנעצר.

מעט על סיום

עכשיו שיש לך הבנה בסיסית, זמן לשים את הידע שלך לשימוש. התחל לנסות דברים עם Docker, בנה את ה-container הראשון שלך וחקור את האקוסיסטמה הרחב שלו.

בקרוב תראה למה Docker הפך לאבן יסוד ב-DevOps והנדסת תוכנה המודרנית.

תוכל לעקוב אחריי