היכן מאוחסנות תמונות דוקר? נתיב מכולות דוקר הוסבר

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

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

אתה יכול לקבל את המידע הבסיסי על תצורת ה- Docker שלך על ידי ביצוע:

$ docker info ... Storage Driver: overlay2 Docker Root Dir: /var/lib/docker ... 

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

מיקום האחסון של תמונות ומיכלים של Docker

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

  • אובונטו: /var/lib/docker/
  • פדורה: /var/lib/docker/
  • דביאן: /var/lib/docker/
  • חלונות: C:\ProgramData\DockerDesktop
  • MacOS: ~/Library/Containers/com.docker.docker/Data/vms/0/

ב- macOS וב- Windows, Docker מריץ מכלי לינוקס בסביבה וירטואלית. לכן, יש לדעת כמה דברים נוספים.

Docker עבור Mac

Docker אינו תואם מקורי ל- MacOS, ולכן Hyperkit משמש להפעלת תמונה וירטואלית. נתוני התמונה הווירטואליים שלה ממוקמים ב:  

~/Library/Containers/com.docker.docker/Data/vms/0

בתוך התמונה הווירטואלית, הנתיב הוא נתיב ה- Docker המוגדר כברירת מחדל /var/lib/docker.

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

$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty 

אתה יכול להרוג את ההפעלה הזו על ידי לחיצה על Ctrl + a , ואחריו לחיצה על k ו- y .

Docker עבור Windows

ב- Windows, Docker הוא מעט חלק. ישנם מכולות Windows מקוריות הפועלות באופן דומה למכולות לינוקס. מכולות לינוקס מנוהלות בסביבה וירטואלית מינימלית מבוססת Hyper-V.

התצורה והתמונה הווירטואלית לביצוע תמונות לינוקס נשמרות בתיקיית ברירת המחדל של Docker.

C:\ProgramData\DockerDesktop

אם תבדוק תמונות רגילות, תקבל נתיבי לינוקס כמו:

$ docker inspect nginx ... "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff" ... 

ניתן להתחבר לתמונה הווירטואלית על ידי:

docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -i sh

שם, אתה יכול ללכת למיקום המוזכר:

$ cd /var/lib/docker/overlay2/585...9eb/ $ ls -lah drwx------ 4 root root 4.0K Feb 6 06:56 . drwx------ 13 root root 4.0K Feb 6 09:17 .. drwxr-xr-x 3 root root 4.0K Feb 6 06:56 diff -rw-r--r-- 1 root root 26 Feb 6 06:56 link -rw-r--r-- 1 root root 57 Feb 6 06:56 lower drwx------ 2 root root 4.0K Feb 6 06:56 work

המבנה הפנימי של תיקיית השורש Docker

בפנים /var/lib/dockerנשמר מידע שונה. לדוגמא, נתונים עבור מכולות, אמצעי אחסון, בנייה, רשתות ואשכולות.

$ ls -la /var/lib/docker total 152 drwx--x--x 15 root root 4096 Feb 1 13:09 . drwxr-xr-x 13 root root 4096 Aug 1 2019 .. drwx------ 2 root root 4096 May 20 2019 builder drwx------ 4 root root 4096 May 20 2019 buildkit drwx------ 3 root root 4096 May 20 2019 containerd drwx------ 2 root root 12288 Feb 3 19:35 containers drwx------ 3 root root 4096 May 20 2019 image drwxr-x--- 3 root root 4096 May 20 2019 network drwx------ 6 root root 77824 Feb 3 19:37 overlay2 drwx------ 4 root root 4096 May 20 2019 plugins drwx------ 2 root root 4096 Feb 1 13:09 runtimes drwx------ 2 root root 4096 May 20 2019 swarm drwx------ 2 root root 4096 Feb 3 19:37 tmp drwx------ 2 root root 4096 May 20 2019 trust drwx------ 15 root root 12288 Feb 3 19:35 volumes 

תמונות דוקר

התוכן הכבד ביותר הוא בדרך כלל תמונות. אם אתה משתמש בכיסוי 2 של מנהל התקן האחסון המוגדר כברירת מחדל, תמונות Docker שלך נשמרות ב /var/lib/docker/overlay2. שם, אתה יכול למצוא קבצים שונים המייצגים שכבות לקריאה בלבד של תמונת Docker ושכבה עליה מכילה את השינויים שלך.

בואו נחקור את התוכן באמצעות דוגמה:

$ docker image pull nginx $ docker image inspect nginx [ { "Id": "sha256:207...6e1", "RepoTags": [ "nginx:latest" ], "RepoDigests": [ "[email protected]:ad5...c6f" ], "Parent": "", ... "Architecture": "amd64", "Os": "linux", "Size": 126698063, "VirtualSize": 126698063, "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/585...9eb/diff: /var/lib/docker/overlay2/585...9eb/diff", "MergedDir": "/var/lib/docker/overlay2/585...9eb/merged", "UpperDir": "/var/lib/docker/overlay2/585...9eb/diff", "WorkDir": "/var/lib/docker/overlay2/585...9eb/work" }, ... 

ה- LowerDir מכיל את השכבות לקריאה בלבד של תמונה. שכבת הקריאה והכתיבה המייצגת שינויים הם חלק מ- UpperDir . במקרה שלי, תיקיית NGINX UpperDir מכילה את קבצי היומן:

$ ls -la /var/lib/docker/overlay2/585...9eb/diff total 8 drwxr-xr-x 2 root root 4096 Feb 2 08:06 . drwxr-xr-x 3 root root 4096 Feb 2 08:06 .. lrwxrwxrwx 1 root root 11 Feb 2 08:06 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Feb 2 08:06 error.log -> /dev/stderr

ה- MergedDir מייצג את התוצאה של UpperDir ו- LowerDir המשמש את Docker להפעלת המכולה. ה- WorkDir הוא ספריה פנימית עבור overlay2 וצריכה להיות ריקה.

כרכים של דוקר

אפשר להוסיף חנות מתמשכת למכולות כדי לשמור על נתונים ארוכים ממה שקיים המכולה או לשתף את הנפח עם המארח או עם מכולות אחרות. ניתן להפעיל מיכל בנפח באמצעות האפשרות -v :

$ docker run --name nginx_container -v /var/log nginx

אנו יכולים לקבל מידע על מיקום עוצמת הקול המחובר על ידי:

$ docker inspect nginx_container ... "Mounts": [ { "Type": "volume", "Name": "1e4...d9c", "Source": "/var/lib/docker/volumes/1e4...d9c/_data", "Destination": "/var/log", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], ... 

הספרייה /var/logהמפנית מכילה קבצים ממיקומו של מיכל NGINX.

$ ls -lah /var/lib/docker/volumes/1e4...d9c/_data total 88 drwxr-xr-x 4 root root 4.0K Feb 3 21:02 . drwxr-xr-x 3 root root 4.0K Feb 3 21:02 .. drwxr-xr-x 2 root root 4.0K Feb 3 21:02 apt -rw-rw---- 1 root 43 0 Jan 30 00:00 btmp -rw-r--r-- 1 root root 34.7K Feb 2 08:06 dpkg.log -rw-r--r-- 1 root root 3.2K Feb 2 08:06 faillog -rw-rw-r-- 1 root 43 29.1K Feb 2 08:06 lastlog drwxr-xr-x 2 root root 4.0K Feb 3 21:02 nginx -rw-rw-r-- 1 root 43 0 Jan 30 00:00 w 

נקה את השטח המשמש את דוקר

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

$ docker system prune -a

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

$ docker volumes prune

סיכום

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

Sometimes, storage can fill up quickly. Therefore, it’s useful to inspect its root folder, but it is not recommended to delete or change any files manually. Instead, the prune commands can be used to free up disk space.

I hope you enjoyed the article. If you like it and feel the need for a round of applause, follow me on Twitter.

I am a co-founder of our revolutionary journey platform called Explore The World. We are a young startup located in Dresden, Germany and will target the German market first. Reach out to me if you have feedback and questions about any topic.

Happy Docker exploring :)

References

  • Docker storagediver documentation

    //docs.docker.com/storage/storagedriver/

  • Documentation Overlay filesystem

    //www.kernel.org/doc/Documentation/filesystems/overlayfs.txt