بعد Docker + Laravel =؟ أريد أن أتحدث عن طريقة غير عادية إلى حد ما لاستخدام أداة إنشاء عامل الميناء.
بالنسبة للمبتدئين ، بالنسبة لأولئك الذين لا يعرفون سبب الحاجة إلى تكوين عامل الميناء. هذه أداة مساعدة تسمح لك بتشغيل مجموعة من الخدمات ذات الصلة التي تم تعبئتها في حاويات عامل ميناء على مضيف منفصل. تمت كتابة النسخة الأولية بلغة بايثون ويمكن تثبيتها بطريقتين:
- عبر مدير الحزم لنظام التشغيل (
apt install docker-compose
for Ubuntu and yum install docker-compose.noarch
for Centos) - عن طريق مدير تبعية الثعبان (
pip install docker-compose
)
المشكلة مع الطريقة الأولى هي أنه عادة في مستودعات نظام التشغيل المكون من عامل الميناء في الإصدار القديم. هذه مشكلة إذا كنت بحاجة إلى استخدام أحدث إصدار من برنامج docker demon أو استخدام ميزات خاصة بإصدار معين من تنسيق ملف docker-compose.yaml (يمكن العثور على مصفوفة الميزات المدعومة عن طريق إصدارات التنسيق وإصدارات أداة تكوين docker على موقع docker الرسمي).
الآن مطوري عامل ميناء أعاد كتابة الأداة المساعدة على الذهاب ، ارتكب خطأ ، في الواقع قام بتعبئة نص بايثون بالبيئة في حزمة واحدة وقدمها كملف ثنائي ، والذي يسمح لك بتثبيته بالطريقة التالية (هذه هي الطريقة الحالية الموصى بها):
نحن ننظر إلى أحدث إصدار على https://github.com/docker/compose/releases ونقوم بتنزيله
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
قم بتعيين الحقوق لتشغيل التطبيق
$ sudo chmod +x /usr/local/bin/docker-compose
بالإضافة إلى ذلك ، يمكنك تعيين الإكمال التلقائي لمفسري الأمر bash و zsh
تحقق من التثبيت
$ docker-compose --version docker-compose version 1.22.0, build 1719ceb
أعتقد أن ثنائي واحد رائع جدًا ، لأنه لسنا بحاجة لسحب تبعيات الثعبان. نعم ، وبصفة عامة - ربما تم كسر بيئة بيثون بالكامل على الجهاز المستهدف ، والذي نريد تكوينه !!!

مثال على الارتباك في بيئة الثعبان
ولكن لا يزال هناك طريق رابع ، أردت التحدث عنه. هذه هي القدرة على تشغيل Docker-compose من خلال docker. في الواقع ، هناك بالفعل صور رسمية تم جمعها على Docker Hub ( https://hub.docker.com/r/docker/compose/ ). لماذا قد تكون هناك حاجة إليها؟
- إذا أردنا العمل مع العديد من إصدارات Docker-compose في نفس الوقت (على الرغم من أن الإصدار الثابت الأخير يكفي عادةً)
- إذا لم يكن لدينا بيثون أو لا نريد استخدامه (على سبيل المثال ، لدينا توزيع خفيف الوزن من حاوية CoreOS Linux )
- استخدامها في خطوط الأنابيب CI / CD.
دعونا نجرب!
كما قمنا عادةً بإطلاق الحاويات:
$ docker-compose up -d
من خلال أداة معبأة في حاوية عامل ميناء:
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v "$PWD:/rootfs/$PWD" -w="/rootfs/$PWD" docker/compose:1.13.0 up -d
مطول جدا ، هاه؟ يمكن كسر الدماغ لتذكر كل هذه المعلمات. لذلك ، سنحاول أن نجعل حياتنا أسهل ونكتب غلافًا بلغة الصدفة. لكن أولاً ، لنلق نظرة على المعلمات التي تم تمريرها:
--rm
- يزيل الحاوية المؤقتة بعد التوقف ، أي نحن لا نترك القمامة في النظام-v /var/run/docker.sock:/var/run/docker.sock
: -v /var/run/docker.sock:/var/run/docker.sock
- بدون هذا ، لن يتمكن -v /var/run/docker.sock:/var/run/docker.sock
- -v /var/run/docker.sock:/var/run/docker.sock
على المضيف-v "$PWD:/rootfs/$PWD" -w="/rootfs/$PWD"
- يسمح لك بإعادة توجيه الدليل الحالي داخل الحاوية بحيث ترى الأداة ملف إرساء
ما زلنا نفتقر إلى القدرة على استيفاء القيم في ملف إنشاء عامل الميناء. هذه هي العملية التي تستبدل بها الأداة متغيرات البيئة في ملف YAML. على سبيل المثال ، في جزء
version: "2.1" services: pg: image: postgres:9.6 environment: POSTGRES_USER: ${POSTGRES_DB_USER} POSTGRES_PASSWORD: ${POSTGRES_DB_PASSWORD}
سيتم قراءة المتغيرات POSTGRES_DB_USER
و POSTGRES_DB_PASSWORD
من البيئة. وهذا يجعل من الممكن تصميم ملفات إنشاء عامل إرساء بدرجة معينة من الراحة. على سبيل المثال نحتاج إلى التقاط البيئة من الجهاز المضيف ونقلها داخل الحاوية.
دعنا نحل المشكلة بكتابة نص باش.
#!/bin/sh # TMPFILE=$(mktemp) # env > "${TMPFILE}" # VERSION="1.13.0" # docker-compose docker run \ --rm \ -e PWD="$PWD" \ --env-file "${TMPFILE}" \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$PWD:/rootfs/$PWD" \ -w="/rootfs/$PWD" \ docker/compose:"${VERSION}" \ "$@" # rm "{$TMPFILE}"
ظهرت خطوط إضافية:
-e PWD="$PWD"
- فقط في حالة إعادة توجيه الدليل الحالي--env-file "${TMPFILE}"
- هنا يتم نقل جميع متغيرات البيئة الأخرى من الجهاز المضيفdocker/compose:"${VERSION}"
- اسم الصورة ، خذ النسخة من المتغير"$@"
- يتيح لك هذا البناء استخدام النص البرمجي كما لو كان أداة إنشاء الرصيف ، أي يمرر وسائطه بشفافية إلى حاوية عامل الميناء.
يمكننا حفظ البرنامج النصي ، على سبيل المثال ، في /usr/local/bin/docker-compose
docker-compose ، وتعيين علامة eXecute عليه واستخدامه. لا يتظاهر النص أعلاه بأنه خالٍ من الأخطاء أو العيوب بنسبة 100٪ وهو بالأحرى مثال على الطريقة.
نحن أنفسنا نستخدم خطوط الأنابيب CI / CD بهذه الطريقة. هذا يوفر حتى بعض حركة المرور إلى حد ما. يتم التقاط صورة هدف عامل الميناء من ذاكرة التخزين المؤقت المحلية.