كل بضع سنوات ، تشهد صناعة تطوير البرمجيات نقلة نوعية. يمكن التعرف على إحدى هذه الظواهر على أنها الاهتمام المتزايد بمفهوم الخدمات المصغرة. على الرغم من أن الخدمات المصغرة ليست من أحدث التقنيات ، إلا أن شعبيتها قد ارتفعت مؤخرًا بشكل كبير.
يتم الآن استبدال الخدمات المتجانسة الكبيرة بخدمات مصغرة مستقلة قائمة بذاتها. يمكن اعتبار الخدمة المصغرة كتطبيق يخدم غرضًا واحدًا ومحددًا للغاية. على سبيل المثال ، يمكن أن يكون نظام DBMS علاقيًا أو تطبيقًا سريعًا أو خدمة Solr.
في الوقت الحاضر ، من الصعب تخيل تطوير نظام برمجي جديد دون استخدام الخدمات المصغرة. وهذا الموقف ، بدوره ، يقودنا إلى منصة Docker.
عامل في حوض السفن
منصة التداول
دوكر يؤلف
Технология
عند العمل باستخدام Docker Compose ، يتم استخدام ملف YAML لتكوين خدمات التطبيقات وتنظيم تفاعلها مع بعضها البعض. وبالتالي ، فإن Docker Compose هي أداة لوصف وتشغيل تطبيقات Docker متعددة الحاويات.
حاويتان تعملان على نظام مضيف
صنع غنو
برنامج make
، في جوهرها ، هي أداة لأتمتة تجميع البرامج والمكتبات من التعليمات البرمجية المصدر. بشكل عام ، يمكن القول أن make
تنطبق على أي عملية تتضمن تنفيذ أوامر تعسفية لتحويل بعض المواد المصدر إلى نتيجة نهائية ما ، إلى غرض ما. في حالتنا ، الأوامر docker-compose
سيتم تحويلها إلى أهداف مجردة (
ليقول البرنامج make
حول ما نريده منها ، نحتاج إلى ملف Makefile
.
لدينا في Makefile
سوف تحتوي على الأوامر المعتادة docker
и docker-compose
، والتي تم تصميمها لحل مجموعة متنوعة من المشاكل. أي أننا نتحدث عن تجميع حاوية ، وبدء تشغيلها ، وإيقافها ، وإعادة تشغيلها ، وتنظيم دخول المستخدم إلى الحاوية ، والعمل مع سجلات الحاوية ، وحل المهام المماثلة الأخرى.
حالات الاستخدام النموذجية لـ Docker Compose
تخيل تطبيق ويب نموذجي يحتوي على المكونات التالية:
- قاعدة بيانات TimescaleDB (Postgres).
- تطبيق Express.js.
- بينغ (مجرد حاوية لا تفعل أي شيء خاص).
سيحتاج هذا التطبيق إلى 3 حاويات Docker وملف docker-compose
تحتوي على تعليمات لإدارة هذه الحاويات. سيكون لكل حاوية نقاط تفاعل مختلفة. على سبيل المثال ، مع الحاوية timescale
سيكون من الممكن العمل تقريبًا مثل العمل مع قواعد البيانات. وهي تتيح لك القيام بما يلي:
- تسجيل الدخول إلى قذيفة Postgres.
- استيراد وتصدير الجداول.
- خلق
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
نريد أن نبني محليًا. هذا هو بالضبط ما سيتم عمله بعد تنفيذ هذا الأمر.
بناء حاوية Docker
make start
- بدء تشغيل جميع الحاويات. لتشغيل حاوية واحدة فقط ، يمكنك استخدام أمر مثلmake start c=timescale
.
تشغيل حاوية مقياس الوقت
تشغيل حاوية ping
make login-timescale
- تسجيل الدخول إلى جلسة bash من الحاويةtimescale
.
تشغيل bash في حاوية مقياس الوقت
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 لدينا في
القراء الأعزاء! كيف يمكنك أتمتة العمل مع Docker Compose؟
المصدر: www.habr.com