ہر چند سالوں میں، سافٹ ویئر ڈویلپمنٹ کی صنعت ایک مثالی تبدیلی سے گزرتی ہے۔ ان مظاہر میں سے ایک کو مائیکرو سروسز کے تصور میں بڑھتی ہوئی دلچسپی کے طور پر تسلیم کیا جا سکتا ہے۔ اگرچہ مائیکرو سروسز جدید ترین ٹیکنالوجی نہیں ہیں، لیکن حال ہی میں اس کی مقبولیت لفظی طور پر آسمان کو چھو رہی ہے۔
بڑی یک سنگی خدمات کو اب آزاد، خود مختار مائیکرو سروسز سے تبدیل کیا جا رہا ہے۔ مائیکرو سروس کو ایک ایسی ایپلی کیشن کے طور پر سوچا جا سکتا ہے جو ایک واحد اور بہت ہی خاص مقصد کو پورا کرتی ہے۔ مثال کے طور پر، یہ ایک رشتہ دار DBMS، ایک ایکسپریس ایپلی کیشن، ایک سولر سروس ہو سکتی ہے۔
ان دنوں، مائیکرو سروسز کا استعمال کیے بغیر نیا سافٹ ویئر سسٹم تیار کرنے کا تصور کرنا مشکل ہے۔ اور یہ صورتحال، بدلے میں، ہمیں ڈوکر پلیٹ فارم کی طرف لے جاتی ہے۔
میں Docker
پلیٹ فارم
Docker Compose
Технология
Docker Compose کے ساتھ کام کرتے وقت، YAML فائل کا استعمال ایپلی کیشن سروسز کو ترتیب دینے اور ایک دوسرے کے ساتھ ان کے تعامل کو منظم کرنے کے لیے کیا جاتا ہے۔ ڈوکر کمپوز اس لیے ملٹی کنٹینر ڈوکر ایپلی کیشنز کو بیان کرنے اور چلانے کے لیے ایک ٹول ہے۔
میزبان سسٹم پر چلنے والے دو کنٹینرز
GNU بنائیں۔
پروگرام make
، بنیادی طور پر سورس کوڈ سے پروگراموں اور لائبریریوں کی تعمیر کو خودکار کرنے کا ایک ٹول ہے۔ عام طور پر ہم یہ کہہ سکتے ہیں۔ make
کسی بھی عمل پر لاگو ہوتا ہے جس میں کچھ ان پٹ مواد کو کچھ آؤٹ پٹ فارم میں، کسی مقصد میں تبدیل کرنے کے لیے صوابدیدی حکموں پر عمل درآمد شامل ہوتا ہے۔ ہمارے معاملے میں، احکامات docker-compose
تجریدی اہداف میں تبدیل ہو جائیں گے (
پروگرام بتانا make
اس کے بارے میں کہ ہم اس سے کیا چاہتے ہیں، ہمیں ایک فائل کی ضرورت ہے۔ Makefile
.
ہمارے میں Makefile
باقاعدہ کمانڈز پر مشتمل ہوگا۔ docker
и docker-compose
، جو بہت سے مسائل کو حل کرنے کے لیے بنائے گئے ہیں۔ یعنی، ہم کنٹینر کو جمع کرنے، اسے شروع کرنے، اسے روکنے، اسے دوبارہ شروع کرنے، کنٹینر میں صارف کے لاگ ان کو منظم کرنے کے بارے میں، کنٹینر لاگ کے ساتھ کام کرنے کے بارے میں، اور اسی طرح کے دیگر مسائل کو حل کرنے کے بارے میں بات کر رہے ہیں۔
ڈاکر کمپوز کے لیے عام استعمال کے کیسز
آئیے ایک باقاعدہ ویب ایپلیکیشن کا تصور کریں جس میں درج ذیل اجزاء ہوں:
- ٹائم اسکیل ڈی بی ڈیٹا بیس (پوسٹگریس)۔
- Express.js درخواست۔
- پنگ (صرف ایک کنٹینر، کچھ خاص نہیں کرتا)۔
اس ایپلیکیشن کو 3 ڈوکر کنٹینرز اور ایک فائل کی ضرورت ہوگی۔ docker-compose
، جس میں ان کنٹینرز کے انتظام کے لیے ہدایات موجود ہیں۔ ہر کنٹینر میں مختلف ٹچ پوائنٹ ہوں گے۔ مثال کے طور پر، ایک کنٹینر کے ساتھ timescale
تقریباً اسی طرح کام کرنا ممکن ہو گا جس طرح وہ ڈیٹا بیس کے ساتھ کام کرتے ہیں۔ یعنی، یہ آپ کو درج ذیل اعمال انجام دینے کی اجازت دیتا ہے:
- پوسٹگریس شیل میں لاگ ان کرنا۔
- میزوں کی درآمد اور برآمد۔
- تخلیق
pg_dump
میزیں یا ڈیٹا بیس۔
Express.js ایپلیکیشن کنٹینر، expressjs
مندرجہ ذیل صلاحیتیں ہو سکتی ہیں:
- سسٹم لاگ سے تازہ ڈیٹا فراہم کرنا۔
- کچھ حکموں پر عمل کرنے کے لیے شیل میں لاگ ان کریں۔
کنٹینرز کے ساتھ تعامل
ایک بار جب ہم ڈوکر کمپوز کا استعمال کرتے ہوئے کنٹینرز کے درمیان مواصلت قائم کر لیتے ہیں، تو یہ ان کنٹینرز کے ساتھ بات چیت کرنے کا وقت ہے۔ ڈوکر کمپوز سسٹم کے اندر ایک کمانڈ موجود ہے۔ 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
ڈوکر کمپوز کنفیگریشن کو منظم کرنے اور کنٹینرز کے ساتھ بات چیت کرنے کے لیے جو اس کی وضاحت کرتا ہے، ہم درج ذیل فائل بنائیں گے۔ 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
.
ٹائم اسکیل کنٹینر چلانا
پنگ کنٹینر چلانا
make login-timescale
کنٹینر کے باش سیشن میں لاگ ان کریں۔timescale
.
ٹائم اسکیل کنٹینر میں باش چلانا
make db-shell
--.داخلہpsql
ایک کنٹینر میںtimescale
ڈیٹا بیس کے خلاف ایس کیو ایل کے سوالات کو انجام دینے کے لیے۔
ٹائم اسکیلڈ بی کنٹینر میں پی ایس کیو ایل چل رہا ہے۔
make stop
کنٹینرز کو روکنا۔
ٹائم اسکیل کنٹینر کو روکنا
make down
کنٹینرز کو روکنا اور ہٹانا۔ کسی مخصوص کنٹینر کو ہٹانے کے لیے، آپ مطلوبہ کنٹینر کی وضاحت کرتے ہوئے اس کمانڈ کو استعمال کر سکتے ہیں۔ مثال کے طور پر -make down c=timescale
یاmake down c=api
.
تمام کنٹینرز کو روکنا اور حذف کرنا
کے نتائج
اگرچہ ڈوکر کمپوز ہمیں کنٹینرز کے انتظام کے لیے کمانڈز کا ایک بھرپور سیٹ فراہم کرتا ہے، لیکن بعض اوقات یہ کمانڈز طویل اور یاد رکھنا مشکل ہو جاتے ہیں۔
استعمال کا طریقہ 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 ہمارے میں
پیارے قارئین! آپ ڈوکر کمپوز کو خودکار کیسے بناتے ہیں؟
ماخذ: www.habr.com