השתמש ב-Docker לעצירת מכולות בלי להרוס דברים!

יש בעיה עם עצירת הקונטיינרים ב־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.

# עצור את ה-container דרך השם
docker stop mystifying_hofstadter
# עצור את ה-container דרך המזהה (container זהה)
docker stop fb66ed50209
Stopping a single Docker container via the container name or container ID.

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

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

# רשום את כל ה-containers שרצים
docker ps
# עצור את ה-container הבא באמצעות המזהה של ה-Docker
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e
Listing all running containers and then stopping them

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

# צור שלושה containers. נקודת פסיק מפרידה בין כל פקודה
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# רשום את כל ה-containers שרצים
docker ps -q
# אחזר את כל מזהי ה-container הפועלים והעבר אותם ל- docker stop
docker stop $(docker ps -q)
Stopping multiple Docker containers at once.

הבנייה $(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.
docker run -d -t --stop-signal SIGQUIT ubuntu
Specifying 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 ייצא והזיהוי שלו יוצג.

docker kill 2aa318273db5

הורגים את כל ה-containerים בפקודה docker kill $(docker ps -q). שימו לב ש־(docker ps -q) הוא ביטוי משנה כאן.

עצירת ה-container והסרתו עם docker rm

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

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

בדוגמה הבאה, ייתכן שהתחלת מכל שהוקצה לו השם kind_galileo. לפני הסרת מכל, יש לעצור את המכל, כפי שמוצג למטה. הפקודה docker ps -a מציגה את מצב המכל, Exited, עבור המכל בדוגמה.

Listing all containers, including stopped containers.

עכשיו, לאחר שהמכל עצר, הפקודה docker rm תסיר את המכל לגמרי.

docker rm kind_galileo

במקום לעצור את המכל ואז להסיר אותו, השילוב של --force ו-docker rm יעצור ויסיר את המכל בפעולה אחת. המכל, laughing_elion, לא יהיה זמין יותר להפעלה.

docker rm --force laughing_elion

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

Stopping and removing a container.

עצירת מכלי Docker עם Docker Compose

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

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

אם יש לך שירות שפועל עם מספר מיכלים, [docker-compose stop] מפסיק את השירות מבלי להסיר את המיכלים או השירות. ניתן לעקוב אחר הוראות ליצירת שירות Docker Compose, להתחיל את השירות ולעצור אותו באופן יפה.

1. יצירת ספרייה לאחסון קובץ התצורה שלך. בדוגמה זו, הספרייה C:\Articles\Ubuntu תאחסן את הקובץ.

mkdir C:\Articles\Ubuntu

2. לאחר מכן, צור את קובץ docker-compose.yml, הכולל את התצורה הבאה. הקובץ Docker Compose מטה יוצר שירות עם שני מיכלי Ubuntu, וכאשר הם מופעלים, המיכלים לא יוצאים מיד.

# גרסת התצורה של docker-compose
version: "3.9"
# אוסף היישומים שמרכיבים את השירות הזה
services:
  # מיכל Ubuntu הראשון
  container1:
    image: ubuntu
    # זהה לאפשרות -t ומקצג Psuedo-TTY, כך שהמיכל לא יוצא מיד
    tty: true
  # מיכל Ubuntu השני
  container2:
    image: ubuntu
    tty: true

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

Starting a Docker Compose service.

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

Stopping a Docker Compose service.

הפקודה docker-compose, כמו גם הפקודה docker, מגיעה עם פרמטרים rm --force ו־kill. הפרמטרים של docker-compose עובדים על השירות במקום מיכל יחיד. הפקודה docker-compose kill גם מקבלת אפשרות -s לציון אות העצירה.

סיכום

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

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

Source:
https://adamtheautomator.com/docker-stop-containers/