Docker 101 - كيفية الانتقال من الإنشاء إلى النشر

Docker هو تغيير قواعد اللعبة ، وقد غيّر إلى حد كبير عالم تطوير التطبيقات. تعلم المهارات الحيوية اللازمة للعمل مع تقنية الحاويات هذه اليوم.

ما هو Docker؟

بعبارات بسيطة ، Docker هي أداة تتيح للمطورين إنشاء التطبيقات ونشرها وتشغيلها في الحاويات. الحاوية هي استخدام حاويات Linux لنشر التطبيقات.

فلماذا يعتبر Docker رائعًا جدًا ، ولماذا يجب علينا كمطورين حتى أن نتعلمه؟

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

الآن بعد أن عرفنا سبب كون Docker مشكلة كبيرة ، دعنا نثبتها على أجهزتنا المحلية.

قم بالتسجيل للحصول على حساب على Docker Hub وتنزيل تطبيق Docker Desktop المجاني.

كيف يختلف Docker عن الأجهزة الافتراضية التقليدية؟

الحاوية تعمل أصلاً على Linux وتشارك نواة الجهاز المضيف مع الحاويات الأخرى. يتم تشغيله كعملية منفصلة ، ولا يأخذ ذاكرة أكثر من أي ملف تنفيذي آخر ، مما يعني أنه خفيف الوزن للغاية.

على النقيض من ذلك ، يقوم الجهاز الظاهري (VM) بتشغيل نظام تشغيل "ضيف" كامل مع وصول افتراضي إلى موارد المضيف من خلال برنامج Hypervisor. بشكل عام ، توفر الأجهزة الظاهرية بيئة بها موارد أكثر مما تحتاجه معظم التطبيقات.

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

أوامر عامل ميناء

لاختبار أن لديك إصدارًا قيد التشغيل من Docker ، قم بتشغيل الأمر التالي:

docker --version

لاختبار ما إذا كان التثبيت يعمل بشكل مثالي ، حاول تشغيل صورة Docker hello-world البسيطة :

docker run hello-world

إذا تم إعداد كل شيء بشكل صحيح ، فسترى إخراجًا مشابهًا لما يلي:

Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world ca4f61b1923c: Pull complete Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7 Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. ... 

لمشاهدة صورة Docker hello-world التي تم تنزيلها على جهاز الكمبيوتر الخاص بك ، استخدم أمر Docker image list الأمر:

docker image ls

رائع! لقد بدأت بالفعل في تطوير تطبيقات حاويات باستخدام Docker. فيما يلي بعض أوامر Docker الأساسية المفيدة:

## List Docker CLI commands docker docker container --help ## Display Docker version and info docker --version docker version docker info ## Execute Docker image docker run hello-world ## List Docker images docker image ls ## List Docker containers (running, all, all in quiet mode) docker container ls docker container ls --all docker container ls -aq 
الحاوية تجعل CI / CD سلسًا. فمثلا:
  • التطبيقات ليس لها تبعيات النظام
  • يمكن دفع التحديثات إلى أي جزء من التطبيق الموزع
  • يمكن تحسين كثافة الموارد.
  • باستخدام Docker ، يعد توسيع نطاق تطبيقك مسألة تدور حول الملفات التنفيذية الجديدة ، وليس تشغيل مضيفات VM الثقيلة.

لنقم ببناء تطبيق ويب Node.js باستخدام Docker

أول شيء نقوم به هو إنشاء package.jsonملف. يمكننا القيام بذلك بسرعة عن طريق تشغيل الأمر التالي:

npm init -y 

يؤدي هذا إلى إنشاء الملف أعلاه مع بعض الحقول الأساسية التي تم ملؤها بالفعل أو تركها فارغة.

يجب أن يبدو ملفك كما يلي:

{ "name": "app-name", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "", "license": "ISC" } 

بعد ذلك ، نقوم بتثبيت express.js، والذي وفقًا للموقع الرسمي ، هو " إطار عمل ويب بسيط وسريع وغير معلن لـ Node.js ".

نقوم بذلك عن طريق تشغيل الأمر التالي في Terminal:

npm install express --save 

يضيف الأمر أعلاه express.jsإطار العمل إلى تطبيقنا ، حيث تعمل علامة حفظ - كتعليمات للتطبيق لاستخدامها كاعتماديةexpress.js .

الآن ، انتقل إلى الخاص بك package.jsonوقم بتغيير "main": "index.js"زوج القيمة الرئيسية إلى ما يلي:

"main": "app.js" 

بعد ذلك ، قم بإنشاء .gitignoreملف باستخدام الأمر التالي:

touch .gitignore 

ثم أضف السطر التالي:

node_modules/ 

هذا يمنع مجلد node_modules الضروري node.jsللتطوير من أن يتعقبه git.

أضف الآن الكود التالي إلى app.jsالملف:

const express = require('express'); const app = express(); const PORT = 8080; const HOST = '0.0.0.0'; app.get('/', (req, res) => { res.send( ` 

Home

Docker is awesome!

Next Page ` ) }); app.get('/more', (req, res) => { res.send( `

Page Two

Node.js is pretty great too!!

Back Home ` ) }); app.listen(PORT, HOST); console.log(`Running on //${HOST}:${PORT}`);

لتشغيل هذا على جهازك المحلي ، قم بتشغيل الأمر التالي في مجلد التطبيق:

npm start 

ستجد التطبيق قيد التشغيل في //0.0.0.0:8080/

رائع!

تهانينا

تهانينا على الوصول إلى هذا الحد

في Dockerverse

الآن قم بإنشاء Dockerfileالأمر التالي:

touch Dockerfile 

ثم أضف الكود التالي:

# An official Docker image for Node.js FROM node:10-alpine # Working directory for the containerised application WORKDIR /src/app # This copies significant package.json files to the current directory COPY package*.json ./ # Install essential Node.js dependencies RUN npm install COPY . . # Opens up this port on the Docker container EXPOSE 8080 # This starts the Docker application CMD [ "npm", "start" ] 

تحاول التعليقات أعلاه شرح ما يفعله كل Dockerfileأمر.

أضف أيضًا dockerignoreملفًا لمنع وضع بعض مكونات التطبيق في حاويات.

ضع هذا داخل dockerignoreالملف:

node_modules npm-debug.log Dockerfile* docker-compose* .dockerignore .git .gitignore README.md LICENSE 

كيفية النشر

هذا هو الاسم الذي تخصصه لتطبيق Docker الخاص بك ، وهو في الأساس مجرد مؤشر إصدار لصورة Docker الخاصة بك.

  • docker build -t image-name:tag .

قم بتشغيل هذا للوصول إلى حساب Docker من جهازك الطرفي.

  • docker login

أنشئ مستودعًا على Docker Hub.

علامة للتحميل على التسجيل.

  • docker tag username/repository:tag

قم بتحميل الصورة ذات العلامات إلى التسجيل.

  • docker push username/repository:tag

قم بتشغيل حاوية Docker المنشورة على جهازك المحلي عن طريق توصيل منافذها. استهدف المنفذ 8080 المكشوف ، وقم بتعيينه للمنفذ 10203 على جهازك.

  • docker run -p 10203:8080 username/repository:tag

هذا هو! لقد قمت بإنشاء ونشر تطبيق ويب Node.js حاوية.

يمكن العثور على كل الكود أعلاه في مستودع Github هذا.

نشرت أصلا هنا على blog.ninte.dev