كل بضع سنوات ، يحدث نقلة نوعية في صناعة تطوير البرمجيات. واحدة من هذه الظواهر هي الاهتمام المتزايد بمفهوم الخدمات الصغيرة. على الرغم من أن الخدمات المصغرة ليست أحدث التقنيات ، إلا أن شعبيتها ارتفعت مؤخرًا بشكل كبير.يتم استبدال الخدمات المتجانسة الكبيرة هذه الأيام بخدمات صغيرة مستقلة مستقلة. يمكن اعتبار الخدمة المصغرة بمثابة تطبيق يخدم غرضًا واحدًا ومحدّدًا للغاية. على سبيل المثال ، يمكن أن يكون تطبيق DBMS علاقي ، تطبيق Express ، خدمة Solr. في الوقت الحاضر ، من الصعب تخيل تطوير نظام برمجيات جديد دون استخدام الخدمات الدقيقة. وهذا الموقف ، بدوره ، يقودنا إلى منصة Docker.
عامل ميناء
أصبحت منصة Docker ، في تطوير ونشر الخدمات المصغرة ، معيارًا صناعيًا تقريبًا. على موقع المشروع على الإنترنت ، يمكنك معرفة أن Docker هو النظام الأساسي المستقل الوحيد للحاويات الذي يسمح للمؤسسات بإنشاء أي تطبيقات بسهولة ، بالإضافة إلى توزيعها وتشغيلها في أي بيئة - من السحب المختلطة إلى أنظمة الحدود.يؤلف عامل الميناء
تم تصميم تقنية Docker Compose لتكوين التطبيقات متعددة الحاويات. يمكن أن يتضمن مشروع Docker Compose العديد من حاويات Docker التي يحتاجها منشئ هذا المشروع.عند العمل مع Docker Compose ، يتم استخدام ملف YAML لتكوين خدمات التطبيق وتنظيم تفاعلها مع بعضها البعض. وبالتالي فإن Docker Compose أداة لوصف وتشغيل تطبيقات Docker متعددة الحاويات.حاويتين تعملان على النظام المضيفصنع غنو
البرنامج make
هو في الأساس أداة لأتمتة تجميع البرامج والمكتبات من التعليمات البرمجية المصدر. بشكل عام ، يمكننا أن نقول أنه make
ينطبق على أي عملية تتضمن تنفيذ أوامر تعسفية لتحويل مواد مصدر معينة إلى شكل معين ، إلى هدف معين. في حالتنا ، docker-compose
سيتم تحويل الفرق إلى أهداف مجردة (أهداف زائفة ).من أجل إخبار البرنامج make
بما نريد منه ، نحتاج إلى ملف Makefile
. سوف تحتويأوامرنا Makefile
المعتادة docker
وdocker-compose
مصممة لحل العديد من المشاكل. وبالتحديد ، نحن نتحدث عن تجميع حاوية ، وعن بدء تشغيلها ، وإيقافها ، وإعادة تشغيلها ، وعن تنظيم تسجيل دخول المستخدم إلى الحاوية ، وعن العمل مع سجلات الحاويات ، وعن حل مشكلات أخرى مماثلة.الاستخدامات النموذجية لتأليف عامل الميناء
تخيل تطبيق ويب عادي يحتوي على المكونات التالية:- قاعدة بيانات TimescaleDB (Postgres).
- تطبيق Express.js.
- بينج (مجرد حاوية لا شيء خاص).
سيحتاج هذا التطبيق إلى 3 حاويات Docker وملف docker-compose
يحتوي على تعليمات لإدارة هذه الحاويات. سيكون لكل حاوية حاويات مختلفة من التفاعل. على سبيل المثال ، timescale
يمكنك العمل مع حاوية بنفس الطريقة التي تعمل بها مع قواعد البيانات. وهي تسمح لك بتنفيذ الإجراءات التالية:- تسجيل الدخول إلى Postgres shell.
- جداول الاستيراد والتصدير.
- إنشاء
pg_dump
جدول أو قاعدة بيانات.
قد تحتوي حاوية تطبيق Express.js ،، expressjs
على الميزات التالية:- إخراج البيانات الجديدة من سجل النظام.
- أدخل الصدفة لتنفيذ أوامر معينة.
تفاعل الحاوية
بعد تكوين الاتصال بين الحاويات باستخدام Docker Compose ، حان الوقت لإنشاء تفاعل مع هذه الحاويات. كجزء من نظام Docker Compose ، هناك أمر docker-compose
يدعم خيارًا -f
يسمح لك بنقل ملف إلى النظام docker-compose.yml
.باستخدام إمكانيات هذا الخيار ، يمكنك قصر التفاعل مع النظام فقط على تلك الحاويات المذكورة في الملف docker-compose.yml
.ألق نظرة على كيفية ظهور تفاعلات الحاوية عند استخدام الأوامر docker-compose
. إذا تخيلنا أننا بحاجة إلى إدخال الصدفة psql
، فقد تبدو الأوامر المقابلة كما يلي:docker-compose -f docker-compose.yml exec timescale psql -Upostgres
قد يبدو الأمر نفسه الذي لا docker-compose
يستخدم docker
، ولكن يتم استخدامه ، كما يلي:docker exec -it edp_timescale_1 psql -Upostgres
يرجى ملاحظة أنه في مثل هذه الحالات ، يفضل دائمًا عدم استخدام الأمر docker
، ولكن الأمر docker-compose
، لأن هذا يلغي الحاجة إلى تذكر أسماء الحاويات.كلا الأمرين المذكورين أعلاه ليسا معقدين. ولكن إذا استخدمنا "الغلاف" في شكل Makefile
يمنحنا واجهة في شكل أوامر بسيطة واستدعاؤنا مثل هذه الأوامر الطويلة ، فيمكن تحقيق نفس النتائج كما يلي:make db-shell
من الواضح أن الاستخدام Makefile
يبسط العمل مع الحاويات بشكل كبير!مثال عملي
بناءً على مخطط المشروع أعلاه ، قم بإنشاء الملف التالي docker-compose.yml
:version: '3.3'
services:
api:
build: .
image: mywebimage:0.0.1
ports:
- 8080:8080
volumes:
- /app/node_modules/
depends_on:
- timescale
command: npm run dev
networks:
- webappnetwork
timescale:
image: timescale/timescaledb-postgis:latest-pg11
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
volumes:
- ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
networks:
- webappnetwork
ping:
image: willfarrell/ping
environment:
HOSTNAME: "localhost"
TIMEOUT: 300
networks:
webappnetwork:
driver: bridge
لإدارة تكوين Docker Compose وللتفاعل مع الحاويات التي تصفها ، قم بإنشاء الملف التالي Makefile
:THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
make -pRrq -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
docker-compose -f docker-compose.yml build $(c)
up:
docker-compose -f docker-compose.yml up -d $(c)
start:
docker-compose -f docker-compose.yml start $(c)
down:
docker-compose -f docker-compose.yml down $(c)
destroy:
docker-compose -f docker-compose.yml down -v $(c)
stop:
docker-compose -f docker-compose.yml stop $(c)
restart:
docker-compose -f docker-compose.yml stop $(c)
docker-compose -f docker-compose.yml up -d $(c)
logs:
docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
docker-compose -f docker-compose.yml ps
login-timescale:
docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
تنطبق معظم الأوامر الموصوفة هنا على جميع الحاويات ، ولكن استخدام الخيار c=
يسمح لك بتحديد نطاق الأمر بحاوية واحدة.بمجرد Makefile
أن تصبح جاهزًا ، يمكنك استخدامه على النحو التالي:make help
- إصدار قائمة بجميع الأوامر المتاحة لـ make
.
تعليمات الأوامر المتوفرةmake build
- تجميع الصورة من Dockerfile
. في مثالنا ، استخدمنا الصور الموجودة timescale
و ping
. api
لكننا نريد جمع الصورة محليًا. هذا بالضبط ما سيتم القيام به بعد تنفيذ هذا الأمر.
تجميع حاوية عامل الميناءmake start
- إطلاق جميع الحاويات. لبدء حاوية واحدة فقط ، يمكنك استخدام أمر النموذج make start c=timescale
.
إطلاق الحاوية الزمنيةقم بتشغيل حاوية pingmake login-timescale
- الدخول في جلسة باش للحاوية timescale
.
تشغيل باش في حاوية مقياس زمنيmake db-shell
- قم بتسجيل الدخول psql
إلى الحاوية timescale
لتنفيذ استعلامات SQL لقاعدة البيانات.
تشغيل psql في حاوية قياس الوقتmake stop
- إيقاف الحاويات.
إيقاف الحاوية الزمنيةmake down
- إيقاف وإزالة الحاويات. لحذف حاوية معينة ، يمكنك استخدام هذا الأمر مع الحاوية المحددة. على سبيل المثال - make down c=timescale
أو make down c=api
.
أوقف وحذف جميع الحاوياتملخص
على الرغم من حقيقة أن نظام Docker Compose يمنحنا مجموعة واسعة من الأوامر المصممة لإدارة الحاويات ، إلا أن هذه الأوامر تصبح أحيانًا طويلة ، ونتيجة لذلك قد يكون من الصعب تذكرها. ساعدتنامنهجية الاستخدام Makefile
على إنشاء تفاعل سريع وسهل مع الحاويات من الملف docker-compose.yml
. وبالتحديد نتحدث عن الآتي:- ,
docker-compose.yml
, . - , ,
make help
. - , . ,
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
make db-shell
. Makefile
, , . , .Makefile
, .
PS لدينا في السوق هناك عامل الميناء الصورة ، التي يتم تثبيتها في نقرة واحدة. يمكنك التحقق من تشغيل الحاويات على VPS . يتم منح جميع العملاء الجدد 3 أيام مجانًا للاختبار.القراء الأعزاء! كيف تقوم بأتمتة العمل مع Docker Compose؟