שלטו על Docker על Ubuntu: מדריך פיתוח בעולם האמיתי

אם אתה מחפש מידע על איך להתקין את 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) נפתחת כמרחב עבודה:

VSCode when SSHed into a Ubuntu Machine

תהליך ההתקנה הממשי של Docker בשרת Ubuntu כבר רק שני פקודות רחוק. Ubuntu מאפשרת להתקין את Docker דרך מנהל החבילות המוגדר כברירת מחדל שמגיע עם Ubuntu ומכונה apt.

בחלון תרמינל SSH של VS Code, הפעל את שתי הפקודות הבאות כדי להתקין את Docker:

sudo apt update -y
sudo apt install docker.io -y

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

ניתן לצפות בהתקנת Docker באנימציה הבאה:

The Installation Process for Docker on Ubuntu

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 הוא שרת אינטרנט ידוע בפשטות שלו. ניתן להפעיל הרבה הגדרות שרת תקינות באמצעות שורה אחת בקובץ. פשוט זה טוב וגם יוצר דוגמה בסיסית טובה.

  1. ראשית, תצטרך למצוא את תמונת ה-Docker. במחשב ה-Windows שלך, נווט אל https://hub.docker.com.
  2. בצד שמאל למעלה של העמוד, בצע חיפוש עבור caddy. עליך לראות עמוד דומה למה שלמטה:
Searching for caddy on the Docker Hub

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 של התוכן. המאפיין הזה נקרא מיפוי פורטים.

sudo docker run -p 80:80 caddy

רוב תמונות Docker Hub עוקבות אחר תבנית של <משתמש>/<שם התמונה>. עם זאת, תמונות שמסומנות כ "רשמיות" על ידי Docker אינן מכילות <משתמש> מול פניהן (כמו במקרה של caddy למעלה).

Running the Caddy Docker container

עשוי להיות רואים כי רוב פקודות ה-Docker מתחילות עם sudo, כדי לאלץ את הפקודות להפעיל כמנהל מערכת. כברירת מחדל, שירות ה-Docker פועל כ-root, וכל השינויים שתעשו בקונטיינרים או בדמויות צריכים להתבצע כמנהל.

והנך מוכן ורץ! זהו כל מה שיש לזה. האם אתה שמח שהתקנת Docker על Ubuntu?

עכשיו נווט ל־http://<your-ip> ממחשב ה-Windows שלך ואתה אמור לראות דף נחיתה של Caddy. תוכל לראות את זה למטה (כתובת ה-IP של מדריך זה הוחלפה ב־http://homelab-docker):

The default landing page for Caddy

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

הפעלת קונטיינרים של Docker ברקע

עכשיו יש לך קונטיינר פועל, אך שורת הפקודה שלך תקועה. אתה לא יכול לעשות דברים נוספים. יש לך דרך טובה יותר להתחיל קונטיינר כשהוא רץ ברקע כמו שירות. כדי לעשות זאת:

  1. עצור את הקונטיינר הנוכחי על ידי לחיצה על control+c בשורת הפקודה. זה אמור להחזיר לך את שורת הפקודה שלך.
  2. עכשיו, הפעל שוב את אותו הפקודה כמו בפעם הקודמת רק עם הפרמטר -d הפעם כפי שמוצג למטה. תראה שדוקר יחזיר מזהה של הקונטיינר ויחזיר אליך את שורת הפקודה.
sudo docker run -d -p 80:80 caddy
Running a detached container

ניהול קונטיינרים ברקע עם פקודות דוקר

כאשר יש לך קונטיינרים ברקע אחד או יותר רצים, תצטרך לנהל אותם בכל צורה שהיא. דוקר מספק לך מספר פקודות שונות לעשות זאת באמצעות פקודות docker container.

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

תוכל לראות את כל הפקודות הנ"ל בהקשר בצילום המסך למטה:

Managing detached containers using docker container commands

ישנן הרבה פקודות נוספות של קונטיינרי דוקר להצגה, שינוי, בדיקה, או אפילו התחברות מרחוק לקונטיינרים על השרת שלך. תוכל לראות את כולן על ידי הרצת sudo docker container --help.

אף על פי שעכשיו הפקת את שרת האינטרנט בקונטיינר שרץ ברקע, עדיין לא יש לך דרך לארח את התוכן המותאם אישית שלך. במצב הנוכחי, Caddy פשוט מכין את עמוד האינטרנט הברירתי.

בואו נסתכל כיצד ניתן להשתמש בדוקר עם יישומון בשם bind mounts כדי להפעיל תכני נתונים משמעותיים.

אחסון נתוני הקונטיינר עם Bind Mounts

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

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

המושג הזה שקול לשימוש בהתקנה חדשה של Windows בכל עדכון של תוכנת האפליקציה שלך ב-Windows. לא רעיון כיף ב-Windows, אך יישם בצורה יישומית מאוד בדוקר.

המתודולוגיה של הזרוק יש לה בעיה ברורה. אתה לא רוצה שנתונים חיוניים ייזרקו כשהשירות הנוכחי שלך נשפץ. דוקר פותרת את הבעיה הזו באמצעות יישום בשם bind mounts.

בואו נבדוק כיצד ליצור bind mount עבור קונטיינר.

יצירת מבנה התיקיות וניקוי

לפני שתוכל להשתמש ב-bind mounts, יש ליצור מקום לאחסון נתונים אלו. במדריך זה ניצור תיקייה בתיקיית הבית שלך. כדי לעשות זאת ב-VS Code תוך עדיין מחובר לשרת Ubuntu שלך:

  1. לחץ על הכפתור הימני באזור ריק של לוח הExplorer ב־VS Code ובחר תיקייה חדשה.

2. תן שם לתיקייה החדשה containers/caddy/files.

שמות התיקיות תבחרו בעצמכם כל עוד הם מוגדרים נכון בפקודת ה־docker הבאה. על ידי שימוש בקו פשוט, VS Code יפענח זאת כיצירת שלוש תיקיות. התיקייה files היא תת־תיקייה של caddy, ו־caddy היא תת־תיקייה של containers. אין חובה להשתמש במבנה הזה של התיקיות, אך המבנה הזה מתאים יותר כאשר יש לך מספר תפקידים על אותו השרת.

אם לא עשית זאת קודם, עצור והסר את כל הקונטיינרים שיצרת בעבר באמצעות הפקודות הבאות:

# עצור והסר את כל הקונטיינרים הפועלים כרגע.
# $(sudo docker ps -q) ישכיל כל ה־ID של הקונטיינרים הפועלים כרגע
sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

אפשר לראות את הפקודה הזו בצילום המסך למטה:

Using the VSCode Explorer Window

פרסום קונטיינר Caddy עם Bind Mounts

כעת יש לך את מבנה התיקיות שנבנה על השרת של Ubuntu. הגיע הזמן ליצור קונטיינר Caddy עם bind mounts.

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

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

The Caddy documentation on Docker Hub

2. התחל את התכולה באמצעות הפקודה הבאה. הפרמטר -v ~/containers/caddy/files:/usr/share/caddy מטמיע את הנתיב לפני הנקודה הפולנית (~/containers/caddy/files) לתיקייה בתוך התכולה (/usr/share/caddy). זה פועל באופן דומה ביותר לפקודת המיפוי של הפורט: רק שאתה ממפה תיקייה במקום פורט. סוג זה של פקודה נקרא Bind Mount.

# קשר תיקייה בשרת (הנתיב לפני הנקודה) ל-
# /usr/share/caddy בתוך התכולה
sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy caddy

הגרשיים (~) בקוד לעיל מתייחסים לתיקיית הבית. במאמר זה, זה שקול ל-/home/homelab.

3. פתח דפדפן ונווט חזרה לכתובת ה-HTTP של השרת שלך. תיתן לך לשים לב שהשרת מכין עכשיו דף 404. זה צפוי מכיוון שכרגע אין לך קובץ index.html ב-~/containers/caddy/files.

4. צור קובץ index.html ב-~/containers/caddy/files בשרת Ubuntu בחלון הסייר של VS Code הנראה כמו הבא:

<body><h2>hello world!</h2></body>

5. נווט לכתובת ה-HTTP של השרת שלך ואשר שהתכולה מכינה כעת את הדף החדש שלך, index.html.

אתה יכול לראות את כל הדברים הנ"ל באנימציה הבאה:

container is now serving your new index.html page.

שונים מפקודות ניהול הדוקר, הקבצים שאתה יוצר (כמו index.html) לא דורשים הרשאות מנהל. זה מכיוון שאתה בעל התוכן ששרת ה-Caddy משרת, מכיוון שהם נמצאים בתיקיית הבית שלך.

אימות הקשר של Bind Mount

נהדר! לא רק אתה משתמש ב- Docker container לגמרי חדש, אלא ה-container הזה משרת תוכן שנשמר מקומית בתיקיית הבית שלך! אתה יכול להוכיח זאת על ידי הרצת הפקודה הבאה:

  1. עצור והסר את ה-container הפועל. שלב זה מסיר באופן מלא הכל כולל קובץ index.html אם לא היית משתמש ב-bind mounts.
sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

2. צור קונטיינר חדש לחלוטין.

sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy caddy

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.

  1. עצור והסר את כל ה-containerים הפועלים.

# עצור והסר את כל ה-containerים הפועלים כעת

sudo docker container stop $(sudo docker ps -q)
sudo docker container prune

2. הפעל מחדש את ה-container של caddy עם הפרמטר --restart always, כדי להגדיר את ה-container החדש הזה להתחיל עם המחשב באופן אוטומטי. עם הדגל --restart always במקום, ה-container שלך מתנהג כעת כשירות תקינה: מתחיל באופן אוטומטי בעת ההפעלה.

sudo docker run -d -p 80:80 -v ~/containers/caddy/files:/usr/share/caddy --restart always caddy

3. הפעל את השרת מחדש.

4. עכשיו אמת כי ה-container החדש עולה ועדיין משרת את קובץ ה-index.html בכתובת http://<שרת שלך>.

תוכל לראות את הפקודות הבאות המיושמות למטה:

Setting caddy to restart on boot

המשיכה

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

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

Source:
https://adamtheautomator.com/docker-ubuntu/