אם יש לך צורך להעתיק קבצים ממארח ה־Docker ל־הקונטיינר שלך, הדרך הזו היא עבורך.
במהלך הזה, תלמד להעתיק קבצים ממארח ה־Docker לקונטיינר באמצעות שיטות שונות.
בוא נתחיל!
דרישות מוקדמות
אם ברצונך ללכת איתי בצעד-אחר-צעד, וודא שיש לך:
- A Linux host. This tutorial uses Ubuntu 18.04.5 LTS.
- Docker מותקן על מארח ה-Linux. במדריך זה, אנו משתמשים ב-Docker v19.03.11. תוכל לאמת את גרסת Docker שלך על ידי הרצת הפקודה
docker version
.
- יש לך תמונת Docker שהורדה וזמינה. מדריך זה משתמש בתמונת NGINX האחרונה של Docker, הזמינה ב־Docker Hub
העתקת קבצים עם הפקודה docker cp
כדי להתחיל את המדריך, תלמד להעתיק קבצים ממארח Docker לקונטיינרים באמצעות הפקודה docker cp
. הפקודה docker cp
מעתיקה קבצים או תיקיות בין קונטיינר ובין מסד הקבצים המקומי של מארח ה־Docker ולהיפך.
Let's learn how to use the Docker cp command with an example.
1. פתח/י טרמינל במחשב המקומי שלך.
2. צור/י קובץ בשם myfile.txt באמצעות הפקודה touch
. הקובץ myfile.txt יועתק ממאכסן ה-Docker לתוך ה-container.
3. בצע/י את הפקודה docker run
. הפקודה למטה docker run תיצור תוך כדי קונטיינר חדש ברקע. הפקודה למטה מכילה שלושה פרמטרים המתוארים למטה:
d
flag that runs the container in the background and keeps it alive until deleted.p
flag publishes a container’s port80
to the host on port80
.nginx
יהיה הדמות שתשמש להפעלת הקונטיינר.

4. בדוק/י אם הקונטיינר של Docker נוצר בהצלחה באמצעות הפקודה docker ps
. לאחר ביצוע הפקודה docker ps
, את/ה צפה/י בערך חדש שנוצר תחת התכונה CONTAINER ID (במקרה למטה ccae4670f030
) באמצעות דמות ה-NGINX המאשרת שהקונטיינר נוצר בהצלחה.

לפני ביצוע פקודת ה-Docker cp, תחת התחביר של פקודת ה-Docker cp יש:
CONTAINER: SRC_PATH
מציין את נתיב המקור של הקונטיינר.DEST_PATH
הוא נתיב היעד במאכסן.CONTAINER: DEST_PATH
הוא נתיב היעד בקונטיינר.
בנוסף, תוכל/י גם להוסיף את הקובע options
עם הפרמטרים למטה בפקודה כך:
- שימוש בארכיון או a – מעתיק את כל ההרשאות של המשתמש והקבוצה הראשית של הקבצים והתיקיות.
- שימוש ב-L – הגדרת האפשרות L תאפשר לכל קישור סמלי בנתיב המקור להיות מועתק לנתיב היעד.
5. לאחר מכן, בצע את הפקודה docker cp
. פקודת docker cp
תעתיק את הקובץ myfile.txt שיצרת קודם לכן לתיקיית /usr/share של המיכל. ccae4670f030
הוא מזהה המיכל שאליו יועתק הקובץ myfile.txt.
6. לבסוף, התחבר ב-SSH אל המיכל הרץ על ידי הרצת הפקודה docker exec
עם /bin/bash
, שמשמש כמסך ברירת המחדל להתחברות משתמש של מערכת Linux.
- הדגל
i
מציין שתרצה לפתוח מושב SSH אינטראקטיבי למיכל. הדגלi
אינו סוגר את המושב SSH אף אם המיכל אינו מחובר. - הדגל
t
מקצץ TTY פיסאודו שיש להשתמש בו כדי להפעיל פקודות באופן אינטראקטיבי.sudo docker exec -it ccae4670f030 /bin/bash
תראה שכעת מחובר למסד הנתונים של המיכל כאשר תריץ את docker exec
.

7. לאחר התחברות לתוך ה-container, וודא ש-myfile.txt הועתק ל-container באמצעות פקודת ls.
ls
היא פקודה לרשימת קבצים במחשב במערכות Unix ודומות לה.grep
יחפש את כל הקבצים או התיקיות שמתחילים עם המחרוזתmy
בתיקיית usr/share.

העתקת קבצים באמצעות DockerFile
בקטע הקודם, למדת כיצד להעתיק קבצים ל-container על ידי הפעלת פקודת Docker cp. מה לעשות אם יש צורך להעתיק קבצים מרובים בפעם אחת? בהחלט, הפעלת פקודות מרובות הופכת למשאב! כדי לפתור את הבעיה של הרצת פקודות מרובות cp, למה לא לנסות להעתיק קבצים או תיקיות ל-container באמצעות Dockerfile עם פקודות COPY
?
התקנת תיקייה והעתקת קבצים/תיקיות באמצעות Dockerfile מאפשרת לך להסיר את צעדי ההעתקה הידנית שביצעת בקטע הקודם. Dockerfile הוא מסמך טקסט המכיל את כל הפקודות שמשתמש יכול לקרוא בשורת הפקודה כדי להרכיב דמות.
בואו ליצור Dockerfile, להפעיל קונטיינר ממנו ולהעתיק את הקבצים בסופו.
1. צור תיקייה בשם ~/host-to-container-copy-demo, ושנה (cd
) את תיקיית העבודה אליה. תיקייה זו תכיל את כל הקבצים שתיצור בדגמה זו.
2. כעת, צור שני קבצי טקסט בשמות myfile1.txt ו-myfile2.txt, העתק והדבק אותם לתוך הקבצים, ושמור אותם בתיקייה ~/host-to-container-copy-demo.
3. צור קובץ נוסף, העתק/הדבק את התצורה הבאה, ושמור את הקובץ בשם Dockerfile בתוך התיקייה ~/host-to-container-copy-demo. כאשר התהליך הושלם, דוקר ישתמש בקובץ זה Dockerfile כדי להריץ את כל הפקודות הדרושות לבניית תמונת Docker חדשה מעל כל תמונת בסיס.
הDockerfile הבא מכיל שלבי/הוראות שונות שיבנו את התכולה החדשה:
FROM
– ההוראה FROM מאתחלת שלב בנייה חדש ומגדירה את התמונת בסיס להוראות הבאות.COPY
– הפקודה COPY מעתיקה קובץ ממכונת המארח (מארח Docker) לתוך המיכל.
4. אמת את כל הקבצים הנדרשים לבניית התמונה החדשה על ידי הרצת פקודת tree
. אתה צריך לראות Dockerfile, myfile1.txt, ו-myfile2.txt תחת התיקייה ~/host-to-container-copy-demo.

5. הבנה, כעת, את התמונה על ידי הרצת פקודת docker build
. הדגל t
משמש להעניק תג לתמונה updated_ubuntu_image
עם התג latest
ו.
מאפשר ל־docker לבחור את כל הקבצים הנדרשים מהתיקייה הנוכחית לעבודה.

docker build
command 6. עכשיו, אמת את התמונה שנבנתה עם הפקודה docker images
. שים לב למאפיין REPOSITORY. מאפיין זה הוא התג שנוצר עם הדגל -t
בשלב הקודם.

7. לבסוף, הרץ את התוכנית המכונה באמצעות התמונה שנבנתה עם הפקודה docker run
. הדגל -it
מציין ל־Docker להקצות טרמינל פסאודו-אינטראקטיבי מחובר ל־stdin של התוכנית. bash
מספק את הקושי הדיפולטי להתחברות משתמש של מערכת ה־Linux.
תראה למטה שאתה כעת בשלילת Bash של התוכנית ב־Docker.

8. הבנה, אם הקבצים הועתקו בהצלחה לתוך התוכנית בתיקיות /tmp ו־/usr/share על ידי הרצת פקודת ls
.

עריכת נפח אחסון וגישה לקבצים עם הפקודה Docker Volume
עד כה, למדת כיצד להעתיק קבצים מהמארח לתוך הקונטיינר באמצעות שני גישות שונות באמצעות שימוש בפקודת docker cp
וב-DockerFile. הפעם, בואו נלמד כיצד לשתף בקלות מערכות קבצים בין המארח והקונטיינרים באמצעות הפקודה docker volume
.
בהנחה שאתה עדיין מחובר לטרמינל:
1. צור נפח על מארח ה-Docker על ידי הרצת הפקודה docker volume create
. הפקודה הבאה תיצור נפח בשם my-vol
. sudo docker volume create my-vol
2. אמת כי הנפח נוצר בהצלחה על ידי הרצת הפקודה docker volume ls
. הפקודה docker volume ls מפרטת את הנפח. לאחר הרצת הפקודה docker volume ls
, תראה my-vol
במאפיין VOLUME NAME שמאשר כי הנפח נוצר בהצלחה.

3. לאחר מכן, הרץ את הקונטיינר באמצעות הפקודה docker run
.
- הקונטיינר בשם
volume_testing
משתמש בתמונתnginx: latest
. d
flag runs the container in the background and keeps it alive until deleted.v
flag mounts the volumemy-vol
created on Docker host to the container’s destination/app
directory.

4. בדוק אם הנפח my-vol שיצרת בעבר ממונם כהלכה עם התוכן באמצעות הפקודה docker inspect
. הפקודה Docker inspect מספקת את מידע התוכן. לאחר הרצת הפקודה docker inspect
, היא תציג את כל הפרטים של התוכן המסוים (volume_testing
), כולל פרטי ההרכבה, כפי שמוצג למטה.
למטה, הצילום מסך מאשר כי הנפח (my-vol
) שיצרת על המארח מונף בהצלחה עם ספריית ה-container של הקונטיינר באמצעות /app
.

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