הקדמה
Docker היא יישום שמקלט את תהליך ניהול תהליכי היישום ב- containers. קונטיינרים מאפשרים לך להריץ את היישומים שלך בתהליכים שבהם מופרדים ממשאבים. הם דומים למכונות וירטואליות, אך קונטיינרים הם יותר ניידים, יותר ידידותיים למשאבים ויותר תלויים במערכת ההפעלה המארחת.
למבוא מפורט לרכיבים שונים של קונטיינר Docker, ראה אקוסיסטמת Docker: מבוא לרכיבים נפוצים.
במדריך זה, תתקין ותשתמש בגרסת הקהילה (CE) של Docker על Ubuntu 22.04. תתקין את Docker עצמו, תעבוד עם קונטיינרים ותמונות, ותדחוף תמונה אל מאגר Docker.
פשוט פיתוח יישומים עם פלטפורמת היישומים של DigitalOcean. התקן ישירות מ-GitHub בדקות.
דרישות מוקדמות
כדי לעקוב אחרי המדריך הזה, יש לך צורך בפריטים הבאים:
- אחד Ubuntu 22.04 שרת הוגדר על ידי עקבי המדריך להגדרה התחלתית של שרת Ubuntu 22.04, כולל משתמש לא מקורי
sudo
וגם חומת אש. - חשבון ב־Docker Hub אם ברצונך ליצור תמונות משלך ולהעלות אותן ל־Docker Hub, כפי שמוצג בשלבים 7 ו־8.
שלב 1 — התקנת Docker
חבילת ההתקנה של Docker הזמינה במאגר החבילות הרשמי של Ubuntu עשויה שלא להיות הגרסה האחרונה. כדי להבטיח שנקבל את הגרסה האחרונה, נתקין את Docker ממאגר החבילות הרשמי של Docker. לכן, נוסיף מקור חדש לחבילות, נוסיף את מפתח ה־GPG מ־Docker כדי לוודא שההורדות תקפות, ולאחר מכן נתקין את החבילה.
לְרִאשן, עדכן את רשימת החבילות הקיימות שלך:
לאחר מכן, התקן מספר חבילות קדם דרושות שמאפשרות ל־apt
להשתמש בחבילות מעל HTTPS:
לאחר מכן הוסף את מפתח ה־GPG של מאגר החבילות הרשמי של Docker למערכת שלך:
הוסף את מאגר החבילות של Docker למקורות APT:
עדכן שוב את רשימת החבילות הקיימות שלך כדי שהתוספה תתבצע:
ודא שאתה מתכוון להתקין ממאגר החבילות של Docker במקום ממאגר החבילות הרשמי של Ubuntu:
תראה פלט כזה, אף על פי שמספר הגרסה של Docker עשוי להיות שונה:
docker-ce:
Installed: (none)
Candidate: 5:20.10.14~3-0~ubuntu-jammy
Version table:
5:20.10.14~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
שים לב ש־docker-ce
אינו מותקן, אך המועמד להתקנה הוא ממאגר ה־Docker עבור Ubuntu 22.04 (jammy
).
לבסוף, התקן את Docker:
כעת דוקר צריך להיות מותקן, השירות התחיל, והתהליך מאופשר להתחיל באמצעות הפעלה על הזיכרון. בדוק שהוא רץ:
הפלט צריך להיראות דומה למטה, מראה שהשירות פעיל ורץ:
Output● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-04-01 21:30:25 UTC; 22s ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 7854 (dockerd)
Tasks: 7
Memory: 38.3M
CPU: 340ms
CGroup: /system.slice/docker.service
└─7854 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
התקנת Docker כעת נותנת לך לא רק את השירות של Docker (דמון) אלא גם את פקודת השורת פקודה של Docker או את הלקוח של Docker. נבחן איך להשתמש בפקודת ה־docker
מאוחר יותר במדריך זה.
שלב 2 — ביצוע הפקודה של Docker בלי Sudo (אופציונלי)
ברירת המחדל, פקודת ה־docker
יכולה להיות מופעלת רק על ידי משתמש root או על ידי משתמש בקבוצת docker, שנוצרת אוטומטית במהלך תהליך ההתקנה של Docker. אם תנסה להריץ את פקודת ה־docker
בלי לקדם אותה ב־sudo
או בלי להיות בקבוצת docker, תקבל פלט דומה לזה:
Outputdocker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?.
See 'docker run --help'.
אם ברצונך למנוע מסירת ה־sudo
בכל פעם שאתה מפעיל את פקודת ה־docker
, הוסף את שמך משתמש לקבוצת docker
:
להחיל את חברות הקבוצה החדשה, התנתקו מהשרת והתחברו מחדש, או הקלידו את הפקודה הבאה:
תתבקשו להזין את סיסמת המשתמש שלכם כדי להמשיך.
אשרו כי המשתמש שלכם נוסף כעת לקבוצת docker על ידי הקלדת:
Outputsammy sudo docker
אם תרצו להוסיף משתמש לקבוצת docker
שאינכם מחוברים אליה, הגדירו את שם המשתמש הזה באופן מפורש באמצעות:
שאר תוכן המאמר מניח שאתם מריצים את פקודת docker
כמשתמש בקבוצת docker. אם תבחרו שלא, נא להוסיף את הפקודות עם sudo
.
בואו נבדוק את הפקודה docker
למעשה.
שלב 3 — שימוש בפקודת Docker
שימוש ב־docker
כולל העברת רצפי אפשרויות ופקודות, לאחריהן מתן ארגומנטים. התחברות משתמשים לפקודה נעשית באמצעות התחברות לשרת הפקודה או שימוש בממשק משתמש גרפי או מודרך.
כדי להציג את כל תת־הפקודות הזמינות, הקלידו:
לפי גרסת Docker 20.10.14, הרשימה המלאה של הפקודות הזמינות כוללת:
Output attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
כדי להציג את האפשרויות הזמינות לפקודה מסוימת, הקלידו:
כדי להציג מידע ברמת המערכת על Docker, השתמשו ב־
בואו נבדוק כמה מתוך הפקודות הללו. נתחיל עם עבודה עם תמונות.
שלב 4 — עבודה עם תמונות Docker
המיכלים של Docker מבוססים על תמונות Docker. כברירת מחדל, Docker מושך את התמונות האלה מ־Docker Hub, רישום של Docker מנוהל על ידי Docker, החברה שעומדת מאחורי הפרויקט של Docker. כל אחד יכול לארח את תמונות ה־Docker שלו ב־Docker Hub, ולכן רוב היישומים וההפצות של Linux שתצטרכו יהיו מאוחסנים שם.
כדי לבדוק האם תוכלו לגשת ולהוריד תמונות מ־Docker Hub, הקלידו:
הפלט יציין ש־Docker פועל כראוי:
OutputUnable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
בתחילה, Docker לא הצליחה למצוא את התמונה של hello-world
מקומית, לכן הוא הוריד את התמונה מ־Docker Hub, שהוא המאגר המרכזי. לאחר שהתמונה הורדה, Docker יצרה מיכל מהתמונה והיישום בתוך המיכל הופעל, והוצגה ההודעה.
ניתן לחפש תמונות הזמינות ב־Docker Hub על ידי שימוש בפקודת docker
עם הפקודה המשנית search
. לדוגמה, כדי לחפש את התמונה של Ubuntu, הקלידו:
הסקריפט יגלוש ב־Docker Hub ויחזיר רשימה של כל התמונות ששמם תואם את מחרוזת החיפוש. במקרה זה, הפלט יהיה דומה לזה:
OutputNAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 14048 [OK]
websphere-liberty WebSphere Liberty multi-architecture images … 283 [OK]
ubuntu-upstart DEPRECATED, as is Upstart (find other proces… 112 [OK]
neurodebian NeuroDebian provides neuroscience research s… 88 [OK]
open-liberty Open Liberty multi-architecture images based… 51 [OK]
...
בעמודת רשמי, בסדר מציין תמונה שנבנית ומתומכת על ידי החברה שעומדת מאחורי הפרויקט. לאחר שזיהית את התמונה שברצונך להשתמש בה, תוכל להוריד אותה למחשב שלך באמצעות הפקודה המשנית pull
.
בצע את הפקודה הבאה כדי להוריד את התמונה הרשמית של ubuntu
למחשב שלך:
תראה את הפלט הבא:
OutputUsing default tag: latest
latest: Pulling from library/ubuntu
e0b25ef51634: Pull complete
Digest: sha256:9101220a875cee98b016668342c489ff0674f247f6ca20dfc91b91c0f28581ae
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
לאחר שהתמונה הורדה, תוכל להפעיל תוכנית בהתאמה באמצעות התמונה שהורדת באמצעות הפקודה המשנית run
. כפי שראית בדוגמה של hello-world
, אם התמונה לא הורדה כאשר docker
מופעל עם הפקודה המשנית run
, הלקוח של Docker יוריד תחילה את התמונה, ואז יפעיל תוכנית בהתאמה.
כדי לראות את התמונות שהורדו למחשב שלך, הקלד:
הפלט יראה דומה לדוגמה הבאה:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 1d622ef86b13 3 weeks ago 73.9MB
hello-world latest bf756fb1ae65 4 months ago 13.3kB
כמו שתראה מאוחר יותר במדריך זה, ניתן לשנות תמונות שבהן אתה מפעיל תוכניות וליצור תמונות חדשות, שאז יתכנסו להורדה (הורדה הוא המונח הטכני) אל Docker Hub או רישומים אחרים של Docker.
בוא נסתכל על כיצד להפעיל תוכניות בקונטיינרים בפרטיות יותר.
שלב 5 — הפעלת קונטיינר Docker
ה-container hello-world
שהפעלת בשלב הקודם הוא דוגמה ל-container שמופעל ויוצא לאחר שמשדר הודעת בדיקה. קונטיינרים יכולים להיות הרבה יותר שימושיים מכך, והם יכולים להיות אינטראקטיביים. בסופו של דבר, הם דומים למכונות וירטואליות, רק יותר ידידותיים למשאבים.
כדוגמה, בואו נפעיל קונטיינר באמצעות התמונה האחרונה של Ubuntu. השילוב של המפתחות -i ו־-t מאפשר לך גישת מפקד אינטראקטיבית אל קונטיינר:
המפתחת השליטה שלך צריכה להשתנות כדי לשקף את העובדה שאתה עובד כעת בתוך הקונטיינר, וצריך להיות בצורת זו:
Outputroot@d9b100f2f636:/#
שים לב למזהה הקונטיינר בפרומט הפקודה. בדוגמה זו, זהו d9b100f2f636
. תצטרך את מזהה הקונטיינר הזה מאוחר יותר כדי לזהות את הקונטיינר כאשר תרצה להסיר אותו.
כעת אתה יכול להריץ כל פקודה בתוך הקונטיינר. לדוגמה, בוא נעדכן את מסד הנתונים של החבילות בתוך הקונטיינר. אין צורך להקדים כל פקודה ב־sudo
, מכיוון שאתה פועל בתוך הקונטיינר כמשתמש root:
לאחר מכן, התקן יישום כלשהו בו. בוא נתקין את Node.js:
זה מתקין את Node.js בקונטיינר ממאגר החבילות הרשמי של Ubuntu. כאשר ההתקנה מסתיימת, ודא ש-Node.js מותקן:
תראה את מספר הגרסה המוצג בטרמינל:
Outputv12.22.9
כל השינויים שתבצע בתוך הקונטיינר יחולו רק על הקונטיינר הזה.
כדי לצאת מהקונטיינר, הקלד exit
בפרומט:
בוא נסתכל על ניהול הקונטיינרים במערכת שלנו לאחר מכן.
שלב 6 — ניהול תופעלות דוקר
לאחר שימוש בדוקר לזמן מה, יהיו לך הרבה תופעלויות (קונטיינרים) פעילות ולא פעילות על המחשב שלך. כדי להציג את הפעילות, השתמש:
תראה פלט דומה לזה:
OutputCONTAINER ID IMAGE COMMAND CREATED
במדריך זה, התחלת שני קונטיינרים; אחד מהתמונת hello-world
ואחד מהתמונת ubuntu
. שני הקונטיינרים אינם רצים עוד, אך הם עדיין קיימים במערכת שלך.
כדי להציג את כל הקונטיינרים — פעילים ולא פעילים, הפעל docker ps
עם המתג -a
:
תראה פלט דומה לזה:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" About a minute ago Exited (0) 7 seconds ago dazzling_taussig
587000e49d53 hello-world "/hello" 5 minutes ago Exited (0) 5 minutes ago adoring_kowalevski
כדי להציג את הקונטיינר האחרון שיצרת, עבור אליו את המתג -l
:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig
כדי להתחיל קונטיינר שהופסק, השתמש ב-docker start
, ואחריו את מזהה הקונטיינר או שם הקונטיינר. בוא נתחיל את הקונטיינר שמבוסס על אובונטו עם המזהה 1c08a7a0d0e4
:
הקונטיינר יתחיל, וניתן להשתמש ב-docker ps
כדי לראות את מעמדו:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig
כדי לעצור קונטיינר רצים, השתמש ב-docker stop
, ואחריו את מזהה הקונטיינר או שם הקונטיינר. הפעם, נשתמש בשם שדוקר הקצה לקונטיינר, שהוא dazzling_taussig
:
כאשר החלטת שכבר אינך זקוק לקונטיינר יותר, הסר אותו באמצעות פקודת docker rm
, שוב באמצעות זיהוי הקונטיינר או השם. השתמש בפקודת docker ps -a
כדי למצוא את מזהה הקונטיינר או השם של הקונטיינר המקושר לתמונת ה־hello-world
והסר אותו.
אפשר להתחיל קונטיינר חדש ולתת לו שם באמצעות המתג --name
. ניתן גם להשתמש במתג --rm
כדי ליצור קונטיינר שמסיר את עצמו כאשר הוא נעצר. ראה את הפקודה docker run help
לקבלת מידע נוסף על אפשרויות אלו ואחרות.
ניתן להמיר קונטיינרים לתמונות שבאפשרותך להשתמש בהם כדי לבנות קונטיינרים חדשים. בואו נראה כיצד זה עובד.
שלב 7 — הזדקקות שינויים בקונטיינר לתמונת Docker חדשה
כאשר אתה מפעיל תמונת Docker, אתה יכול ליצור, לשנות ולמחוק קבצים בדיוק כמו שאתה יכול עם מכונה וירטואלית. השינויים שתבצע יחולקו רק על הקונטיינר ההוא. ניתן להתחיל ולהפסיק אותו, אך לאחר שתשמיד אותו באמצעות פקודת docker rm
, השינויים יאבדו לצמיתות.
חלק זה מראה לך כיצד לשמור את מצב הקונטיינר כתמונת Docker חדשה.
לאחר התקנת Node.js בתוך התכולה של Ubuntu, יש לך כעת תכולה הרצה מתוך תמונת תכולה, אך התכולה שונה מהתמונה שהשתמשת בה כדי ליצור אותה. אולם עשויים לרצות להשתמש בתכולת התכולה של Node.js זו כבסיס לתמונות חדשות בעתיד.
לאחר מכן, יש לבצע את השינויים על מנת ליצור תמונת Docker חדשה באמצעות הפקודה הבאה.
המתג -m משמש להודעת השינויים שתעזור לך ולאחרים להבין מה השינויים שביצעת, בעוד -a משמש לציון היוצר. ה-container_id
הוא המזהה של התכולה שרשמת לפני כן במדריך כאשר התחלת את הפקודה האינטראקטיבית של Docker. אלא אם יצרת תפקידים נוספים ב-Docker Hub, ה-repository
כללית הוא שם המשתמש שלך ב-Docker Hub.
לדוגמה, עבור המשתמש sammy, עם מזהה התכולה של d9b100f2f636
, הפקודה תהיה:
כאשר אתה commit את התמונה, התמונה החדשה נשמרת מקומית על המחשב שלך. בשלב מאוחר יותר במדריך זה, תלמד כיצד לדחוף תמונה לרישום של Docker כמו Docker Hub כך שאחרים יוכלו לגשת אליה.
כאשר תפרט מחדש את תמונות ה-Docker תחזור תראה את התמונה החדשה, כמו גם את הישנה ממנה נובעה:
תראה פלט דומה לזה:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
sammy/ubuntu-nodejs latest 7c1f35226ca6 7 seconds ago 179MB
...
בדוגמה זו, ubuntu-nodejs
היא התמונה החדשה, שנובעה מהתמונה הקיימת ubuntu
מ-Docker Hub. ההבדל בגודל משקף את השינויים שבוצעו. ובדוגמה זו, השינוי היה שהותקנה תוכנת NodeJS. לכן, בפעם הבאה שתזדקק להפעיל תכולת Ubuntu עם NodeJS מותקנת מראש, תוכל פשוט להשתמש בתמונה החדשה.
ניתן גם לבנות תמונות מDockerfile
, שמאפשר לך לאוטומט ובצורה ממוחשבת להתקין תוכנה בתמונה חדשה. אך, זה נמצא מחוץ לטווח של המדריך הזה.
עכשיו בואו נשתף את התמונה החדשה עם אחרים כדי שיהיה אפשר ליצור מכלולים ממנה.
שלב 8 — העלאת תמונות Docker למאגר תמונות Docker
השלב הלוגי הבא לאחר יצירת תמונה חדשה מתוך תמונה קיימת הוא לשתף אותה עם קבוצה נבחרת של חברים, עם כל העולם ב-Docker Hub, או בכל מאגר תמונות Docker אחר שיש לך גישה אליו. כדי להעלות תמונה ל-Docker Hub או לכל מאגר תמונות Docker אחר, עליך לפתוח חשבון שם.
כדי להעלות את התמונה שלך, התחבר תחילה ל-Docker Hub.
יתבקש ממך לאמת את זהותך באמצעות הסיסמה שלך ב-Docker Hub. אם הזנת את הסיסמה הנכונה, האימות צריך להצליח.
הערה: אם שם המשתמש במאגר ה-Docker שלך שונה מהשם המקומי שהשתמשת בו כדי ליצור את התמונה, עליך לסמן את התמונה שלך בשם המשתמש במאגר שלך. לדוגמה, עבור הדוגמה שסופקה בשלב הקודם, תקליד:
ואז תוכל להעלות את התמונה שלך באמצעות:
כדי להעלות את התמונה ubuntu-nodejs
למאגר sammy, הפקודה תהיה:
תהליך זה עשוי לקחת זמן עד שיגמר, מאחר שהוא מעלה את התמונות, אך כאשר יסתיים, הפלט ייראה כך:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Pushed
5f70bf18a086: Pushed
a3b5c80a4eba: Pushed
7f18b442972b: Pushed
3ce512daaf78: Pushed
7aae4540b42d: Pushed
...
לאחר העלאת תמונה למרשם, היא צריכה להופיע בלוח המחוונים של החשבון שלך, כמו שמוצג בתמונה למטה.
אם ניסיון להעלאה מביא לשגיאה מסוג זה, סביר שלא נכנסת בהצלחה:
OutputThe push refers to a repository [docker.io/sammy/ubuntu-nodejs]
e3fbbfb44187: Preparing
5f70bf18a086: Preparing
a3b5c80a4eba: Preparing
7f18b442972b: Preparing
3ce512daaf78: Preparing
7aae4540b42d: Waiting
unauthorized: authentication required
התחבר עם docker login
וחזור על ניסיון ההעלאה. לאחר מכן, ודא שהיא קיימת בדף המאגר שלך ב־Docker Hub.
כעת ניתן להשתמש ב־docker pull sammy/ubuntu-nodejs
כדי לשאוב את התמונה למכונה חדשה ולהשתמש בה להפעלת תקופן חדשה.
סיכום
במדריך זה התקנת את Docker, עבדת עם תמונות ותקופות, והעלאת תמונה משונה ל־Docker Hub. כעת שאתה מכיר את היסודות, תרגל ב־מדריכי Docker נוספים בקהילת DigitalOcean.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-22-04