דוקר (באנגלית: Docker) היא תוכנה בקוד פתוח המאפשרת התקנה והרצה של יישומים בתוך סביבה וירטואלית מבודדת הנקראת קונטיינר (מכולה). כל קונטיינר כולל תוכנות, ספריות וקובצי קונפיגורציה משלו. באופן זה, ניתן להריץ יישומים בצורה מבודדת וכך למנוע מהם ״להפריע״ לריצה של יישומים אחרים, וליהנות מסביבה מותאמת ואופטימלית לכל יישום.[1]
אופן השימוש בקונטיינרים דומה במובן מסוים למכונה וירטואלית (VM), אך מאחר שכלל הקונטיינרים חולקים ליבה אחת, שימוש בהם גוזל מעט משאבים ביחס למכונות וירטואליות.[2] הקונטיינרים הם יחסית קלי משקל, כאשר מספר קונטיינרים יכולים לרוץ על מחשב אחד בו-זמנית, ואף לתקשר אחד עם השני.
המערכת פותחה על ידי חברת Docker, Inc. בתחילה התמקדה בפיתוח עבור לינוקס, ובשל כך המערכת משתמשת בתכונות מסוימות של ליבת לינוקס כמו cgroups, ו-Kernel Namespaces, וכן במערכת טעינת קבצים (Union Capable) כגון OverlayFS ואחרים.[3][4] ניתן להשתמש ביכולות הליבה, למשל, על מנת לנטר את פעילות הקונטיינרים.
מאז גרסה 0.9, המערכת כוללת את הספרייהlibcontainer המאפשרת להשתמש ישירות ביכולות הליבה של לינוקס, וזאת בנוסף לשימוש בממשקים מופשטים באמצעות libvirt, LXC ו-systemd-nspawn.
החברה Docker Inc נוסדה על ידי כאמל פונאדי, סולומון הייקס וסבסטיאן פאהל בשנת 2010, לאחר שהייקס החל לתכנן את הפרויקט בצרפת כפרויקט פנימי בחברת dotCloud. המערכת הוצגה לציבור לראשונה בכנס מפתחי פייתון – PyCon בשנת 2013. היא שוחררה כתוכנת קוד פתוח במרץ 2013. בתקופה זו, השתמשה דוקר ב-LXC בתור סביבת הביצוע שלה כברירת מחדל. כשנה לאחר מכן, עם שחרור גרסה 0.9 של דוקר, הוחלפה LXC ב-libcontainer.
בסוף שנת 2014, דוקר הודיעה על שותפות עם Stratoscale, ומעט לאחר מכן אף IBM הודיעה על שותפות אסטרטגית עם דוקר ועל כך שניתן להשתמש בתוכנה עם שירותי הענן של IBM. בינואר 2017 בעת ניתוח של מאפייני פרופילים ב-LinkedIn, נמצא כי נוכחות Docker גדלה ב-160% מאז 2016.
עד לשנת 2017, התוכנה הורדה יותר מ-13 מיליארד פעמים.
בשנת 2017, יצרה דוקר את "מדריך מובי" למחקר ופיתוח פתוחים.[5]
אופן פעולה
היכולת העיקרית של דוקר היא אריזה בתוך קונטיינר של אפליקציה יחד עם החבילות, התוכנות והספריות בהן היא תלויה לפעולתה התקינה (Dependencies). המערכת מספקת API המאפשר לקונטיינרים לנהל תהליכים בסביבה מבודדת מהסביבה בה מערכת ההפעלה פועלת. באמצעות שימוש בקונטיינרים ניתן לפשט יצירה של מערכות מבוזרות ולתת למשתמש אפשרות עבודה עם יישומים, משימות ותהליכים מרובים, ולנהל את כל סביבת העבודה באופן עצמאי על מכונה פיזית אחת או על פני מספר רב של מכונות וירטואליות.
הקונטיינר מיועד לרוץ על כל מערכת לינוקס, ווינדוס או מק, בין אם על ענן, ובין אם על מחשב מקומי (On-premises).
מאחר שהקונטיינרים בדוקר הם קלי-משקל, שרת אחד או מכונה וירטואלית אחת מסוגלים להריץ מספר קונטיינרים באופן סימולטני. ניתוח משנת 2018 גילה ששימוש טיפוסי בדוקר כולל שמונה קונטיינרים לכל מארח, וכן שרבע מהארגונים שנבדקו במסגרת הניתוח מריצים למעלה מ-18 קונטיינרים לכל מארח.
דוקר מאפשרת בקלות יחסית לכתוב קוד כלשהו ולהריץ אותו בכל סביבה תכנותית או מערכת-הפעלה בה המשתמש נמצא. זאת ועוד, דוקר מאפשרת למערכת מחשוב שלמה לרוץ על אותה סביבה, גם אם תוכנה מסוימת דורשת מערכת הפעלה ייחודית ושונה, חיבורים לשרתים שונים וכדומה. כלומר, כאשר מעוניינים לעבוד יחד על פרויקט או להריץ תוכנה מסוימת בסביבות שונות, דוקר חוסכת לכל המשתמשים בדיקות והתאמות כמו גרסה של מסד-נתונים או גרסה של שירות רשת כלשהו (שיתוף קבצים לדוגמה), ומאפשרת לאכוף את אותה סביבת עבודה לכל המפתחים בקלות.
יתרון נוסף של דוקר על מכונות וירטואליות הוא שזמן הטעינה של קונטיינר קצר ביותר (מספר שניות), בעוד שטעינה של מכונה וירטואלית היא איטית. בנוסף, ניתן להגדיר קונטיינר יחסית בקלות באמצעות קובץ הגדרות.
ב-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 שניתן להוריד אותם ולהשתמש בהם):
דוקר-סוורם (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>