أين يتم تخزين صور Docker؟ شرح مسارات حاوية عامل الميناء

تم اعتماد 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 بتشغيل حاويات Linux في بيئة افتراضية. لذلك ، هناك بعض الأشياء الإضافية التي يجب معرفتها.

Docker لنظام التشغيل Mac

Docker غير متوافق أصلاً مع macOS ، لذلك يتم استخدام Hyperkit لتشغيل صورة افتراضية. توجد بيانات صورتها الافتراضية في:  

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

داخل الصورة الافتراضية ، يكون المسار هو مسار Docker الافتراضي /var/lib/docker.

يمكنك التحقق من دليل جذر Docker الخاص بك عن طريق إنشاء shell في البيئة الافتراضية:

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

يمكنك إنهاء هذه الجلسة بالضغط على Ctrl + a ، متبوعًا بالضغط على k و y .

Docker لنظام التشغيل Windows

على Windows ، يكون Docker مجزأًا بعض الشيء. توجد حاويات Windows أصلية تعمل بشكل مشابه لحاويات Linux. يتم تشغيل حاويات Linux في بيئة افتراضية مبنية على Hyper-V.

يتم حفظ التكوين والصورة الافتراضية لتنفيذ صور linux في مجلد جذر 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 

صور عامل ميناء

عادة ما تكون أثقل المحتويات عبارة عن صور. إذا كنت تستخدم برنامج تشغيل التخزين الافتراضي overlay2 ، فسيتم تخزين صور 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 المستخدمة من قبل عامل الميناء لتشغيل الحاوية. و 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 لتنظيف الحاويات غير المستخدمة. يمكن تنظيف الحاوية والشبكات والصور وذاكرة التخزين المؤقت للإصدار بتنفيذ:

$ docker system prune -a

بالإضافة إلى ذلك ، يمكنك أيضًا إزالة وحدات التخزين غير المستخدمة بتنفيذ:

$ docker volumes prune

ملخص

يعد Docker جزءًا مهمًا من بيئات وأدوات العديد من الأشخاص. في بعض الأحيان ، يبدو Docker مثل السحر من خلال حل المشكلات بطريقة ذكية جدًا دون إخبار المستخدم بكيفية تنفيذ الأشياء خلف الكواليس. ومع ذلك ، فإن Docker هي أداة عادية تخزن أجزائها الثقيلة في مواقع يمكن فتحها وتغييرها.

في بعض الأحيان ، يمكن أن يمتلئ التخزين بسرعة. لذلك ، من المفيد فحص المجلد الجذر الخاص به ، ولكن لا يوصى بحذف أو تغيير أي ملفات يدويًا. بدلاً من ذلك ، يمكن استخدام أوامر التقليم لتحرير مساحة على القرص.

أرجو أن تتمتع هذه المادة. إذا أعجبك ذلك وشعرت بالحاجة إلى جولة من التصفيق ، فاتبعني على Twitter.

أنا أحد مؤسسي منصة الرحلة الثورية الخاصة بنا والتي تسمى Explore The World. نحن شركة ناشئة تقع في دريسدن بألمانيا وسنستهدف السوق الألمانية أولاً. تواصل معي إذا كانت لديك ملاحظات وأسئلة حول أي موضوع.

سعيد عامل ميناء استكشاف :)

المراجع

  • وثائق عامل تخزين عامل الميناء

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

  • نظام ملفات التراكب التوثيق

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