מיכלים היו מילת באזז כבר שנים... אבל מה הם בדיוק?
קונטיינרים הם שיטה להפעלת יישומים וירטואליים במחשב שלך, בדומה למכונות וירטואליות, אך תוך שימוש בסט שונה של טכנולוגיות בסיסיות. הם יכולים להיות מורכבים להבנה, אבל הם חיוניים לניהול הכל מיינקראפט שרתים לגוגל. ואנחנו הולכים להראות לך איך להגדיר אותם.
אנו נשתמש בלינוקס, מערכת הפעלה שנבנתה תוך התמקדות בניידות, מודולריות ויציבות. לינוקס נמצאת בכל דבר, החל משרתים ועד מיקרוגלים ועד קונסולות משחקי וידאו. קונטיינרים אינם מוגבלים להפעלה על לינוקס, אך הטכנולוגיות שמאחוריהם מתאימות ביותר ופועלות בצורה הטובה ביותר על לינוקס. אם אתה חדש בלינוקס, אנו ממליצים שתבדוק את שלנו מדריך למתחיל לפני הצלילה פנימה.
האם קונטיינרים הם מכונות וירטואליות?
קונטיינרים יכולים להיות נושא מורכב, אבל עדיף להתחיל מנקודת מפתח אחת: קונטיינר הוא לֹא מכונה וירטואלית. מכונה וירטואלית היא גרסה מדומה של חומרה ספציפית והתוכנה שלה הפועלת במה שמכונה היפרוויזר. אם אי פעם השתמשת בתוכנה כמו VirtualBox או multipass, אז השתמשת ב-hypervisor.
ההיפרוויזר פועל בדרך כלל כמערכת הפעלה משלו (המכונה היפרוויזר מסוג 1) או בגבולות מערכת הפעלה אחרת כמו Windows או אובונטו (היפרוויזר מסוג 2). האחריות של ה-Hypervisor היא להציג למערכת ההפעלה האורחת את החומרה המדומה שהיא דורשת כדי להפעיל. מערכת ההפעלה המלאה יכולה לפעול על גבי. זה כולל הכל, החל מ-CPU ו-RAM מדומים ועד לאוטובוסי נתונים, כונני דיסקים או מתאמי רשת. סימולציה זו יקרה מבחינה חישובית, כך שלמכונות וירטואליות יש בדרך כלל תקורה משמעותית.
אז מה זה מיכל?
קונטיינר דומה למכונה וירטואלית בכך שהוא מכיל ומריץ תוכנה בסביבה מבודדת במערכת מארחת. עם זאת, קונטיינרים מחליפים את הוירטואליזציה המסורתית של החומרה על ידי הסתמכות ישירה על מערכת ההפעלה המארחת. קונטיינרים חולקים את הספריות והבינאריות של מערכת ההפעלה המארחת ויש להם רק את המשאבים והתלות הדרושים להפעלת האפליקציה הספציפית שהם מכילים. זה אומר שאין צורך במערכת הפעלה מלאה לכל קונטיינר, שכן כל הקונטיינרים פועלים על a המערכת יכולה לשתף את מערכת ההפעלה המארח היחידה תוך שמירה על ההפרדה שאתה מקבל עם וירטואלי מכונות.
קונטיינרים ניגשים למערכת ההפעלה המארחת באמצעות acontainer engine, אשר מנהל קונטיינרים פועלים ושולט בגישה שלהם למערכת ההפעלה הבסיסית. זה עשוי לכלול אכיפת אבטחה בין קונטיינרים ומתן או מניעת גישה לקבצי מערכת ההפעלה או לחיבורי רשת.
מהן היתרונות של שימוש בקונטיינרים?
בעוד שמכונות וירטואליות ומכולות דומות, לשימוש בקונטיינרים יש חסרונות. ראשית, מכונות וירטואליות נחשבות לאבטחות יותר, שכן משטח ההתקפה כדי "לברוח" מהמכונה הוירטואלית קטן משמעותית וקשה יותר לחדור אליו. יכול להיות שמיכל אינו מתאים לבדיקת תוכנות זדוניות, למשל.
היתרון העיקרי בשימוש בקונטיינרים הוא שהם קלים, הימנעות מהצורך לבצע וירטואליזציה של מערכת הפעלה שלמה פירושה זמני הפעלה מינימליים ותקורה מופחתת של המערכת. המשמעות היא שהרבה יותר קונטיינרים יכולים לפעול על מארח אחד, מה שלא יהיה אפשרי עם מכונות וירטואליות.
מכיוון שמכולות אינן דורשות מערכת הפעלה מלאה, ניתן לארוז אותן בקלות לתמונות קטנות יותר ולהפיץ אותן. בעוד שתמונת מכונה וירטואלית מלאה עשויה להיות בקלות עשרות גיגה-בייט, קונטיינרים יכולים להגיע בתמונות קטנות עד 15Kb. זה מקל מאוד על הפצה ושימוש במיכלים. נדגים זאת על ידי הפעלת כמה קונטיינרים לדוגמה פשוטים ב-Docker.
התקנת Docker
זו הרבה תיאוריה, אז בואו נהיה מעשיים. כדי להראות לך כיצד להגדיר קונטיינר, נתקין את Docker באובונטו 23.10 ונשתמש בו כדי להפעיל קונטיינר פשוט של Hello World. הצעדים שלנו נבדקים על מחשב וירטואלי, אבל אתה יכול גם לאתחל כפול ממחשב Windows שלך או להשתמש ב- מחשב נייד נהדר עבור לינוקס.
Docker הפך במהירות לכלי המכולות בפועל. בעוד שכלים אחרים קיימים, Docker מאומצת באופן נרחב והוא מושלם עבור כל היישומים פרט ליישומים התובעניים ביותר. יש תיעוד על הדרכים השונות להתקנת Docker, אבל נשתמש בסקריפט ההתקנה הנוחות. פקודה זו תוריד סקריפט מget.docker.com למחשב המקומי שלך:
$ curl -fsSL https://get.docker.com -o get-docker.sh
לאחר מכן תוכל להפעיל את הסקריפט הזה כדי להתקין את Docker. אתה יכול לוודא ש-Docker מותקן כהלכה על ידי בדיקת הגרסה עם:
$ sudo sh ./get-docker.sh
ואחריו בדיקת גרסה עם:
$ sudo docker version
אתה יכול גם לוודא ששירות הדוקר פועל ברקע עם:
$ sudo systemctl status docker
זה אמור לציין 'פעיל (פועל)' בטקסט ירוק, כפי שמודגש בצילום המסך למטה. יש להדפיס גם את הגרסה של מנוע Docker ללא שגיאה.
הצגת דוגמה פשוטה
כעת כאשר Docker מותקן, אתה יכול להשתמש בו כדי להוריד תמונת מיכל. תמונות מיכל דומות מאוד ל-ISO עבור מכונות וירטואליות, אלא שהן בדרך כלל קטנות יותר וקל יותר לבנות. הורד תמונת מיכל פשוטה של שלום עולם עם הפקודה הבאה:
$ sudo docker pull hello-world
לאחר הורדת התמונה, אתה יכול לאמת על ידי רישום התמונות שהורדת במערכת שלך באמצעות הפעולות הבאות:
$ sudo docker images
כעת אתה אמור לראות את hello-world הורדת. שימו לב לגודל הקטן מאוד (13Kb במכונת הבדיקה שלנו), כמו גם לתג שלו. התג של תמונה הוא למעשה הגרסה שלה. כברירת מחדל, Docker יוריד את הגרסה האחרונה של תמונה. הפעל מיכל המבוסס על תמונה זו באמצעות:
$ sudo docker run hello-world: latest
זה יוציא את ה-hello-world spiel של Dockers, שפועל מתוכנית C קטנה מאוד (שניתן לבדוק בה GitHub).
מזל טוב; הפעלת את המיכל הראשון שלך! במקרה זה, התוכנית הפיקה את התוצאה שלה וסיימה את ביצועה. המכולה כעת מתה ואינה פועלת יותר.
איך לשמור על מכולות בחיים
לאחר שהרצנו קונטיינר בסיסי, נוכל כעת לבנות דוגמה מורכבת יותר שאינה יוצאת מיד לאחר השלמת משימה. קונטיינרים בנויים לרוב סביב תהליך בודד, שעשוי להוליד תהליכים נוספים. ברגע שתהליך הבסיס הזה יצא, כל המיכל ייצא איתו. זה אולי נשמע כמו מגבלה, אבל זה למעשה דומה מאוד לאופן שבו מערכות init בפונקציית ליבת לינוקס המלאה.
כדי להריץ דוגמה מתמשכת, אנחנו יכולים למשוך תמונה עבור Nginx, שהוא שרת אינטרנט המשמש לארח אחוז ניכר מאתרי האינטרנט בעולם. בחרנו ב-Nginx עבור הדוגמה הזו מכיוון שהוא פשוט, אינו דורש תצורה מתקדמת, והוא קל משקל. הורד את תמונת Nginx העדכנית ביותר עם הפקודה הבאה:
$ sudo docker pull nginx
הוספנו את -עמ' סמן כאן כדי להגדיר העברת פורטים מהמכולה למערכת ההפעלה המארחת. יציאה 80 משמשת לתעבורת HTTP לא מוצפנת (כלומר אינטרנט). זה יאפשר לך לגשת למיכל מהמחשב המארח שלך:
$ sudo docker run -p 80:80 nginx
הפקודה הזו תפעל בטרמינל שלך במצב מחובר, כלומר הקונטיינר מחובר ממש למסוף שלך, כך שכל היומנים מהמכל יודפסו שם. לאחר שהמכל התחיל לפעול, פתח http://localhost בדפדפן האינטרנט שלך. תראה מסך פתיחה של Nginx דומה להלן:
מיכל ה-Nginx פועל כעת בתוך מנוע המכולה שלך. בעוד Nginx פועל במצב מצורף, הוא ימשיך לפעול רק כל עוד הוא פתוח. אתה יכול לצאת ממיכל Nginx על ידי לחיצה Ctrl + C בטרמינל שלך.
כיצד להפעיל קונטיינרים ברקע
כדי להפעיל את Nginx ברקע, נוסיף דגל נוסף, -ד, למצב מנותק. זה יתחיל את המכולה במנותק מהמסוף שלך, כלומר הוא ברקע. לדוגמה:
$ sudo docker run -d -p 80:80 nginx
אתה יכול לרשום קונטיינרים פועלים במערכת. שימו לב כיצד מיכל ה-Nginx שלכם פועל כעת ברקע והוקצו לו מזהה.
$ sudo docker ps
ניתן להרוג מיכל רקע פועל באמצעות המזהה שלו. ייתכן שתבחין גם שהמיכל קיבל שם. כאשר אחד לא מצוין, Docker ייתן לכל מיכל שם אקראי וייחודי.
$ sudo docker kill
עם זאת, אתה יכול לבדוק את זה עם כמה תמונות מעניינות יותר. יש הרבה זמינים ב- רכזת דוקר, שמתפקד כמאגר מרכזי לתמונות מיכל ציבוריות.
צלילה עמוקה יותר עם מיכלים
זה היה הקדמה קצרה למכולות. קונטיינרים יכולים להיות מורכבים ללא גבול, אבל הם אבן היסוד של המערכות המבוזרות ביותר שמריצות חלק גדול מהאינטרנט המודרני שלנו. הכוח הזה לא מוריד מהשימוש בהם בקנה מידה קטן יותר. היכרות עם היסודות של קונטיינרים ו-Docker יכולה להיות השער להפעלת שירותים מקומיים שימושיים כמו שרת מיינקראפט או Plex במחשב ישן.