יש בעיה עם עצירת הקונטיינרים ב־Docker? למצוא את הדרך הנכונה לעצור קונטיינר יכול להיות מורכב כשיש אפשרות ליצירת קונטיינרים שונים. במאמר זה, תלמד פקודות Docker לעצירת קונטיינר או כל הקונטיינרים.
קרא כדי לדעת עוד!
דרישות מוקדמות
כדי להמשיך עם המדריך, הקפד לוודא שיש לך את הבא:
- Windows 10 – המדריך משתמש ב־Windows כדי להריץ את Docker, אך תוכל גם להחיל את אותם שלבים כלליים גם ל־Linux או macOS.
- Docker Desktop – המדריך משתמש בגרסה 3.5.2. ה־מנוע Docker זמין אם אתה בלינוקס מאחר והממשק הגרפי אינו זמין.
- A running Docker container or containers.
עצירת קונטיינרים באמצעות פקודת ה־docker stop containers
בואו נתחיל עם הפקודה הראשונה: פקודת docker stop
containers ואיך היא מבצעת עצירת קונטיינרים.
לדוגמה, אולי יש לך צורך לעצור קונטיינר בשם mystifying_hofstadter
ועם זיהוי fb66ed502096
. כפי שמוצג בדוגמה למטה, עצור את הקונטיינר בעזרת פקודת docker stop
containers.

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

מה קורה אם ברצונך לעצור את כל ה-containers הפועלים בלי לאחזר את מזהי ה-container באופן ידני ולהעביר אותם ל-docker stop
? הפקודה docker ps -q
תבצע את זה. הפרמטר -q
של הפקודה docker ps
יפליט רק את המזהים של ה-containers.

הבנייה
$(docker ps -q)
שלמעלה היא תת-ביטוי גם ב-Bash ב-Linux וגם ב-PowerShell ב-Windows. תת-ביטוי מורה למסוף לעבד סט אחד של פקודות,docker ps -q
, תחילה ואז להחזיר את סט התוצאות לפקודה המקוריתdocker stop
.
הפקודה docker stop
containers משתמשת בסיגנל SIGTERM. סיגנלים ב-Linux מודיעים לתהליך על אירוע, אך זה נכון לתהליך להחליט כיצד לפעול על סיגנל נתון.
בשימוש בסיגנל SIGTERM, Docker משתמש בסיגנל כדי לעצור תהליך בצורה נאותה על ידי המתנה ל- 10
שניות ברירת המחדל לפני שולח את הסיגנל SIGKILL, שמפסיק את התהליך מיידית.
עצירת תהליך באמצעות סיגנלי תהליך
למדת על ההתנהגות ברירת המחדל של Docker (סיגנל עצירה), עם פקודת ה־docker stop
containers, כאשר מעצרים תוכנית. אך יתכן שלא תרצה את ההתנהגות הברירת-המחדל. במקום זאת, תוכל להורות ל-Docker להשתמש בסיגנלים עצירה אלטרנטיביים.
עם הדגל --stop-signal
בפקודות docker run
, תוכל לציין את הסיגנל עצירה בעת התחלת התכולה. הדגל הזה מגדיר את הסיגנל שיישלח להתכולה הרצה כאשר תרצה לעצור אותה.
בדוגמה למטה, הדגל --stop-signal
מקבל את הערך SIGQUIT
, שאומר ל-Docker לשלוח את האות SIGQUIT כאשר הזמן לעצירת ה-container מתקרב. הדוגמה משתמשת גם בפרמטרים הבאים:
d
– Runs the container in detached (background) mode. The detached mode will not allow the container to be immediately interacted with by the user since the process is running in the background.t
– allocates a Pseudo-TTY (PTY) console, which emulates a real terminal console in the container and stops the Ubuntu container from immediately exiting. The Ubuntu container in the example requires a PTY console to stay active in the background.- "שם תמונה" – לאיזו תמונת Docker להפעיל את ה-container, במקרה זה, תמונת ה-
ubuntu
.

SIGQUIT
as the signal when starting and then stopping a Docker container. ניתן גם לציין את אות העצירה באמצעות Dockerfile, שאומר ל-Docker איך לבנות תמונה. ניתן להוסיף רשומה ל-Dockerfile שמציינת את אות העצירה בעזרת
STOPSIGNAL SIGQUIT
, לדוגמה. אפשר להחליף אתSIGQUIT
בכל אות עצירה שתבחרו.
יציאה מ-container באופן מיידי עם docker kill
יהיו רקעים בהם תרצו לצאת מ-container בלתי מחילה. פקודת docker kill
מפסיקה באופן מיידי את ה-container.
הדוגמה למטה מעבירה את ה-container עם זיהוי 2aa318273db5
ל־docker kill
. ה-container ייצא מיידית באמצעות אות ה-SIGKILL. ל-container לא יאושר יציאה חסרת דרך יפה. כתוצאה מהפקודה, ה-container ייצא והזיהוי שלו יוצג.
הורגים את כל ה-containerים בפקודה
docker kill $(docker ps -q)
. שימו לב ש־(docker ps -q)
הוא ביטוי משנה כאן.
עצירת ה-container והסרתו עם docker rm
ברירת המחדל, כאשר אתה יוצר מכל, המכל נבנה זהה כמו קודם: הוא אידמפוטנטי. הסרת מכל תהיה בעלת השפעה מינימלית, ועם זאת בראש, docker rm
יכול לעצור בכוח ולהסיר מכל. Docker משדר את אות SIGKILL
לתהליך הראשי ומסיר את המכל מרשימת המכלים הזמינים בהתקנת Docker שלך.
אם המכל חייב לשמור את הקבצים הפנימיים השונים או שמצבו חייב להישמר, אז הסרת מכל תחסל את השינויים האלו. זהירות מטעויות אפשריות!
בדוגמה הבאה, ייתכן שהתחלת מכל שהוקצה לו השם kind_galileo
. לפני הסרת מכל, יש לעצור את המכל, כפי שמוצג למטה. הפקודה docker ps -a
מציגה את מצב המכל, Exited
, עבור המכל בדוגמה.

עכשיו, לאחר שהמכל עצר, הפקודה docker rm
תסיר את המכל לגמרי.
במקום לעצור את המכל ואז להסיר אותו, השילוב של --force
ו-docker rm
יעצור ויסיר את המכל בפעולה אחת. המכל, laughing_elion
, לא יהיה זמין יותר להפעלה.
אם אינך מציין את הפקודה
--force
, תתקל בהודעת השגיאהError response from daemon: You cannot remove a running container...

עצירת מכלי Docker עם Docker Compose
פקודות Docker בדרך כלל משמשות על פי תצורה של מיכל יחיד, אך ניתן ליצור שירות עם מספר מיכלים שעובדים בהתנגדות זו לזו. כלי Docker Compose מאפשר לך להגדיר שירות המורכב ממספר מיכלים כדי שיעבדו יחד.
מכיוון שהמיכלים בתוך השירות מיועדים לעבוד יחד, הוא מומלץ לעצור את השירות כולו באופן יפה ולא ביחידות מיכלים פרטיים.
אם יש לך שירות שפועל עם מספר מיכלים, [docker-compose stop]
מפסיק את השירות מבלי להסיר את המיכלים או השירות. ניתן לעקוב אחר הוראות ליצירת שירות Docker Compose, להתחיל את השירות ולעצור אותו באופן יפה.
1. יצירת ספרייה לאחסון קובץ התצורה שלך. בדוגמה זו, הספרייה C:\Articles\Ubuntu תאחסן את הקובץ.
2. לאחר מכן, צור את קובץ docker-compose.yml, הכולל את התצורה הבאה. הקובץ Docker Compose מטה יוצר שירות עם שני מיכלי Ubuntu, וכאשר הם מופעלים, המיכלים לא יוצאים מיד.
3. בהתחברות לשולחן עבודה, נווטו אל ספריית קובץ התצורה המותאם אישית של Docker שלכם, שבדוגמה זו היא C:\Articles\Ubuntu. הריצו את הפקודה docker-compose up -d
כדי ליצור ולהתחיל את השירות שנוצר בשלב הקודם ברקע כפי שמצויין באפשרות ה--d
.

4. באותה סשן של טרמינל ובאותה ספריית עבודה, נפקו את הפקודה docker-compose stop
כדי לסיים את השירות והתכולות של המיכלים בצורה ישירה.

הפקודה
docker-compose
, כמו גם הפקודהdocker
, מגיעה עם פרמטריםrm --force
ו־kill
. הפרמטרים שלdocker-compose
עובדים על השירות במקום מיכל יחיד. הפקודהdocker-compose kill
גם מקבלת אפשרות-s
לציון אות העצירה.
סיכום
המיכלים של Docker הם כלי עוצמתי ליצירת סביבות פיתוח והפקה ייחודיות ומפוצלות. במאמר זה, למדתם כמה דרכים שבהן Docker עוצר מיכל אחד או יותר, אפילו את כולם. גם למדתם על האות הברירת מחדל של עצירת Docker וכיצד לשנות אותו.
עם הידע הזה, אתם עכשיו מכירים את הפרטים הטכניים של עצירת מיכלי Docker וכיצד לא לפגוע כשהגיע הזמן לעצור מיכלים בשימוש. איך אתם מתכננים לעצור את המיכלים שלכם מעתה והלאה, לאחר שרכשתם את הידע החדש הזה?
Source:
https://adamtheautomator.com/docker-stop-containers/