Skip to content

DevOpscore

קהילת ה-DevOps של ישראל

Menu
  • עמוד הבית
  • קצת עליי
  • מבוא
  • העשרה
  • Virtualization
  • IT
  • Learn from incidents
  • DevOps tools
    • Docker
    • Git
    • Ansible
    • Vagrant
    • Kubernetes
    • OpenShift
Menu

Docker basics

Posted on ינואר 16, 2021מאי 4, 2021 by DevOpscore

כהמשך למאמר על Containerization, היום נדבר על docker.

מה זה docker?

Docker היא פלטפורמה עבור קונטיינריזציה. היא מאפשרת לארוז את האפליקציה עם התלויות שלה ב-container ולהנגיש אותו בצורה נוחה עם פיצ’רים רבים. כך, נוכל להפחית את כמות “הבאגים המייאשים” ולעזור לאפליקציה לרוץ בצורה חלקה בכל סביבה.

איך מתקינים?

מתקינים בעזרת קובץ התקנה עבור windows, וב-linux, ניתן להריץ כמה פקודות שיעשו את זה.

יש תיעוד מלא וברור באינטרנט אז אני מרגיש בנוח לדלג על החלק הזה. כן אגיד שב-windows צריך להיכנס ל windows features ולסמן את Hyper-V ו-Containers.

הסבר על הכוח של container-ים

ראשית, אפשר להסתכל על container כ-process מופרד משאר מערכת ההפעלה ברמת ה-kernel.

אני רוצה להציג בפניכם דוגמא שממחישה את כמות ה-ram המיותרת ש-vm צורך לעומת container.

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

הסבר לגבי התמונה

ראשית,חשוב לדעת שכאשר מקימים VM, חייבים לקבוע מראש את כמות ה-ram שהוא מקבל. נתחיל מהצד השמאלי של התמונה: ל-VM 1 הקצינו 6GB של ram, לשני הקצינו 4GB ולשלישי 6GB. רק חלק מהזיכרון הזה נמצא בשימוש. מתוך סך הזיכרון שהוקצה (16GB) רק 9GB נמצא בשימוש.

למה זה בעייתי?

ישנם 7GB “תפוסים” שלא ניתן להשתמש בהם מחוץ ל-VM – הזיכרון הזה לא יכול להיות מוקצה מחדש דינמית. זה עלול להיות בעייתי ולבזבז כסף רב כיוון שמשאבים זה דבר יקר, במיוחד כשמדובר בכמות גדולה של שרתים.

איך אפשר להימנע מהבעיה הזאת?

כשמשתמשים ב-docker, כל container מקבל בדיוק את אותה כמות ram שהוא זקוק לה. כך אפשר לחסוך משאבים רבים. לאלו מכם שחושבים “מה אם ה-container יזלול את כל ה ram?” התשובה היא שיש אפשרות להגביל את ניצול המשאבים ב-container.

אם בתוך container נבדוק מה מגבלת ניצול ה-ram, לא נקבל את ניצול ה-ram של ה-container, אלא של ה-host os. בלינוקס, הפיתרון הוא בדיקת תוכן הקובץ /sys/fs/cgroup/memory/memory.limit_in_bytes בתוך ה-container.

משהו חשוב שיכול לחסוך לכם זמן יקר הוא ש-container יכול לעקוף את מגבלת ה-ram שרשומה בקובץ הזה. אסביר עם דוגמא, השורה הבאה מריצה container עם מגבלת זיכרון של 50m:

docker run --memory 50m ubuntu:latest

אם בתוך ה-container נריץ תהליך שטוחן את ה-ram, יכול להיות שה-container ישתמש ב-ram גדול יותר מ-50m. איך אוכפים את זה באמת? לפי התיעוד הרשמי באתר של docker, יש להגדיר גם את ה memory-swap כדי שה-container לא יוכל להוסיף לעצמו ram מה-swap memory. כלומר:

docker run --memory 50m --memory-swap 50m ubuntu:latest

memory swap הוא זיכרון וירטואלי שיושב על הדיסק. משתמשים בו כשה-ram נגמר. הוא איטי יותר כיוון שה-ram הוא זיכרון פיזי שאינו דורש קריאה מהדיסק. על כן, זה עלול להאט את ה-container.

היתרונות הבולטים של docker

  • אינטגרציה נוחה עם כלי DevOps אחרים (CI/CD, CM, Monitoring, Testing).
  • אפשר להגדיר קובץ שיכניס לי בקלות את כל התלויות למערכת ההפעלה שעליה מבוסס ה-container.

מה יש ב-docker שמנהל container-ים ועוד?

Docker engine

זה בעצם מה שאנחנו מתקינים כדי לגרום ל-docker לעבוד, והוא עובד בתצורת client server application:

  • יש רכיב שישמש כשרת. קוראים לו docker daemon, זה process
  • cli – דרכו נוכל להריץ פקודות ב-command line ולנהל מגוון של דברים. זה הלקוח
  • REST API כדי לאפשר את התקשורת בין שניהם.

ב-Windows או MacOS, כשמתקינים docker, יש Toolbox נוסף שמקבלים. הוא מאפשר להתקין כמה תוכנות נוספות מובנות שב-Linux היו צריכות להיות מותקנות בנפרד (לדוגמא docker-compose):

שני מושגי בסיס חשובים:

Docker image – טמפלייט שממנו אפשר ליצור container-ים.

Container – זה בעצם instance רץ של docker image.

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

!Join us on telegram

כתיבת תגובה לבטל

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

Comment moderation is enabled. Your comment may take some time to appear.

פוסטים אחרונים

  • Deploy static websites with GitLab Pages
  • The DevOps Role – Part 2
  • The DevOps Role – Part 1
  • How to run an application on Openshift
  • ?What is Agile

קטגוריות

  • DevOps tools
    • Ansible
    • Docker
    • git
    • Kubernetes
    • OpenShift
    • Vagrant
  • IT
  • Learn from incidents
  • Virtualization
  • העשרה
  • מבוא
English Hebrew
© 2025 DevOpscore | Powered by Minimalist Blog WordPress Theme