כיצד להתקין ולהשתמש ב-Docker על Ubuntu 22.04

הקדמה

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

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

במדריך זה, תתקין ותשתמש בגרסת הקהילה (CE) של Docker על Ubuntu 22.04. תתקין את Docker עצמו, תעבוד עם קונטיינרים ותמונות, ותדחוף תמונה אל מאגר Docker.

פשוט פיתוח יישומים עם פלטפורמת היישומים של DigitalOcean. התקן ישירות מ-GitHub בדקות.

דרישות מוקדמות

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

שלב 1 — התקנת Docker

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

לְרִאשן, עדכן את רשימת החבילות הקיימות שלך:

  1. sudo apt update

לאחר מכן, התקן מספר חבילות קדם דרושות שמאפשרות ל־apt להשתמש בחבילות מעל HTTPS:

  1. sudo apt install apt-transport-https ca-certificates curl software-properties-common

לאחר מכן הוסף את מפתח ה־GPG של מאגר החבילות הרשמי של Docker למערכת שלך:

  1. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

הוסף את מאגר החבילות של Docker למקורות APT:

  1. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

עדכן שוב את רשימת החבילות הקיימות שלך כדי שהתוספה תתבצע:

  1. sudo apt update

ודא שאתה מתכוון להתקין ממאגר החבילות של Docker במקום ממאגר החבילות הרשמי של Ubuntu:

  1. apt-cache policy docker-ce

תראה פלט כזה, אף על פי שמספר הגרסה של Docker עשוי להיות שונה:

Output of apt-cache policy docker-ce
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:

  1. sudo apt install docker-ce

כעת דוקר צריך להיות מותקן, השירות התחיל, והתהליך מאופשר להתחיל באמצעות הפעלה על הזיכרון. בדוק שהוא רץ:

  1. sudo systemctl status 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, תקבל פלט דומה לזה:

Output
docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'.

אם ברצונך למנוע מסירת ה־sudo בכל פעם שאתה מפעיל את פקודת ה־docker, הוסף את שמך משתמש לקבוצת docker:

  1. sudo usermod -aG docker ${USER}

להחיל את חברות הקבוצה החדשה, התנתקו מהשרת והתחברו מחדש, או הקלידו את הפקודה הבאה:

  1. su - ${USER}

תתבקשו להזין את סיסמת המשתמש שלכם כדי להמשיך.

אשרו כי המשתמש שלכם נוסף כעת לקבוצת docker על ידי הקלדת:

  1. groups
Output
sammy sudo docker

אם תרצו להוסיף משתמש לקבוצת docker שאינכם מחוברים אליה, הגדירו את שם המשתמש הזה באופן מפורש באמצעות:

  1. sudo usermod -aG docker username

שאר תוכן המאמר מניח שאתם מריצים את פקודת docker כמשתמש בקבוצת docker. אם תבחרו שלא, נא להוסיף את הפקודות עם sudo.

בואו נבדוק את הפקודה docker למעשה.

שלב 3 — שימוש בפקודת Docker

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

  1. docker [option] [command] [arguments]

כדי להציג את כל תת־הפקודות הזמינות, הקלידו:

  1. 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

כדי להציג את האפשרויות הזמינות לפקודה מסוימת, הקלידו:

  1. docker docker-subcommand --help

כדי להציג מידע ברמת המערכת על Docker, השתמשו ב־

  1. docker info

בואו נבדוק כמה מתוך הפקודות הללו. נתחיל עם עבודה עם תמונות.

שלב 4 — עבודה עם תמונות Docker

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

כדי לבדוק האם תוכלו לגשת ולהוריד תמונות מ־Docker Hub, הקלידו:

  1. docker run hello-world

הפלט יציין ש־Docker פועל כראוי:

Output
Unable 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, הקלידו:

  1. docker search ubuntu

הסקריפט יגלוש ב־Docker Hub ויחזיר רשימה של כל התמונות ששמם תואם את מחרוזת החיפוש. במקרה זה, הפלט יהיה דומה לזה:

Output
NAME 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 למחשב שלך:

  1. docker pull ubuntu

תראה את הפלט הבא:

Output
Using 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 יוריד תחילה את התמונה, ואז יפעיל תוכנית בהתאמה.

כדי לראות את התמונות שהורדו למחשב שלך, הקלד:

  1. docker images

הפלט יראה דומה לדוגמה הבאה:

Output
REPOSITORY 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 מאפשר לך גישת מפקד אינטראקטיבית אל קונטיינר:

  1. docker run -it ubuntu

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

Output
root@d9b100f2f636:/#

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

כעת אתה יכול להריץ כל פקודה בתוך הקונטיינר. לדוגמה, בוא נעדכן את מסד הנתונים של החבילות בתוך הקונטיינר. אין צורך להקדים כל פקודה ב־sudo, מכיוון שאתה פועל בתוך הקונטיינר כמשתמש root:

  1. apt update

לאחר מכן, התקן יישום כלשהו בו. בוא נתקין את Node.js:

  1. apt install nodejs

זה מתקין את Node.js בקונטיינר ממאגר החבילות הרשמי של Ubuntu. כאשר ההתקנה מסתיימת, ודא ש-Node.js מותקן:

  1. node -v

תראה את מספר הגרסה המוצג בטרמינל:

Output
v12.22.9

כל השינויים שתבצע בתוך הקונטיינר יחולו רק על הקונטיינר הזה.

כדי לצאת מהקונטיינר, הקלד exit בפרומט:

בוא נסתכל על ניהול הקונטיינרים במערכת שלנו לאחר מכן.

שלב 6 — ניהול תופעלות דוקר

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

  1. docker ps

תראה פלט דומה לזה:

Output
CONTAINER ID IMAGE COMMAND CREATED

במדריך זה, התחלת שני קונטיינרים; אחד מהתמונת hello-world ואחד מהתמונת ubuntu. שני הקונטיינרים אינם רצים עוד, אך הם עדיין קיימים במערכת שלך.

כדי להציג את כל הקונטיינרים — פעילים ולא פעילים, הפעל docker ps עם המתג -a:

  1. docker ps -a

תראה פלט דומה לזה:

Output
CONTAINER 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:

  1. docker ps -l
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "bash" 3 minutes ago Exited (0) 2 minutes ago dazzling_taussig

כדי להתחיל קונטיינר שהופסק, השתמש ב-docker start, ואחריו את מזהה הקונטיינר או שם הקונטיינר. בוא נתחיל את הקונטיינר שמבוסס על אובונטו עם המזהה 1c08a7a0d0e4:

  1. docker start 1c08a7a0d0e4

הקונטיינר יתחיל, וניתן להשתמש ב-docker ps כדי לראות את מעמדו:

Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1c08a7a0d0e4 ubuntu "bash" 6 minutes ago Up 8 seconds dazzling_taussig

כדי לעצור קונטיינר רצים, השתמש ב-docker stop, ואחריו את מזהה הקונטיינר או שם הקונטיינר. הפעם, נשתמש בשם שדוקר הקצה לקונטיינר, שהוא dazzling_taussig:

  1. docker stop dazzling_taussig

כאשר החלטת שכבר אינך זקוק לקונטיינר יותר, הסר אותו באמצעות פקודת docker rm, שוב באמצעות זיהוי הקונטיינר או השם. השתמש בפקודת docker ps -a כדי למצוא את מזהה הקונטיינר או השם של הקונטיינר המקושר לתמונת ה־hello-world והסר אותו.

  1. docker rm adoring_kowalevski

אפשר להתחיל קונטיינר חדש ולתת לו שם באמצעות המתג --name. ניתן גם להשתמש במתג --rm כדי ליצור קונטיינר שמסיר את עצמו כאשר הוא נעצר. ראה את הפקודה docker run help לקבלת מידע נוסף על אפשרויות אלו ואחרות.

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

שלב 7 — הזדקקות שינויים בקונטיינר לתמונת Docker חדשה

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

חלק זה מראה לך כיצד לשמור את מצב הקונטיינר כתמונת Docker חדשה.

לאחר התקנת Node.js בתוך התכולה של Ubuntu, יש לך כעת תכולה הרצה מתוך תמונת תכולה, אך התכולה שונה מהתמונה שהשתמשת בה כדי ליצור אותה. אולם עשויים לרצות להשתמש בתכולת התכולה של Node.js זו כבסיס לתמונות חדשות בעתיד.

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

  1. docker commit -m "What you did to the image" -a "Author Name" container_id repository/new_image_name

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

לדוגמה, עבור המשתמש sammy, עם מזהה התכולה של d9b100f2f636, הפקודה תהיה:

  1. docker commit -m "added Node.js" -a "sammy" d9b100f2f636 sammy/ubuntu-nodejs

כאשר אתה commit את התמונה, התמונה החדשה נשמרת מקומית על המחשב שלך. בשלב מאוחר יותר במדריך זה, תלמד כיצד לדחוף תמונה לרישום של Docker כמו Docker Hub כך שאחרים יוכלו לגשת אליה.

כאשר תפרט מחדש את תמונות ה-Docker תחזור תראה את התמונה החדשה, כמו גם את הישנה ממנה נובעה:

  1. docker images

תראה פלט דומה לזה:

Output
REPOSITORY 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.

  1. docker login -u docker-registry-username

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

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

  1. docker tag sammy/ubuntu-nodejs docker-registry-username/ubuntu-nodejs

ואז תוכל להעלות את התמונה שלך באמצעות:

  1. docker push docker-registry-username/docker-image-name

כדי להעלות את התמונה ubuntu-nodejs למאגר sammy, הפקודה תהיה:

  1. docker push sammy/ubuntu-nodejs

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

Output
The push refers to a repository [docker.io/sammy/ubuntu-nodejs] e3fbbfb44187: Pushed 5f70bf18a086: Pushed a3b5c80a4eba: Pushed 7f18b442972b: Pushed 3ce512daaf78: Pushed 7aae4540b42d: Pushed ...

לאחר העלאת תמונה למרשם, היא צריכה להופיע בלוח המחוונים של החשבון שלך, כמו שמוצג בתמונה למטה.

אם ניסיון להעלאה מביא לשגיאה מסוג זה, סביר שלא נכנסת בהצלחה:

Output
The 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