Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
- [Rate Limiting](#rate-limiting)
- [Database Cheatsheet for System Design](#database-cheatsheet-for-system-design)
- [Security](#security)
- [Json Web Token](#json-web-token)
- [Json Web Token](#json-web-token)[
- [How to Store Passwords In Databases](#how-to-store-passwords-in-databases)
- [Databases](#databases)
- [Optimistic Locking](#optimistic-locking)
Expand Down Expand Up @@ -62,6 +62,7 @@
- [Agile](#agile)
- [Agile Method](#agile-method)
- [Estimated Time for Task](#estimated-time-for-task)
- [Docker](#docker)

## Distributed Systems and System Design

Expand Down Expand Up @@ -1619,7 +1620,22 @@ git commit -m 'ci: Integrate automated testing into continuous integration pipel

2. برضوا متنساش تحسب وقت للمخاطر اللي ممكن تحصل، ممكن تكون حسبت وقت أحد المهام الفرعية غلط وليكن 3 ساعات وهو أخذ منك 5 ساعات. طب تحسبه ازاى؟ ده يتراوح بين 5% إلى 15% على المهمة كلها.

3. كمان لازم ناخد بالنا من حاجة مهمة جدًا وهى الحاجات اللي ممكن تسبب التسويف -زي الاجتماعات-، ده وقت ضايع كده زى ماتشات الكورة مش بتبقى فى الحسبان تمامًا ومتقدرش تعرفه ولا تتوقعه طب تحسبه ازاى؟ ده يتراوح بين 5% الى 10% على المهمة كلها.
3. كمان لازم ناخد بالنا من حاجة مهمة جدًا وهى الحاجات اللي ممكن تسبب التسويف -زي الاجتماعات-، ده وقت ضايع كده زى ماتشات الكورة مش بتبقى فى الحسبان تمامًا ومتقدرش تعرفه ولا تتوقعه طب تحسبه ازاى؟ ده يتراوح بين 5% الى 10% على المهمة كلها.

## Docker
الـ Docker هو أداة بتساعدك تبني، وتشغل، وتنقل التطبيقات في حاويات (Containers). الفكرة الأساسية هي إن الحاويات دي بتسمح لك إنك تحط كل حاجة محتاجها لتشغيل التطبيق - زي الكود، والمكتبات، وكل الـ dependencies - في مكان واحد، بحيث تقدر تشغل التطبيق ده على أي جهاز بدون ما تحتاج تقلق من اختلافات البيئات أو الأنظمة.

ببساطة، بدل ما تتعب في إعداد البيئة التشغيلية على كل جهاز هتشغل عليه التطبيق بتاعك، الـ Docker بيحطلك كل اللي محتاجه في حاوية واحدة جاهزة للتشغيل في أي مكان. الحاويات دي بتكون خفيفة وسريعة جداً لأنها بتشارك نفس الـ Kernel مع النظام الأساسي، على عكس الـ Virtual Machines اللي بتحتاج تشغيل نظام تشغيل كامل داخل جهاز افتراضي.

طيب، إمتى أستخدم Docker؟ ده بيعتمد على متطلبات النظام اللي شغال عليه. لو عندك تطبيق معقد ليه Dependencies كتيرة وعايز تشغله على أكتر من جهاز أو تنقله بين بيئات مختلفة (زي بين البيئة المحلية وبيئة الإنتاج)، ساعتها الـ Docker هيكون مفيد جداً. ده بيكون مهم بشكل خاص في بيئات الـ Microservices، لأنك بتقدر تحط كل خدمة في حاوية مستقلة، وتتحكم فيها بشكل منفصل.

فيه حاجة مهمة اسمها Dockerfile، ده ملف بتكتبه علشان توصف إزاي تبني الحاوية بتاعتك. بتحدد فيه النظام الأساسي، والمكتبات اللي محتاجها، وإزاي تشغل التطبيق. بعد ما تكتب الـ Dockerfile، بتستخدمه لبناء صورة (Image)، والصورة دي بتكون نسخة جاهزة للتشغيل من التطبيق بتاعك. لما تيجي تشغل الصورة دي، بتتحول لحاوية.

طيب، إيه المميزات والعيوب؟ الميزة الأساسية هي إن الحاويات بتديك مرونة وسهولة في نقل التطبيقات بين البيئات المختلفة. كمان بتساعد في تحسين الكفاءة بتاع السيرفرات، لأنك بتقدر تشغل أكتر من حاوية على نفس السيرفر بدون ما تضيع موارد كتير.

أما العيوب، فهي إنك لازم تكون عارف كويس إزاي تدير الحاويات دي، لأنها ممكن تتعقد لو كنت شغال على تطبيق كبير أو معقد. كمان فيه تحديات مرتبطة بالأمان، لأن مشاركة الـ Kernel بين الحاويات ممكن يعرضك لمخاطر لو فيه ثغرة في النظام الأساسي.

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



Expand Down