منذ أن لاحظت أن التطبيق الذي قمنا بإعداده قد توسع بشكل كبير، قررت أن أجد طريقة جديدة تمامًا لأتمتة عملية إطلاقه. كان من المهم بالنسبة لي أن أجد حلاً يجعل من الممكن تفعيل الميزات الجديدة بشكل منفرد.
مقدمة
سيؤدي اكتشاف طريقة أبسط لأتمتة العمليات إلى تحسين كبير في عملي وكذلك في عمل كل الفريق. فكرت "لماذا لا نستخدم Docker؟"
خلال مرحلة الإعداد، قمت بإنشاء إعدادين: أحدهما للتطبيق الأمامي، والآخر لواجهة برمجة التطبيقات. يمكنك الاطلاع أدناه على عرض لما تعلمته خلال عملية التطوير.
المشكلة الأولى
أريد أن يكون لدي مستودع مستنسخ في الحاوية، لذلك أضفت مفتاح ssh عبر الأمر ADD في Dockerfile:
إضافة ~/.ssh/Testowy
وفجأة، لم يتم العثور على الملف. لماذا؟
لنفترض أن لدينا بنية المجلدات التالية:
حوض السفن/
|-- الأشياء/
| |-- test.txt
|-- ملف قفص الاتهام
خادم/
|-- البيانات
| |-- الإعداد.yml
تشغيل الأمر البناء
في قائمة انتظار تسجيل الدخول
مجلد ويمكنك فقط إضافة ملفات من المجلد المحلي ومجلداته الفرعية المحلية، مثل الأشياء.
إذا كنت ترغب في إضافة الخادم
المجلد، ستتلقى رسالة "غير قادر على إعداد السياق"
دوكريجنور
هل تساءلت يومًا عن سبب استغراق الصورة وقتًا طويلاً في الإنشاء؟ ربما لم تستخدم .dockerignore
لتجاهل الملفات غير الضرورية في الصورة. إن .git
يجب إزالة المجلد تلقائيًا وكذلك أي ملفات مؤقتة.
ترتيب الأوامر في ملف Dockerfile
يقوم Docker بحفظ كل سطر من Dockerfile وبعد البناء يتم حفظ كل سطر كطبقة. من المهم جدًا عدم تغيير ترتيب أوامر معينة كثيرًا.
من أوبونتو
قم بتشغيل apt-get install -y software-properamics-common بايثون
تشغيل إضافة-إضافة-مستودع-آب-مستودع ppa:chris-lea/node.js
RUN echo echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /> /etc/apt/sources.list
تشغيل apt-get update
قم بتشغيل apt-get install -y nodejs
قم بتشغيل apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1
قم بتشغيل mkdir /var/www
إضافة التطبيق.js /var/www/app.js
CMD ["/usr/bin/node"، "/var/www/app.js"]
على سبيل المثال، إذا قمت بتغيير السطر الأخير في ملف Dockerfile، فسيتم تنزيل جميع الأسطر السابقة من ذاكرة التخزين المؤقت بينما سيتم تعديل السطر الأخير. عندما تستبدل السطر رقم 4، فسيتم تعديل جميع الأسطر التي تبدأ من السطر 4 حتى النهاية. لهذا السبب يجدر بك وضع الأوامر التي لن تتغير، في بداية الملف.
نسخ الملفات إلى صورة
يجدر التفكير في الغرض الذي ستستخدم فيه صورة معينة. إذا كنت بحاجة إليها لتشغيل خدمة مرة واحدة، فما عليك سوى نسخ الكود المحتوى مباشرة إلى الصورة:
نسخ . /workdir
لسوء الحظ، هذا يجعل من المستحيل تحرير الملفات، وفي كل مرة تريد تحرير الشيفرة البرمجية الخاصة بك، سيكون عليك إنشاء الصورة مرة أخرى.
إذا كنت تستخدم نظام MacOS وترغب في استخدام الصورة المدمجة للتطوير، فعليك التعامل مع هذا الأمر بطريقة مختلفة قليلاً. إذا كنت ستستخدم وحدات التخزين، فعليك أن تكون مستعدًا أن هذا حل بطيء للغاية (على سبيل المثال يتم نسخ ملف من المضيف إلى الحاوية بسرعة 4.5 ميجابايت/ثانية، بينما يتم النسخ داخليًا في الحاوية بسرعة أعلى من 10-20 مرة). لحسن الحظ، كما ترى في الرابط، فإن المشكلة معروفة وحلها هو المشكلة الرئيسية للفريق المسؤول عن تطوير Docker لنظام التشغيل Mac.
كيف يمكنك استخدام Docker للتطوير في هذه الحالة؟
يمكنك استخدامه للخدمات الخارجية، مثل Redis/PSQL/PSQL/lasticsearch أو استخدام الحلول الجاهزة التي توفر rsync: https://github.com/brikis98/docker-osx-dev
خلاصة القول
إذا كان لديك فريق كبير وترغب في اختبار ميزة جديدة، فسيكون docker الأداة المثالية! ومع ذلك، هل سأستخدمها لإطلاق الإنتاج لخادم؟ لست مقتنعاً تماماً بعد...
بالإضافة إلى ذلك، أوصي ببعض المقالات البارزة: