Docker

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

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

התוכנה מהווה פלטפורמה כשירות (PaaS), והיא משתמשת ב. זאת, בניגוד למכונה וירטואלית. המערכת תומכת בריצה על גבי Windows, macOS ולינוקס.

המערכת פותחה על ידי חברת Docker, Inc. בתחילה התמקדה בפיתוח עבור לינוקס, ובשל כך המערכת משתמשת בתכונות מסוימות של ליבת לינוקס כמו cgroups, ו-Kernel Namespaces, וכן במערכת טעינת קבצים (Union Capable) כגון OverlayFS ואחרים. ניתן להשתמש ביכולות הליבה, למשל, על מנת לנטר את פעילות הקונטיינרים.

מאז גרסה 0.9, המערכת כוללת את הספרייה libcontainer המאפשרת להשתמש ישירות ביכולות הליבה של לינוקס, וזאת בנוסף לשימוש בממשקים מופשטים באמצעות libvirt, LXC ו-systemd-nspawn.

ארגונים מרכזיים שתרמו בשנת 2016 לפרויקט Docker הם מיקרוסופט, IBM, גוגל, סיסקו, וואווי, ו-Red Hat.

היסטוריה 
החברה Docker Inc נוסדה על ידי כאמל פונאדי, סולומון הייקס וסבסטיאן פאהל בשנת 2010, לאחר שהייקס החל לתכנן את הפרויקט בצרפת כפרויקט פנימי בחברת dotCloud. המערכת הוצגה לציבור לראשונה בכנס מפתחי פייתון – PyCon בשנת 2013. היא שוחררה כתוכנת קוד פתוח במרץ 2013. בתקופה זו, השתמשה דוקר ב-LXC בתור סביבת הביצוע שלה כברירת מחדל. כשנה לאחר מכן, עם שחרור גרסה 0.9 של דוקר, הוחלפה LXC ב-libcontainer.

ב-19 בספטמבר 2013, Red Hat ודוקר הודיעו על שיתוף פעולה סביב פדורה, Red Hat Enterprise Linux, OpenShift.

בסוף שנת 2014, דוקר הודיעה על שותפות עם Stratoscale, ומעט לאחר מכן אף IBM הודיעה על שותפות אסטרטגית עם דוקר ועל כך שניתן להשתמש בתוכנה עם שירותי הענן של IBM. בינואר 2017 בעת ניתוח של מאפייני פרופילים ב-LinkedIn, נמצא כי נוכחות Docker גדלה ב-160% מאז 2016.

עד לשנת 2017, התוכנה הורדה יותר מ-13 מיליארד פעמים.

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

ביצוע 

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

הקונטיינר מיועד לרוץ על כל מערכת לינוקס, ווינדוס או מק, בין אם על ענן, ובין אם על מחשב מקומי (On-premises).

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

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

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

שילוב עם תשתיות שונות 
דוקר יכולה להשתלב עם תשתיות פופולריות רבות, בהן Amazon Web Services, Ansible, CFEngin, Google Cloud Platform, IBM Bluemix, HPE, Stackato, Jelastic, Jenkins, Kubernetes, Microsoft Azure, OpenStack נובה, OpenSVC, Oracle ועוד.

ב-15 באוקטובר 2014, הודיעה מיקרוסופט על מנוע הדוקר עם המהדורה הבאה של Windows Server, ועל תמיכה מקומית של מערכות שרת-לקוח של Windows בדוקר.

רכיבים 
דוקר מורכבת משלושה חלקים:
 תוכנה: תוכנת ה-Daemon (תוכנית שרצה כתהליך רקע) של דוקר נקראת "dockerd" והיא אחראית על הליך יצירת הקונטיינרים והאובייקטים הקיימים בהם. התוכנה מאזינה לבקשות שנשלחות דרך מנוע ה-API של דוקר. ניתן להשתמש בממשק שורת הפקודה (CLI) על מנת ליצור אינטראקציה עם התוכנה.
 אובייקטים: אובייקטים בדוקר הם ישויות שונות המשמשות להרכבת האפליקציה. שלוש הישויות העיקריות הן Images, קונטיינרים, ו-Services. על גבי ה-Image ניתן לבנות את הקונטיינרים והם מהווים למעשה קובץ ההוראות הנדרשות לבנות את הקונטיינר (כמעין תבנית). Service נועד לאפשר לקונטיינרים לגדול בין תוכנות Deamon שונות.
 רישומים (Registries): מיקומים בהם נמצאים Images שונים. המרכזי שבהם הוא dockerhub, בו ניתן ליצור ולשתף Images בקלות.

כלים 
 דוקר-קומפוז (docker-compose) הוא כלי הנועד להגדיר ולהריץ אפליקציות המשתמשות בכמה קונטיינרים (Multi-container). הכלי נכתב בפורמט YAML (פורמט נוח לקריאה המשמש לקובצי קונפיגורציה). ניתן להשתמש בשורת הפקודה של דוקר-קומפוז על מנת להריץ פקודות על מספר קונטיינרים בו זמנית – למשל, בניית Images, הרצת קונטיינרים שנעצרו, ועוד. דוגמה לקובץ docker-compose.yml בסיסי, המגדיר שני שירותים, web, ו-redis. שירות ה-web משתמש ב-Image הנמצאת בתיקיה הנוכחית. שירות redis משמש למשיכת Image מהרישום הציבורי של דוקר – דוקרהאב (בו קיימים קובצי Image שניתן להוריד אותם ולהשתמש בהם):
version: "3.9"
services:
  web:
    build: .
    ports:
      - "8000:5000"
  redis:
    image: "redis:alpine"
 דוקר-סוורם (docker-swarm) הוא כלי לניהול ופריסה של קונטיינרים. הכלי מאפשר למשתמש לנהל מספר קונטיינרים המופעלים על גבי כמה מערכות יחדיו. אחד היתרונות המרכזיים של הכלי הוא רמת זמינות גבוהה לאפליקציות.

פקודות בסיסיות 
על מנת להעלות קונטיינר, יש להשתמש בפקודה docker run -it -d <container-name>

על מנת להריץ פקודה בקונטיינר, למשל, הדפסת 'hello', יש להשתמש בפקודה docker exec -it <container_id_or_name> echo "hello"

על מנת לראות את רשימת הקונטיינרים הקיימים, יש להשתמש בפקודה docker ps -a

על מנת להוריד קובץ Image, יש להשתמש בפקודה docker pull <dockerimage>

ראו גם
 DevOps
 וירטואליזציה ברמת מערכת ההפעלה

קישורים חיצוניים 

 

 מה הוא מיכל Docker – מבוא

הערות שוליים

תוכנות שהושקו ב-2013
תוכנה חופשית
מערכת הפעלה
וירטואליזציה