אם אתה מחפש מידע על איך להתקין את Docker על Ubuntu, אתה במקום הנכון. לא רק זה, אלא כבונוס, המדר הזה ילמד אותך גם איך להריץ את הפקודות הבסיסיות של Docker כדי להריץ ולנהל תפקידים.
באמצעות יכולות הכלים הנוחות של Visual Studio (VS) Code, תלמד גם כיצד לשדרג את המיומנויות שלך ב-SSH. בואו נתחיל!
קשור: גבר מחלון בעולם של Linux: VS Code ו-SSH רחוק
דרישות מוקדמות
אם ברצונך להמשיך צעד אחר צעד, וודא שיש לך את התקנים הבאים במדר הזה:
- A fresh install of Ubuntu Server LTS with SSH Enabled (This guide will be using Ubuntu Server LTS 20.04.1)
- A Windows Machine with VSCode installed (This guide will be using Visual Studio Code 1.52.1)
- התוסף הרשמי של VSCode ל-SSH מותקן ומחובר להתקנת השרת שלך של Ubuntu
התקנת Docker על Ubuntu
בואו נתחיל ראשית בהתקנת Docker על Ubuntu. בנקודה זו, המדר מניח שאתה נמצא על מחשב Windows מקומי שלך עם VS Code פתוח ומחובר לשרת Ubuntu שלך דרך SSH. למד כיצד להגדיר את סביבת העבודה השימושית הזו במאמר האחרון על שימוש ב-VS Code ו-SSHכאן.
בדוגמה למטה, VSCode מחובר באופן רחוק ל-Ubuntu עם תיקיית home (במקרה זה, /home/homelab) נפתחת כמרחב עבודה:

תהליך ההתקנה הממשי של Docker בשרת Ubuntu כבר רק שני פקודות רחוק. Ubuntu מאפשרת להתקין את Docker דרך מנהל החבילות המוגדר כברירת מחדל שמגיע עם Ubuntu ומכונה apt
.
בחלון תרמינל SSH של VS Code, הפעל את שתי הפקודות הבאות כדי להתקין את Docker:
במהלך ההתקנה של שרת Ubuntu, יכול להיות שקיבלת את האפשרות להתקין את Docker כחבילת snap. אם כן, הסר תחילה את חבילת ה-snap על ידי הרצת
sudo snap remove docker
ניתן לצפות בהתקנת Docker באנימציה הבאה:

Ubuntu דואגת מספיק טוב כדי להפעיל ולהגדיר את השירות להתחיל בהפעלה אוטומטית עבורך, כך שאתה מוכן להתחיל להשתמש ב-Docker!
יצירת והפעלת תוכן Docker ב-Ubuntu
עכשיו שיש לך את Docker מותקן, מה ניתן לעשות איתו? בואו נתחיל ביצירת תוכן Docker. המדריך הזה יקבע שרת אינטרנט סטטי כדוגמת תוכן Docker טובה. בסעיף זה, תבצע את הפעולות הבאות:
- הגדרת תוכן חדש מתוך כתובת Docker Hub להפעלת שירות HTTP
- שימוש במיפוי פורטים כדי למפות את פורט ה-HTTP בתוך התוכן לשרת ה-Ubuntu שלך
- הגדרת התקנות קריאות כדי למפות נתונים חשובים מתוך התוכן לשרת ה-Ubuntu שלך
- הגדר התמיכה בהתמידות דרך הפעלות מחדש עבור המיכל שלך
אם כל אחד מהשלבים למעלה נשמע מבלבל, אל תדאג, נכסה כל שלב בנפרד כדי לעזור לך להבין את התהליך.
הורדת דוקר
השאלה הראשונה שעליך לשאול היא, מאיפה יגיע המיכל הזה? בוא נסתכל על Docker Hub.
A large part of Docker is understanding image repositories. Rather than being distributed like packages, services in Docker get distributed as Docker Images.
A Docker Image is a snapshot of the software that the publisher wants to distribute and the entire filing system! This is analogous to creating .wim image of Windows.
תפיסת מערכת זו הופכת את Docker לכל כך פופולרי: התוכנה נתפסת יחד עם סביבת ההפעלה המלאה. בכך ניתן להסיר את הבעיות הנובעות מההבחנות בין סביבות השרתים השונות.
אחד ממאגרי התמונות הפופולריים ביותר (והברירת מחדל) הוא Docker Hub, נקרא גם מאגר התמונות הרשמי של Docker. מאגר התמונות הוא המקום בו תוכל להוריד אלפי תמונות שנוצרו מראש של Docker להפעלה כמיכלים.
מכיוון שהמדר הזה מגדיר מכון ווב סטטי, עליך להוריד תמונת מכון ווב. שני המכונים הפופולריים ביותר שם הם Apache httpd ו־Nginx אך כדי לשנות את הדברים קצת ואולי להציע לך מכונה חדשה, בוא נשתמש ב־Caddy.
Caddy הוא שרת אינטרנט ידוע בפשטות שלו. ניתן להפעיל הרבה הגדרות שרת תקינות באמצעות שורה אחת בקובץ. פשוט זה טוב וגם יוצר דוגמה בסיסית טובה.
- ראשית, תצטרך למצוא את תמונת ה-Docker. במחשב ה-Windows שלך, נווט אל https://hub.docker.com.
- בצד שמאל למעלה של העמוד, בצע חיפוש עבור caddy. עליך לראות עמוד דומה למה שלמטה:

A benefit (and downside) of Docker Hub is that anyone, even you, can create and upload Docker Images to the site.
עליך להיות זהיר כדי לוודא שהתמונה שבחרת מגיעה ממקור אמין. כל אחד יכול לשים תוכנית זדונית בתמונה אם הוא רוצה ולהעלות את הגרסה שלו ל־Docker Hub.
3. שים לב לשם התמונה. בתמונת המסך למעלה, השם הוא caddy בדיוק. תצטרך את השם הזה כדי לציין את שם התמונה בשלבים הבאים.
הרצת תוכן עם Docker על Ubuntu
כשיש לך את שם התמונה שברצונך להוריד, זמן להוריד אותה וליצור תוכן ממנה.
להתחלת תוכן מתמונה דורשת פקודה יחידה. בטרמינל SSH המחובר לשרת Ubuntu שלך, הפעל את הפקודה הבאה docker run
.
הפקודה למטה בודקת אם יש את תמונת ה־caddy במחשב המקומי. אם אינה קיימת, היא מורידה את התמונה מ־Docker Hub, יוצרת תוכן ומפעילה אותו. הפקודה למעלה משתמשת במפתח -p
כדי למפות את פתח ההאזנה של שרת Ubuntu לפורט 80 של התוכן. המאפיין הזה נקרא מיפוי פורטים.
רוב תמונות Docker Hub עוקבות אחר תבנית של <משתמש>/<שם התמונה>. עם זאת, תמונות שמסומנות כ "רשמיות" על ידי Docker אינן מכילות <משתמש> מול פניהן (כמו במקרה של caddy למעלה).

עשוי להיות רואים כי רוב פקודות ה-Docker מתחילות עם
sudo
, כדי לאלץ את הפקודות להפעיל כמנהל מערכת. כברירת מחדל, שירות ה-Docker פועל כ-root
, וכל השינויים שתעשו בקונטיינרים או בדמויות צריכים להתבצע כמנהל.
והנך מוכן ורץ! זהו כל מה שיש לזה. האם אתה שמח שהתקנת Docker על Ubuntu?
עכשיו נווט ל־http://<your-ip> ממחשב ה-Windows שלך ואתה אמור לראות דף נחיתה של Caddy. תוכל לראות את זה למטה (כתובת ה-IP של מדריך זה הוחלפה ב־http://homelab-docker):

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

ניהול קונטיינרים ברקע עם פקודות דוקר
כאשר יש לך קונטיינרים ברקע אחד או יותר רצים, תצטרך לנהל אותם בכל צורה שהיא. דוקר מספק לך מספר פקודות שונות לעשות זאת באמצעות פקודות docker container
.
sudo docker container list -a
: מציג את כל הקונטיינרים (גם רצים וגם עצורים) ואת מצבםsudo docker container stop <name>
: עצר קונטיינר של דוקר לפי השם שלהם (או לפי המזהה שלהם)sudo docker container start <name>
: התחל קונטיינר של דוקר לפי השם שלהם (או לפי המזהה שלהם)sudo docker container prune
: השמד והסר את כל הקונטיינרים שעצרו
תוכל לראות את כל הפקודות הנ"ל בהקשר בצילום המסך למטה:

ישנן הרבה פקודות נוספות של קונטיינרי דוקר להצגה, שינוי, בדיקה, או אפילו התחברות מרחוק לקונטיינרים על השרת שלך. תוכל לראות את כולן על ידי הרצת
sudo docker container --help
.
אף על פי שעכשיו הפקת את שרת האינטרנט בקונטיינר שרץ ברקע, עדיין לא יש לך דרך לארח את התוכן המותאם אישית שלך. במצב הנוכחי, Caddy פשוט מכין את עמוד האינטרנט הברירתי.
בואו נסתכל כיצד ניתן להשתמש בדוקר עם יישומון בשם bind mounts כדי להפעיל תכני נתונים משמעותיים.
אחסון נתוני הקונטיינר עם Bind Mounts
דוקר פועל על העקרון של תמונות (והקונטיינרים שהן יוצרות) כזרים או חולפים. אם יש עדכון לתוכנה של Caddy, אין לעדכן את השירות, אלא לזרוק לפח כל התמונה יחד עם האמבטיה ולהשתמש בתמונה חדשה לגמרי.
היתרונות של השלכת ויצירת קונטיינרים כמו זו הם משמעותיים. אי-יציבויות בתוכנה נכנסות בזמן על ידי עדכונים קבועים של תוכנה (אולי) שנים. על ידי שימוש בתמונה חדשה בכל פעם, דוקר מספק לך בסיס יציב, אמין (לדעתנו) נבדק בכל עדכון.
המושג הזה שקול לשימוש בהתקנה חדשה של Windows בכל עדכון של תוכנת האפליקציה שלך ב-Windows. לא רעיון כיף ב-Windows, אך יישם בצורה יישומית מאוד בדוקר.
המתודולוגיה של הזרוק יש לה בעיה ברורה. אתה לא רוצה שנתונים חיוניים ייזרקו כשהשירות הנוכחי שלך נשפץ. דוקר פותרת את הבעיה הזו באמצעות יישום בשם bind mounts.
בואו נבדוק כיצד ליצור bind mount עבור קונטיינר.
יצירת מבנה התיקיות וניקוי
לפני שתוכל להשתמש ב-bind mounts, יש ליצור מקום לאחסון נתונים אלו. במדריך זה ניצור תיקייה בתיקיית הבית שלך. כדי לעשות זאת ב-VS Code תוך עדיין מחובר לשרת Ubuntu שלך:
- לחץ על הכפתור הימני באזור ריק של לוח הExplorer ב־VS Code ובחר תיקייה חדשה.
2. תן שם לתיקייה החדשה containers/caddy/files.
שמות התיקיות תבחרו בעצמכם כל עוד הם מוגדרים נכון בפקודת ה־docker הבאה. על ידי שימוש בקו פשוט, VS Code יפענח זאת כיצירת שלוש תיקיות. התיקייה files היא תת־תיקייה של caddy, ו־caddy היא תת־תיקייה של containers. אין חובה להשתמש במבנה הזה של התיקיות, אך המבנה הזה מתאים יותר כאשר יש לך מספר תפקידים על אותו השרת.
אם לא עשית זאת קודם, עצור והסר את כל הקונטיינרים שיצרת בעבר באמצעות הפקודות הבאות:
אפשר לראות את הפקודה הזו בצילום המסך למטה:

פרסום קונטיינר Caddy עם Bind Mounts
כעת יש לך את מבנה התיקיות שנבנה על השרת של Ubuntu. הגיע הזמן ליצור קונטיינר Caddy עם bind mounts.
- לפני שתתקדם רחוק יותר, ראשית עליך לגלות איפה הקונטיינר שאתה עובד עליו אוחסן מידע עמיד בזמן. המיקום הזה יהיה שונה בהתאם למי יצר את הדוקר ולמה הוא משמש.
האפשרות הטובה ביותר שלך למצוא איפה הנתונים התמיכים מאוחסנים היא לבדוק את התיעוד ב-Docker Hub עבור התמונה הרצויה. במקרה של Caddy, תוכל למצוא את התיעוד כאן: כאן:

2. התחל את התכולה באמצעות הפקודה הבאה. הפרמטר -v ~/containers/caddy/files:/usr/share/caddy
מטמיע את הנתיב לפני הנקודה הפולנית (~/containers/caddy/files) לתיקייה בתוך התכולה (/usr/share/caddy). זה פועל באופן דומה ביותר לפקודת המיפוי של הפורט: רק שאתה ממפה תיקייה במקום פורט. סוג זה של פקודה נקרא Bind Mount.
הגרשיים (
~
) בקוד לעיל מתייחסים לתיקיית הבית. במאמר זה, זה שקול ל-/home/homelab
.
3. פתח דפדפן ונווט חזרה לכתובת ה-HTTP של השרת שלך. תיתן לך לשים לב שהשרת מכין עכשיו דף 404
. זה צפוי מכיוון שכרגע אין לך קובץ index.html ב-~/containers/caddy/files.
4. צור קובץ index.html ב-~/containers/caddy/files בשרת Ubuntu בחלון הסייר של VS Code הנראה כמו הבא:
5. נווט לכתובת ה-HTTP של השרת שלך ואשר שהתכולה מכינה כעת את הדף החדש שלך, index.html.
אתה יכול לראות את כל הדברים הנ"ל באנימציה הבאה:

שונים מפקודות ניהול הדוקר, הקבצים שאתה יוצר (כמו index.html) לא דורשים הרשאות מנהל. זה מכיוון שאתה בעל התוכן ששרת ה-Caddy משרת, מכיוון שהם נמצאים בתיקיית הבית שלך.
אימות הקשר של Bind Mount
נהדר! לא רק אתה משתמש ב- Docker container לגמרי חדש, אלא ה-container הזה משרת תוכן שנשמר מקומית בתיקיית הבית שלך! אתה יכול להוכיח זאת על ידי הרצת הפקודה הבאה:
- עצור והסר את ה-container הפועל. שלב זה מסיר באופן מלא הכל כולל קובץ index.html אם לא היית משתמש ב-bind mounts.
2. צור קונטיינר חדש לחלוטין.
3. אמת כי הקונטיינר החדש עדיין משרת את קובץ ה-index.html בכתובת http://<שרת שלך>
.
יצירת קונטיינרים עמידים
A container isn’t that useful if it stops when the server reboots. By default, that’s what is going to happen if you don’t make it happen. To prevent this, let’s generate a new caddy container again but this time once that restarts when the Docker host, Ubuntu in this case, restarts.
- עצור והסר את כל ה-containerים הפועלים.
2. הפעל מחדש את ה-container של caddy עם הפרמטר --restart always
, כדי להגדיר את ה-container החדש הזה להתחיל עם המחשב באופן אוטומטי. עם הדגל --restart always
במקום, ה-container שלך מתנהג כעת כשירות תקינה: מתחיל באופן אוטומטי בעת ההפעלה.
3. הפעל את השרת מחדש.
4. עכשיו אמת כי ה-container החדש עולה ועדיין משרת את קובץ ה-index.html בכתובת http://<שרת שלך>
.
תוכל לראות את הפקודות הבאות המיושמות למטה:

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