Takeout عبارة عن أداة CLI لتدوير حاويات Docker الصغيرة، واحدة لكل من تبعيات بيئة التطوير لديك.
من المفترض أن يتم إقرانها بأداة مثل Laravel Valet. وهو متوافق حاليًا مع أنظمة التشغيل macOS وLinux وWindows 10 وWSL2.
مع takeout enable mysql
فأنت تقوم بتشغيل MySQL، ولا داعي للقلق أبدًا بشأن إدارة Homebrew MySQL أو إصلاحه مرة أخرى.
ولكن يمكنك أيضًا تمكين ElasticSearch وPostgreSQL وMSSQL وMongo وRedis والمزيد بسهولة باستخدام أمر بسيط. للحصول على قائمة الخدمات الحالية، انظر إلى الفئات المتوفرة في هذا الدليل: https://github.com/tighten/takeout/tree/main/app/Services
قم بتثبيت Takeout مع Composer عن طريق تشغيل:
composer global require " tightenco/takeout:~2.8 "
تأكد من وجود دليل ~/.composer/vendor/bin
في "PATH" الخاص بنظامك.
قم بتشغيل takeout
ثم اسم الأمر من أي مكان في جهازك.
إحدى فوائد Takeout الأساسية هي أنه يقوم بالتمهيد ("تمكين") أو حذف ("تعطيل") حاويات Docker لتبعياتك المختلفة بسرعة وسهولة.
نظرًا لأن Docker يوفر تخزينًا ثابتًا للحجم، فإن حذف الحاوية (وهو ما نطلق عليه "تعطيلها") لا يؤدي في الواقع إلى حذف بياناتها. وهذا يعني أنه يمكنك تمكين الخدمات وتعطيلها من خلال التخلي المتهور.
اعرض قائمة بجميع الخدمات التي يمكنك تمكينها.
takeout enable
مرت الاسم المختصر لخدمة واحدة أو أكثر، وتمكينهم.
takeout enable mysql
takeout enable redis meilisearch
إذا كنت تريد تخطي مطالبتك بكل معلمة وقبول الإعدادات الافتراضية فقط. يعمل هذا أيضًا مع خدمات متعددة في أمر واحد.
takeout enable mysql --default
takeout enable redis meilisearch --default
يمكنك تحديد وسيطات إضافية للحاوية بعد --
:
takeout enable mysql -- -hsome.mysql.host -usome-user
لاحظ أن هذه هي الوسائط الخاصة بالحاوية Entrypoint، وليست خيارات تشغيل عامل الإرساء الإضافية (انظر أدناه).
docker run
الإضافية أسفل الغطاء، يقوم أمر takeout enable
بإنشاء أمر docker run
. في بعض الأحيان قد ترغب في تحديد خيارات إضافية لأمر docker run
، مثل متغير بيئة إضافي أو تعيين حجم إضافي. يمكنك تمرير سلسلة تحتوي على جميع خيارات docker run
الإضافية باستخدام خيار --run=
:
takeout enable mysql --run= " {docker-run-options} "
والذي من شأنه أن يولد الأمر التالي:
docker run {docker-run-options} {service-options} mysql/mysql-server
حيث {docker-run-options}
هي الخيارات التي تحددها داخل خيار --run
ويتم إنشاء {service-options}
بناءً على الخيارات الافتراضية لتلك الخدمة.
docker run
مع وسيطات الحاوية يمكنك مزج خيارات run
ومطابقتها مع وسيطات الحاوية:
takeout enable mysql --run= " {docker-run-options} " -- -hsome.mysql.host -usome-user
اعرض قائمة بجميع الخدمات الممكّنة التي يمكنك تعطيلها.
takeout disable
قم بتمرير الاسم المختصر لخدمة واحدة أو أكثر، وقم بتعطيل الخدمات الممكّنة التي تتطابق معها بشكل وثيق.
takeout disable mysql
takeout disable redis meilisearch
takeout disable --all
إظهار قائمة بجميع الحاويات المتوقفة التي يمكنك تشغيلها.
takeout start
تم تمرير معرف الحاوية لحاوية واحدة أو أكثر من الحاويات المتوقفة، وبدء تشغيل الحاويات المتوقفة المطابقة لها.
takeout start {container_id}
takeout start {container_id1} {container_id2}
يمكنك تمرير العلامة -all
لبدء كافة الحاويات الممكّنة.
takeout start --all
إظهار قائمة بجميع الحاويات قيد التشغيل التي يمكنك إيقافها.
takeout stop
قم بتمرير معرف الحاوية لحاوية واحدة أو أكثر قيد التشغيل، قم بإيقاف تشغيل الحاويات المطابقة لها.
takeout stop {container_id}
takeout stop {container_id1} {container_id2}
من فوائد Takeout الأخرى أنه يسمح لك بتثبيت إصدارات متعددة من التبعية وتشغيلها في نفس الوقت. وهذا يعني، على سبيل المثال، أنه يمكنك تشغيل كل من MySQL 5.7 و8.0 في نفس الوقت، على منافذ مختلفة.
قم بتشغيل takeout enable mysql
مرتين؛ في المرة الأولى، سترغب في اختيار المنفذ الافتراضي ( 3306
) والإصدار الأول ( 5.7
)، وفي المرة الثانية، سترغب في اختيار المنفذ الثاني ( 3307
)، والإصدار الثاني ( 8.0
) و اسم وحدة تخزين مختلف (بحيث لا يشتركون في نفس mysql_data
).
الآن، إذا قمت بتشغيل takeout list
، فسترى كلا الخدمتين تعملان في نفس الوقت.
+--------------+----------------+---------------+-----------------------------------+
| CONTAINER ID | NAMES | STATUS | PORTS |
+--------------+----------------+---------------+-----------------------------------+
| 4bf3379ab2f5 | TO--mysql--5.7 | Up 2 seconds | 33060/tcp, 0.0.0.0:3306- > 3306/tcp |
| 983acf46ceef | TO--mysql--8.0 | Up 35 seconds | 33060/tcp, 0.0.0.0:3307- > 3306/tcp |
+--------------+----------------+---------------+-----------------------------------+
تتم إضافة حاويات Takeout تلقائيًا إلى شبكة Docker المسماة takeout
. يتيح لك هذا استخدام نفس الاسم المستعار والاسم المستعار الأساسي المستخدم للحاويات الأخرى.
يتم إعطاء كل حاوية اسمين مستعارين على هذه الشبكة:
يمكن للحاويات الأخرى الموجودة على شبكة Takeout الوصول إلى حاويات Takeout من خلال الأسماء المستعارة الخاصة بها. تحقق من هذه المقالة حول كيفية استخدام الشراع والإخراج معًا
للأسف، لا.
أولاً، قم بتشغيل lsof -i :3306
(حيث 3306 هو المنفذ غير المتاح.)
إذا رأيت الإخراج مثل هذا:
com.docke 936 mattstauffer 52u IPv6 0xc0d6f0b06d5c4efb 0t0 TCP localhost:mysql->localhost:62919 (FIN_WAIT_2)
TablePlus 96155 mattstauffer 16u IPv4 0xc0d6f0b0b6dccf6b 0t0 TCP localhost:62919->localhost:mysql (CLOSE_WAIT)
الحل هو إغلاق واجهة المستخدم الرسومية لقاعدة البيانات الخاصة بك، ومن ثم يجب إصدارها.
يؤدي استخدام docker-compose
إلى إعداد تبعياتك على أساس كل مشروع على حدة، وهي طريقة رائعة تمامًا للقيام بالأشياء. إذا كان من المنطقي بالنسبة لك أن يكون لديك نسخة واحدة من كل من تبعياتك لبيئتك العالمية بأكملها، فإن Takeout يبدو أكثر منطقية.
لا! سوف تظل بياناتك موجودة! بشكل افتراضي، تستخدم جميع خدماتنا تقريبًا "وحدة تخزين" لإرفاق بياناتك بها لهذا السبب بالضبط.
لذلك، عندما تقوم بتعطيل خدمة MySQL، على سبيل المثال، فإن وحدة التخزين هذه - بكل بياناتك الموجودة بها - ستبقى هناك بهدوء. وعند إعادة التمكين، طالما قمت بإرفاقه بنفس وحدة التخزين، ستظل جميع بياناتك موجودة.
أفضل طريقة لرؤية خططنا المستقبلية هي مراجعة لوحة المشاريع، ولكن إليك بعض الخطط للمستقبل:
self-remove
: هل يحذف جميع الخدمات الممكّنة ثم ربما يقوم بإلغاء التثبيت الذاتي؟upgrade
: تدمير الحاوية القديمة، وإحضار حاوية جديدة بعلامة محددة حديثًا (مطالبة المستخدم بذلك، الافتراضي latest
) والحفاظ على جميع المعلمات الأخرى (مثل المنفذ ووحدة التخزين) تمامًا مثل المعلمة القديمةpt/passthrough
: أوامر الوكيل تصل إلى عامل الإرساء ( ./takeout pt mysql stop
)إذا كنت تعمل معنا وتم تكليفك بدفع إصدار، فإليك العملية الأسهل:
main
( git checkout main && git pull
)php ./takeout app:build
)php ./builds/takeout list
)v1.5.1
)Publish release