إذا كنت تتساءل كيفية إنشاء حاويات Docker قابلة لإعادة الإنتاج باستخدام Docker Compose، فقد وصلت إلى المكان المناسب. في هذا البرنامج التعليمي الخطوة بخطوة لـ Docker Compose، ستتعلم كيفية إنشاء حاويات بسيطة، وتعيين المنافذ باستخدام Docker Compose حتى الوصول إلى سيناريوهات متعددة الحاويات المعقدة.
هل أنت مستعد؟ لنبدأ!
المتطلبات الأساسية
إذا كنت ترغب في المتابعة خطوة بخطوة في هذا البرنامج التعليمي، تأكد من توفر ما يلي:
- A fresh install of Ubuntu Server LTS with SSH Enabled. This guide will use Ubuntu Server LTS 20.04.1 as the Docker host machine.
- A computer with VS Code installed (optional). This guide will use Visual Studio Code 1.52.1 to SSH to the Docker host and run commands.
- تثبيت الامتداد الرسمي لـ VS Code SSH والاتصال بهاست Docker. (اختياري)
ما هو Docker Compose؟
يمكن أن تصبح الأوامر الفردية طويلة جدًا في Docker. انظر إلى المثال التالي. يقوم هذا المثال بإنشاء حاوية لتطبيق برمجي يسمى bookstack.
مع تزايد تعقيد بيئة دوكر ، يزداد عدد العلامات والشروط المطلوبة لإعداد حاوية عملية. يصبح سطر الأوامر الخاص بدوكر معقدًا وصعبًا لإصلاح الأخطاء ، خاصةً عندما يبدأ الإعداد المتعدد للحاويات في الدخول في الصورة.
دوكر كومبوز هو طريقة لإنشاء حاويات دوكر قابلة لإعادة التكرار باستخدام ملف تكوين بدلاً من أوامر دوكر الطويلة للغاية. من خلال استخدام ملف تكوين منظم ، يصبح من الأسهل اكتشاف الأخطاء وتعريف تفاعلات الحاويات.
يصبح دوكر كومبوز لا غنى عنه بسرعة عند التعامل مع تبعيات الحاويات أو بيئات متعددة الحاويات.
دوكر كومبوز هو وسيلة رائعة للانتقال إلى “البنية التحتية كشفرة” بدون تعقيد الأنظمة الموزعة مثل “كوبرنيتيز”.
يستخدم دوكر كومبوز هيكل ملف إعداد يسمى “يامل”. يتشابه يامل مع JSON أو HTML في أنه لغة منظمة يمكن قراءتها بواسطة الآلة. يركز يامل على قابلية القراءة من قبل الإنسان بقدر الإمكان مع الحفاظ على هذا القدر الهيكلي.
لكن ليامل عيب يتمثل في أن الفراغات والأبيض الآخر ذو أهمية ويجب تنسيقها بشكل صحيح. يقوم برنامج VS Code بالكثير من هذا العمل الشاق بدلاً منك ولهذا السبب سترى أن العديد من الأمثلة تتم في VS Code.
تثبيت دوكر كومبوز
دعنا نبدأ الآن بالتعامل مع الأمور. بفرض أنك متصل بمضيف Docker الخاص بك ، حان الوقت لتثبيت دوكر كومبوز.
دوكر كومبوز هو حزمة منفصلة عن وقت التشغيل لـ دوكر. ولكن تثبيت دوكر كومبوز سيؤدي أيضًا إلى تثبيت وقت التشغيل لـ دوكر ، لذا ستقضي على طائرين بحجر واحد!
لتثبيت دوكر كومبوز ووقت التشغيل لـ دوكر ، قم بتشغيل الأمرين التاليين.

بمجرد التثبيت، يجب عليك الآن إنشاء هيكل مجلد لتخزين الحاويات.
إنشاء هيكل المجلدات لـ Docker Compose
قبل أن تتمكن من إنشاء حاوية باستخدام Docker Compose، يجب عليك أولاً إنشاء مجلد لتخزين الحاويات. يجب ألا تقوم فقط بإنشاء هيكل المجلدات لتخزين الحاويات ولكن ستجد أن العديد من أوامر Docker حساسة لموقع ملفات التكوين المختلفة؛ و Docker Compose ليست استثناءً عن ذلك.
العنصر الأهم في Docker Compose هو ملف التكوين الخاص به والذي يسمى docker-compose.yaml. هذا الملف التكوين، كما تم شرحه أعلاه، يحدد كيفية بناء حاوية Docker.
عند تشغيل Docker Compose، ستبحث الأمر عن ملف التكوين في نفس المجلد الذي يتم تشغيل الأمر فيه. نظرًا لهذا المتطلب، فمن الأفضل دائمًا إنشاء مجلد منفصل عند تشغيل Docker Compose.
قد يكون هناك ملف تكوين واحد فقط لـ Docker Compose في المجلد.
لتوضيح إنشاء حاوية Docker باستخدام Docker Compose، قم أولاً بإنشاء هيكل مجلد لتخزين الحاوية المستقبلية وملف التكوين الخاص بها باستخدام خادم ملفات صغير يسمى Caddy.
كادي هو خادم ملفات، مشابه لـ apache httpd أو nginx، ولكنه مكتوب بلغة Go. تم تصميم كادي خصيصًا لسهولة الاستخدام (وسوف يقوم تلقائيًا بإنشاء أو تقديم ملف index.html) بدون تكوين. هذا المزيج يجعل كادي خيارًا جيدًا للمبتدئين.
بفرض أنك مسجل الدخول إلى مضيف Docker الخاص بك، قم بإنشاء هيكل المجلدات على النحو التالي:
- في دليل المستخدم الخاص بك، قم بإنشاء مجلد يسمى الحاويات. سيكون هذا المجلد مكانًا جيدًا لهذا الحاوية وغيرها.
- داخل مجلد الحاويات، قم بإنشاء مجلد فرعي يسمى كادي. سيحتوي هذا المجلد على ملف تكوين Docker Compose وحاوية كادي نفسها.
- أخيرًا، داخل مجلد الحاوية كادي، قم بإنشاء ملف نصي فارغ يسمى docker-compose.yaml الذي سيصبح ملف تكوين Docker Compose.
بعد إنشاء هيكل المجلدات وملف تكوين Docker Compose، يمكنك الآن البدء في ملء ذلك الملف بتكوين Docker Compose.
إنشاء ملف تكوين Docker Compose
في شكله الأبسط، يبدو ملف docker-compose.yaml للحاوية كادي كما يلي. في محرر النصوص المفضل لديك في Linux أو باستخدام VS Code، قم بنسخ ولصق الشفرة أدناه إلى ملف تكوين Docker Compose الذي تم إنشاؤه سابقًا.
لنقم بتفصيل كل الخيارات المعروضة:
version
تحدد إصدار ملف docker-compose. كل تعريف جديد لـ Docker Compose يتضمن تغييرات كبيرة في المواصفات. لذلك فإن الإصدار مهم حتى يتمكن Docker Compose من معرفة الميزات التي يحتاج إلى استخدامها. الإصدار 3.7 هو أحدث إصدار يدعمه Ubuntu 20.04.1 LTS.
يمكن العثور على المواصفة الكاملة لـ Docker Compose 3.x هنا. يذكر وثائق الرابط كل خيار يمكنك استخدامه داخل Docker Compose.
services
تحتوي على المواصفات الخاصة بالحاويات الفعلية. يمكنك تعريف عدة حاويات في هذا القسم.caddy
هو اسم الحاوية الأولى (هذا للإشارة فقط).container_name
يحدد الاسم الفعلي الذي تعطى للحاوية من قِبل Docker ويجب أن يكون فريدًا.image
هو اسم الصورة. في هذه الحالة، يتم تعريف caddy من Docker Hub. الاسم أو الرقم بعد العلامة المفصولة بواسطة النقطتين هو الإصدار.
تعيين المنفذ
يتطلب ذكرًا خاصًا لهذا الخيار الأخير:
في Docker Compose، تمكنك التوجيهة ports
من تعيين واحد أو أكثر من التطابقات من المضيف إلى الحاوية. على سبيل المثال، في الأعلى قمت بتعيين المنفذ 80
على المضيف إلى المنفذ 80
على الحاوية. ومع ذلك، ليس عليك أن تطابق رقم المنفذ. المثال أدناه يقوم بتعيين المنفذ 8800
على المضيف إلى المنفذ 80
في الحاوية.
يمكنك أيضًا تعريف عدة منافذ كما هو موضح أدناه.
بذلك، ستتم مطابقة كل من المنفذ 80
و 443
إلى المضيف (وهي تكون تكوينًا شائعًا لخوادم الويب لخدمة كل من HTTP و HTTPS).
يحدد مُنشئ صور Docker المنافذ المتاحة في وقت الإنشاء. تأكد من التحقق من وثائق الصورة التي تعمل عليها على Docker Hub أو موقع المُحافظ للحصول على المنافذ التي يمكن التطابق عليها. ليس هناك فائدة في تطابق منفذ إذا لم يتم استخدامه!
مع ذلك في الاعتبار، دعنا ننظر في تشغيل الحاوية بالفعل.
تشغيل الحاوية
حتى الآن يجب أن يكون لديك ملف docker-compose.yaml داخل مجلد ~\containers\caddy. الآن هو الوقت المناسب لإنشاء وتشغيل حاوية Caddy.
قم بتشغيل الأمر التالي في الطرفية الخاصة بك والذي سيقوم بتشغيل حاويات Docker المعرفة في ملف docker-compose.yaml.
قد تلاحظ أنه لم يكن عليك تحديد موقع ملف docker-compose.yaml عند تشغيل الأمر
sudo docker-compose up -d
. يتوقع من Docker Compose تشغيل جميع الأوامر داخل المجلد الذي يحتوي على ملف docker-compose.yaml ، حيث أن العديد من الأوامر متعلقة بذلك المجلد.
الآن تحقق من أن الحاوية قد تم تشغيلها وتعمل عن طريق الانتقال إلى http://<عنوان IP الخاص بك>. يستخدم هذا الدليل http://homelab-docker كمرجع.
يمكنك رؤية هذه العملية وقد تحدث في VS Code أثناء الاتصال بـ SSH في المضيف Docker في الرسم المتحرك أدناه:

نجاح! لقد استخدمت الآن Docker Compose بنجاح لبدء حاوية من ملف تكوين. مع اتخاذ هذه الخطوة الأولى المهمة ، دعنا نلقي نظرة على كيفية إدارة حالة الحاوية الخاصة بك.
أوامر لإدارة الحاويات المنفصلة
في القسم السابق ، قمت بتشغيل حاوية caddy باستخدام علامة -d
. عند القيام بذلك ، تعمل الحاوية في حالة مفصولة. عندما تكون الحاوية في حالة منفصلة ، فإن الحاوية ستستمر في العمل في الخلفية. ولكن ، هذا يشكل مشكلة: كيف يمكنك إدارة تلك الحاوية إذا فقدت السيطرة المباشرة؟
لحل هذه المشكلة ، يتوفر لـ Docker Compose سلسلة من الأوامر التي ستدير الحاويات التي تم بدء تشغيلها باستخدام ملف docker-compose.yaml:
docker-compose restart
يُستخدم لإعادة تشغيل حاوية تعمل حاليًا. يختلف هذا الأمر عن تشغيلdocker-compose up -d
بالفعل. سيعيد الأمر إعادة تشغيل الحاوية الموجودة، ويعيد تشغيل الأمرdocker-compose up -d
، ويعيد إنشاء الحاوية من البداية (إذا تم تغيير ملف التكوين).docker-compose stop
سيتوقف عن تشغيل حاوية تعمل بدون تدمير الحاوية. بالمثل،docker-compose start
سيبدأ تشغيل الحاوية مرة أخرى.docker-compose down
سيتوقف عن تشغيل الحاويات وسيدمرها أيضًا. هنا يأتي دور تثبيتات مجلدات التجزئة (اقرأ المزيد أدناه).docker-compose pull
سيستلم الإصدار الحالي لصورة دوكر (أو الصور) من المستودع. إذا كنت تستخدم وسمlatest
، يمكنك أن تتبعه بـdocker-compose down && sudo docker-compose up -d
لاستبدال الحاوية بالإصدار الأحدث. استخدامdocker-compose pull
هو وسيلة ملائمة لتحديث الحاويات بسرعة مع الحد الأدنى من وقت التوقف.docker-compose logs
سيعرض سجلات الحاوية التي تعمل (أو تم إيقافها). يمكنك أيضًا تحديد الحاويات الفردية (إذا كانت هناك عدة حاويات محددة في ملف الاكتظاه) باستخدامdocker-compose logs <اسم الحاوية>
.
A full list of docker-compose commands can be seen by running
docker-compose
with no additional arguments or referenced here in the documentation.
الآن بعد أن لديك حاوية تعمل، دعنا نلقي نظرة على استخدام المحتوى المحفوظ محليًا على جهازك.
إنشاء تثبيتات مجلدات التجزئة في دوكر كومبوز
المسارات المرتبطة هي كيفية ربط دوكر لبيانات المستخدم الهامة بالتخزين المحلي على الخادم الخاص بك. للبدء، قم بإنشاء بعض المحتوى للحاوية لتستضيفه:
- على خادم دوكر، داخل مجلد ~/containers/caddy، قم بإنشاء مجلد جديد يسمى files.
2. قم بإنشاء ملف جديد يسمى index.html داخل مجلد ~/containers/caddy بالشكل التالي. سيكون هذا هو الصفحة الرئيسية التي ستخدمها خادم الويب Caddy.
3. قم بتعديل ملف تكوين Docker Compose الخاص بك ليكون كما يلي. المثال أدناه يضيف قسم volumes
ويشير إلى المسار المرتبط الذي تم إنشاؤه للتو إلى المجلد files لجعله متاحًا للحاوية.
4. قم بتشغيل docker-compose up -d
مرة أخرى. سيتعرف Docker Compose الآن على أن الملف تم تغييره وسيقوم بإعادة إنشاء الحاوية الخاصة بك.
5. انتقل إلى صفحة الحاوية باستخدام المتصفح ويجب أن ترى الآن أنها تخدم صفحة “مرحبًا بالعالم!”.
يمكنك رؤية ما يلي في الرسم المتحرك أدناه:

أنت الآن تستضيف المحتوى المخزن محليًا على جهازك! ومع ذلك، ماذا لو كان محتواك على مصدر خارجي مثل مشاركة الشبكة؟
استخدام Docker Compose مع Docker Volumes
بمجرد إنشاء حاوية بسيطة باستخدام Docker Compose ، ربما تحتاج إلى أن تتمكن تلك الحاوية من الوصول إلى ملفات في مكان آخر ربما على حصة شبكة. إذا كان الأمر كذلك ، يمكنك تكوين الحاوية لاستخدام Docker volumes مباشرةً في ملف تكوين Docker Compose.
لأغراض العرض ، سيتم إنشاء خادم Network File Share (NFS) على مضيف Docker. تقديم المحتوى المحلي كـ NFS mount ليس له هدف عملي خارج إطار العرض. إذا كنت ترغب في تحميل حجم NFS ، فعادةً ما يكون من مصدر خارجي مثل NAS أو خادم عن بُعد.
إعداد حصة NFS
إذا لم يكن لديك حصة NFS معدة بالفعل ، قم بإنشاء واحدة الآن على مضيف Docker لهذا البرنامج التعليمي. للقيام بذلك ، يمكنك:
- تثبيت حزمة خادم NFS عن طريق تشغيل
apt install nfs-kernel-server -y
.
2. إضافة الحاوية كتصدير NFS (مشابه لحصة CIFS في Windows) عن طريق تشغيل الأمر التالي.
3. قم الآن بالتحقق مما إذا كان المضيف يكشف مشاركة NFS عن طريق تشغيل الأمر showmount -e localhost
. سيعرض هذا الأمر أي مشاركات NFS المكشوفة حاليًا ومن لهم الوصول إليها.
في الصورة أدناه ، يمكنك أن ترى أن /home/homelab/containers مكشوفة ، ولكن فقط لجهاز الكمبيوتر المضيف المحلي (وهو نفس الخادم الذي يعمل عليه مضيف Docker).

إذا رأيت المجلد /home/<اسم المستخدم>/containers في الناتج ، فإن مشاركة NFS مكونة.
تعريف وحدة تخزين مسماة لـ Docker
بمجرد إنشاء مشاركة NFS ، يجب عليك الآن أن تخبر Docker كيفية الوصول إلى تلك المشاركة. باستخدام Docker Compose ، يمكنك القيام بذلك عن طريق تعريف وحدة تخزين مسماة في ملف تكوين Docker Compose.
A named volume is a way for Docker to abstract network-based file shares. Network file sharing comes in all sorts of shapes and sizes these days: CIFS (windows) shares, NFS (Linux) shares, AWS S3 Buckets, and more. By creating a Named Volume, Docker does the hard part of figuring out how to talk to the network share and lets the container just treat the share as if it is local storage.
لإنشاء وحدة تخزين مسماة:
- افتح ملف تكوين Docker Compose (docker-compose.yaml). إذا كنت تتابع ، يجب أن يكون الملف موجودًا في المجلد ~/containers/caddy.
2. في داخل ملف تكوين Docker Compose ، أضف قسم volumes
بعد قسم services
. يجب أن يكون ملف التكوين الخاص بك كما هو موضح أدناه. ينشئ قسم volumes
وحدة تخزين مسماة تسمى MyWebsite. داخل تلك الوحدة تخزين المسماة ، يتم تحديد المعلمات المطلوبة (مثل عنوان IP وإعدادات NFS والمسار). يتم أيضًا تعديل المعلمة volumes
في قسم services
، للإشارة إلى وحدة التخزين المسماة بدلاً من المجلد المحلي.
3. بمجرد تعريف الحجم المسمى الذي يشير إلى مشاركة NFS في ملف تكوين Docker Compose ، قم بتشغيل docker-compose up -d
لإنشاء وتشغيل الحاوية. إذا تم كل شيء بشكل صحيح ، يجب أن تعود الحاوية والموقع إلى العمل.

4. انتقل إلى صفحة الحاوية مرة أخرى. يجب أن يظهر محتوى index.html تمامًا كما لو كان الملف يتم تعليقه محليًا. ومع ذلك ، يتم تعليق ذلك الملف من خلال خادم NFS المعد على الشبكة.

نظرًا لأنه يمكنك الآن تعليق حجوم Docker الخارجية في Docker Compose ، يمكنك الآن إحضار جميع أنواع التخزين على الشبكة إلى حاوياتك. ومع ذلك ، يمكن لـ Docker Compose أن يفعل أكثر من تعريف حاويات أو حجوم فردية. دعنا ننتقل إلى سيناريوهات متعددة الحاويات وأكثر تعقيدًا.
لن يتم استخدام حاوية caddy في هذا البرنامج التعليمي بعد الآن ، لذا يمكنك إزالة الحاوية باستخدام
docker-compose down
.
تعريف حاويات متعددة في Docker Compose
معظم حاويات Docker لا تعمل في فراغ. عادةً ما تحتوي حاويات Docker على تبعيات الخدمة مثل قواعد البيانات أو خدمات الويب المنفصلة التي تتحدث عبر واجهة برمجة تطبيقات.
باستخدام Docker Compose ، يمكنك تجميع الحاويات معًا المحددة في ملف واحد. من خلال تعريف حاويات متعددة في ملف واحد ، يمكن للحاويات التواصل بين الخدمات المعتمدة وتبسيط تنظيم تخطيطات الحاويات المعقدة.
لتوضيح مثل هذا السيناريو ، دعنا نقوم بإعداد تطبيق ويكي شعبي يسمى BookStack.
يعتبر BookStack برنامج ويكي شهير بسبب سهولة استخدامه وتصميمه التسلسلي (على عكس التصميم الأفقي، مثل mediawiki).
يتطلب BookStack، مثل العديد من تطبيقات الويب الأخرى، قاعدة بيانات منفصلة للعمل بشكل صحيح، بالإضافة إلى المعلومات المطلوبة للتواصل مع قاعدة البيانات. يبرز Docker Compose في إعداد مثل هذا السيناريو.
إنشاء ملف تكوين Docker Compose
لا يحتوي BookStack على صورة Docker مُدارة داخليًا، ولكن linuxserver.io يُدير صورة موثوقة في مستودع Docker Hub نيابةً عن BookStack. بينما يحتوي الوثائق على مستودع Docker Hub على ملف تكوين Docker Compose الموصى به، ستقوم هذه الدروس التعليمية بإنشاء ملف تكوين جديد وشرح المفاهيم.
على مضيف Docker:
- أولاً، أنشئ مجلدًا لـ BookStack. إذا قمت بمتابعة دروس الجزء السابق، يجب أن يكون لديك مجلد ~/containers. قم بإنشاء مجلد يسمى bookstack فيه.
2. ثم أنشئ ملف تكوين فارغ لـ Docker Compose يسمى docker-compose.yaml داخل مجلد bookstack.

3. الآن افتح ملف تكوين Docker Compose وحدد حاويتين: حاوية bookstack
وحاوية bookstack_db
(mariadb).
حتى الآن، يستخدم ملف docker-compose.yaml مفاهيم تم تقديمها بالفعل: لديك خدمتين (bookstack
و bookstack_db
)، كلاهما مع صور وربطات مقيدة. يحتوي حاوية bookstack على تعيين تعيين المنفذ من منفذ المضيف 8080 إلى المنفذ الداخلي 80.
نظرًا للتكلفة المنخفضة لحاويات Docker، فإنه من الممارسة الشائعة تحديد حاوية قاعدة بيانات منفصلة لكل تطبيق ويب. يتيح ذلك فصلًا أكبر للواجبات. هذا يختلف تمامًا عن إعدادات قواعد البيانات التقليدية، حيث يمكن أن تخدم تثبيتات قواعد البيانات الفردية مئات التطبيقات الويب.
الخيار الجديد الذي يمكنك رؤيته في الملف أعلاه هو أمر depends_on
. يخبر هذا الأمر Docker بالترتيب الذي يجب أن تبدأ به الحاويات. تحديد أمر depends_on
يخبر Docker أن الحاوية bookstack_db
يجب أن تبدأ أولاً.
إعداد التواصل بين الحاويات باستخدام المتغيرات البيئية
لم يكتمل هذا الملف التكوين الذي تم إنشاؤه في القسم السابق بعد. بينما قمت بتعريف حاويتين (حاويات)، فإنهما لا يتحدثان مع بعضهما البعض! ليس لدى حاوية bookstack أي فكرة عن كيفية التواصل مع حاوية bookstack_db. دعنا نحل ذلك باستخدام المتغيرات البيئية.
المتغيرات البيئية هي الطريقة الأكثر شيوعًا لتوفير المتغيرات لحاويات Docker. هذه المتغيرات تُعطى أثناء التشغيل (أو يتم تعريفها في ملف تكوين docker-compose.yaml) لتوفير معلومات حول ما يحتاج الحاوية إلى القيام به.
تعرف المتغيرات البيئية من قبل الشخص الذي ينشئ صورة Docker. ستكون مختلفة اعتمادًا على صورة Docker التي تستخدمها، ويجب عليك الرجوع إلى وثائق المنشئ بخصوص المتغيرات البيئية المستخدمة.
هناك طريقتان لتعريف المتغيرات البيئية؛ مباشرة في ملف docker-compose.yaml نفسه أو كملف منفصل.
A separate file is, typically, the recommended method, especially if variables contain sensitive data such as passwords. A docker-compose.yaml file is designed to be shared or even uploaded to a public-facing GitHub repo. Having a separate file for sensitive data reduces the chance of an accidental security breach.
على المضيف Docker، قم الآن بإنشاء متغيرين بيئيين؛ واحد لحاوية bookstack وواحد لحاوية bookstack_db.
- قم بإنشاء ملف جديد في المجلد ~/containers/bookstack بعنوان bookstack.env بالمحتوى التالي:
2. قم بإنشاء ملف جديد في المجلد ~/containers/bookstack بعنوان bookstack_db.env وقم بتضمين المحتوى التالي:
3. كممارسة جيدة، تأكد الآن من أن كلا ملفي env غير قابلين للقراءة بواسطة مستخدمين آخرين.
يجب تغيير صلاحية القراءة لأن كلاً من ملفي bookstack.env و bookstack_db.env يحتويان على بيانات حساسة.
4. قم بتحديث ملف Docker Compose ~/containers/bookstack/docker-compose.yaml للإشارة إلى هاتين الملفتين البيئيتين الموضحتين أدناه.
5. قم الآن بتشغيل حاويات bookstack و bookstack_db باستخدام Docker Compose.
يمكنك رؤية كل خطوة من الخطوات المذكورة أعلاه في هذا القسم المنفذ في VS Code أدناه.

مراقبة سجلات Docker Compose
تعمل محرك Docker مع Docker Compose لأداء العديد من المهام المختلفة في الخلفية. يكون القدرة على مراقبة ما يحدث ، خاصة عند العمل مع عدة حاويات في وقت واحد ، مفيدة.
لمراقبة حاوية bookstack ، على سبيل المثال ، استخدم الأمر logs
. في هذا البرنامج التعليمي ، بمجرد رؤية السجلات تظهر [services.d] done
، يمكنك الانتقال إلى عنوان URL الخاص بـ bookstack.


في هذه المرحلة ، يجب أن يكون لديك ويكي يعمل بشكل كامل داخل حاويته الخاصة ، مع قاعدة بياناته الخاصة ، تمامًا داخل Docker!
طالما لديك مجلدات bookstack و bookstack_db ، يمكنك إعادة إنشاء بيئة bookstack الخاصة بك من البداية.
Docker Compose و Networking
حتى هذه النقطة ، لم تتعلم الكثير عن جانب الاتصال والشبكة لكيفية عمل الحاويات معًا. دعنا نغير ذلك.
عند إنشاء عدة حاويات داخل ملف docker-compose.yaml واحد كما فعلت في الأقسام السابقة ، يتم تعيينها جميعًا في نفس الشبكة (عادة ما يُطلق عليها اسم-المجلد-الأصلي_default ).
يمكنك رؤية الشبكة التي تم إنشاؤها للحاويات عند تشغيل docker-compose up -d
كما هو موضح أدناه.

عندما تتم تعيين جميع الحاويات في نفس الشبكة ، يقوم Docker بإنشاء إدخالات DNS لها داخليًا. لهذا السبب في المثال السابق ، تشير إلى قاعدة البيانات الخاصة بك باسم bookstack_db
في متغيرات البيئة. هذا الاسم bookstack_db
هو في الواقع إدخال DNS يشير إلى عنوان IP لحاوية قاعدة البيانات.
أنت أيضًا لست مضطرًا إلى الاعتماد على Docker Compose لتوليد الشبكات تلقائيًا بالنسبة لك. يمكنك تعريف الشبكات الداخلية أو الخارجية يدويًا. تعريف الشبكات يدويًا يكون رائعًا عندما يكون لديك حاوية تحتاج إلى التواصل مع حاوية أخرى في ملف docker-compose.yaml منفصل. يمكنك تعريض المنافذ، أو يمكنك إنشاء شبكة يمكن لكل منهما الانضمام إليها!
يرجى ملاحظة أنه عندما تبدأ في تعريف الشبكات صراحةً، يجب عليك أيضًا تعريف الشبكة الافتراضية بشكل صريح. سيتوقف Docker Compose عن إنشاء تلك الشبكة تلقائيًا بمجرد بدء تعريف الشبكات
الآن قم بتعديل ملف docker-compose.yaml الخاص بـ bookstack لتضمين شبكة تم إنشاؤها خارجيًا.
- قم بإنشاء الشبكة الخارجية باستخدام
docker network create my_external_network
.
2. قم بتعريف الشبكة الخارجية في docker-compose.yaml:
3. قم بتشغيل docker-compose up -d
لإعادة إنشاء الحاويات. الحاويتين الخاصتين بك متصلتين الآن بشبكتين كما هو موضح أدناه.

تم الآن انضمام حاوية bookstack أيضًا إلى شبكة معرفة خارجيًا. هذا يتيح لك إنشاء حاوية أخرى تحوّل حركة مرور bookstack HTTP إلى HTTPS قبل مغادرة Docker (يشار إليها بـ reverse-proxy).
تعيين مستخدم محدد لتشغيل حاوية
افتراضيًا ، تعمل جميع حاويات Docker كمستخدم جذر مجحف. يعادل هذا تشغيل جهاز افتراضي تم تسجيل الدخول إليه كمستخدم المسؤول الافتراضي. على الرغم من أن هذا عمومًا ليس مشكلة ، إلا أن هناك مخاوف أمان إذا تم اختراق الحاوية المجحفة.
المشكلة الأخرى في التشغيل كمستخدم جذر هي أذونات الملفات. قد تلاحظ أنه إذا حاولت حذف المجلد db داخل مجلد bookstack ، فلن تتمكن فعليًا من ذلك. المحتوى مملوك للمستخدم الجذر.
على الرغم من أن معظم الصور لا تقدر تشغيلها كمستخدم غير جذر ، linuxserver.io الصور بشكل خاص توفر متغير بيئة لتعيين المستخدم الذي يعمل داخل الحاوية. يمكنك القيام بذلك عن طريق إضافة UID=1000
و GID=1000
داخل تكوين bookstack.env.
1000: 1000 هو معرف المستخدم ومجموعة المستخدم الافتراضية لأول مستخدم في أوبونتو (الذي قد لا تكون أنت عليه). يمكنك قراءة المزيد حول معرفات المستخدمين ومعرفات المجموعات في ذات الصلة: رجل ويندوز في عالم لينكس: المستخدمين وأذونات الملفات)
يمكنك أيضًا إجبار المعرف ومعرف المجموعة باستخدام معلمة
user
في docker-compose ، ولكن لا يُوصى بهذا لأن معظم الحاويات لا تتصرف بشكل جيد عند إجبارها على مستخدم مختلف
ضبط سياسة إعادة التشغيل
إذا كنت ترغب في إعادة تشغيل حاويات بنيت باستخدام Docker Compose في حالة فشلها، استخدم سياسة إعادة التشغيل عن طريق إضافة معلمة restart
تحت إعدادات الحاوية في docker-compose.yaml.
إضافة هذه المعلمة ستؤدي إلى إعادة تشغيل الحاويات تلقائياً في حالة الفشل للمساعدة في الحفاظ على الوقت الفعلي في حالة حدوث مشاكل غير متوقعة في الطاقة.
تعيين إدخالات DNS يدوياً للحاويات
مثلما هو الحال مع نظامي التشغيل ويندوز ولينكس، لديكر أيضاً “ملف المضيفين”. من خلال استخدام المعلمة extra_hosts في ملف تكوين، يمكنك إجبار المضيف على حل إلى عنوان IP محدد. يمكن أن يكون ذلك مفيداً عندما تواجه قيود DNS، مثل DNS المنقسم أو خادم اختبار ترغب في التفاعل معه مؤقتاً.
تشغيل الأوامر
بمجرد تشغيل الحاوية، يمكنك تشغيل الأوامر داخل الحاوية باستخدام docker-compose run
. على سبيل المثال، ربما ترغب في بدء واجهة سطر الأوامر باستخدام Bash داخل حاويتك bookstack. للقيام بذلك، قم بتشغيل الأمر التالي.
الاستنتاج
في هذه المرحلة، يجب أن تكون لديك معلومات كافية لمتابعة غالبية دروس docker-compose الموجودة على الويب. وبهذا المعرفة، يمكنك توسيع قدرتك على الانتقال إلى عالم Docker وبناء تطبيقات الويب في بنية الأكواد التحتية.
Source:
https://adamtheautomator.com/docker-compose-tutorial/