شنو هو Docker؟ شرح مبسط للمبتدئين
مرحبا بيك يلا كنتي devops engineer
ولا sysadmin
ولا غير مهتم بمجال المعلوميات، ضروري تكون سمعتي بكلمة Docker
. فشنو هو بالضبط هاد Docker
وعلاش داير هاد الضجة كلها؟ فهاد المقال، غانشرحو هادشي بطريقة ساهلة ومبسطة.
علاش جا Docker؟ المشكل ديال “خدامة عندي فالبيسي”
تخيل راسك صاوبتي واحد application
بال Python
مثلا. باش تخدمها، خاصك Python
بواحد ال version
معينة، وخاصك بزاف ديال المكتبات (libraries
) محددة. صاوبتي كلشي وخدم ليك داكشي ناضي فالحاسوب ديالك.
ملي جيتي تعطي هاد ال application
لشي صاحبك باش يجربها، ولا بغيتي تحطها فشي server
باش تولي online
، هنا كيبداو المشاكل: “آه معنديش نفس ال version
ديال Python
"، “ناقصاني واحد المكتبة”، “هادشي خدام ف Windows
وماخدامش ف Linux
”. هادي هي المشكلة المشهورة ديال “It works on my machine”.
هنا فين كايجي الدور ديال Docker
.
شنو هو الحل لي كيقدمو Docker؟
Docker
هو واحد المنصة (platform
) لي كتخليك “تغلّف” ال application
ديالك مع كاع داكشي لي كتحتاجو باش تخدم (بحال المكتبات، ال runtime
, الأدوات…) فواحد الباكيج واحد معزول ومستقل، هاد الباكيج كيتسمى container
.
الفكرة مستوحاة من حاويات الشحن البحرية. كيفما الحاوية تقدر تهز أي حاجة (سيارات، ملابس، أكل…) وكتسهال عملية النقل ديالها بأي باخرة أو شاحنة بلا ميهمهوم شنو كاين لداخل، حتى ال Docker container
كيهز ال application
ديالك وكتقدر تخدمو فأي بلاصة كتدعم Docker
(البيسي ديالك، البيسي ديال صاحبك، server
ف cloud
…) بلا مشاكل ديال التوافق.
المفاهيم الأساسية ديال Docker
باش تفهم Docker
مزيان، خاصك تعرف هاد المصطلحات:
Image
: هو القالب أو النموذج (template
) لي كيكون للقراءة فقط (read-only
). هو بحال شيclass
فالبرمجة. هاد الImage
فيه التعليمات كاملة باش تصاوب الcontainer
. مثلا،image
ديال واحد التطبيقNode.js
غايكون فيه نظام تشغيل خفيف (lightweight OS
) + الNode.js runtime
+ الكود ديال التطبيق ديالك.Container
: هو نسخة خدامة (running instance
) من داك الImage
. هو بحال شيobject
من ديك الclass
. تقدر تصاوب شحالما بغيتي ديال الcontainers
من نفس الimage
. كلcontainer
كيكون معزول على خوه وعلى النظام الرئيسي (host machine
).Dockerfile
: هو واحد الملف نصي (text file
) كتكتب فيه الأوامر والتعليمات خطوة بخطوة باشDocker
يبني ليك واحد الImage
مخصص للتطبيق ديالك. هو الوصفة باش تطيب الكيكة (الImage
).Docker Hub
/Registry
: هو بحالGitHub
ولكن ديال الImages
. هو واحد البلاصةonline
فين تقدر تلقىimages
واجدين (بحالimage
ديالUbuntu
,Node.js
,MySQL
…) وتقدر حتى نتا تحط فيه الimages
ديالك.
مثال بسيط: Dockerfile
تخيل عندنا application
بسيطة ب Node.js
. هادا مثال ديال Dockerfile
ديالها:
# 1. kankhtaro l image l asasiya li ghadi nbniw 3liha
# hna khtarina l image rasmiya dyal node.js l version 18
FROM node:18-alpine
# 2. kan7addo l working directory li khadi nkhdmo fih
WORKDIR /app
# 3. hna kancopiw l package.json w package-lock.json
COPY package*.json ./
# 4. kan installiw libraries li kay7tajha l application dyalna
RUN npm install
# 5. kancopiw l code dyal tatbi9 dyalna
COPY . .
# 6. hna kan7addo l port li l container dyalna ghadi ykhdm fih
EXPOSE 3000
# 7. l amr li ghadi ytnfd mli ybda l container
CMD ["node", "server.js"]
بهاد الملف البسيط، أي واحد عندو Docker يقدر يبني نفس ال Image ويخدم نفس ال Container بلا حتى شي مشكل.
تحياتي، كان معاكم براهيم