هر ڪجھ سالن کان، سافٽ ويئر ڊولپمينٽ انڊسٽري هڪ مثالي شفٽ کان گذري ٿو. انهن واقعن مان هڪ کي microservices جي تصور ۾ وڌندڙ دلچسپي طور سڃاتو وڃي ٿو. جيتوڻيڪ مائڪرو سروسز جديد ترين ٽيڪنالاجي نه آهن، صرف تازو ئي ان جي مقبوليت لفظي طور تي آسمان ڏانهن وڌي وئي آهي.
وڏيون monolithic خدمتون هاڻي آزاد، خودمختيار microservices سان تبديل ٿي رهيا آهن. هڪ microservice هڪ ايپليڪيشن جي طور تي سمجهي سگهجي ٿو جيڪا هڪ واحد ۽ تمام خاص مقصد جي خدمت ڪري ٿي. مثال طور، اهو ٿي سگهي ٿو هڪ تعلقي DBMS، هڪ ايڪسپريس ايپليڪيشن، هڪ سولر سروس.
اهي ڏينهن، مائڪرو سروسز استعمال ڪرڻ کان سواءِ هڪ نئون سافٽ ويئر سسٽم ٺاهڻ جو تصور ڪرڻ مشڪل آهي. ۽ اها صورتحال، موڙ ۾، اسان کي ڊاکر پليٽ فارم ڏانهن وٺي ٿي.
Docker
پليٽ فارم
Docker Compose
ٽيڪنالاجي
جڏهن ڊڪر ڪمپوز سان ڪم ڪري رهيو آهي، هڪ YAML فائل استعمال ڪئي ويندي آهي ايپليڪيشن سروسز کي ترتيب ڏيڻ ۽ انهن جي رابطي کي منظم ڪرڻ لاءِ هڪ ٻئي سان. تنهن ڪري ڊڪر ڪمپوز هڪ اوزار آهي بيان ڪرڻ ۽ هلائڻ لاءِ ملٽي ڪنٽينر ڊڪر ايپليڪيشنون.
ميزبان سسٽم تي هلندڙ ٻه ڪنٽينر
جي اين يو ٺاهيو
پروگرام make
، بنيادي طور تي پروگرامن ۽ لائبريرين جي تعمير کي خودڪار ڪرڻ لاءِ هڪ اوزار آهي سورس ڪوڊ مان. عام طور تي، اسان اهو چئي سگهون ٿا make
ڪنهن به عمل تي لاڳو ٿئي ٿو جنهن ۾ ڪجهه ان پٽ مواد کي تبديل ڪرڻ لاءِ صوابديدي حڪمن تي عمل ڪرڻ شامل آهي، ڪجهه مقصد تائين. اسان جي صورت ۾، حڪم docker-compose
تجريدي مقصدن ۾ تبديل ٿي ويندي (
پروگرام ٻڌائڻ لاءِ make
انهي بابت جيڪو اسان ان مان چاهيون ٿا، اسان کي هڪ فائل جي ضرورت آهي Makefile
.
اسان ۾ Makefile
باقاعده حڪمن تي مشتمل هوندو docker
и docker-compose
، جيڪي ڪيترن ئي مسئلن کي حل ڪرڻ لاءِ ٺهيل آهن. يعني، اسان هڪ ڪنٽينر گڏ ڪرڻ بابت ڳالهائي رهيا آهيون، ان کي شروع ڪرڻ بابت، ان کي روڪڻ، ان کي ٻيهر شروع ڪرڻ، صارف جي لاگ ان کي ڪنٽينر کي منظم ڪرڻ بابت، ڪنٽينر لاگ سان ڪم ڪرڻ بابت، ۽ ٻين ساڳئي مسئلن کي حل ڪرڻ بابت.
ڊاکر ڪمپوز لاءِ عام استعمال جا ڪيس
اچو ته تصور ڪريون هڪ باقاعده ويب ايپليڪيشن جنهن ۾ هيٺيان جزا آهن:
- TimescaleDB ڊيٽابيس (Postgres).
- Express.js ايپليڪيشن.
- پنگ (صرف هڪ ڪنٽينر، ڪجهه خاص نٿو ڪري).
هن ايپليڪيشن کي 3 Docker ڪنٽينرز ۽ هڪ فائل جي ضرورت پوندي 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
ڊيٽابيس جي خلاف SQL سوالن تي عمل ڪرڻ لاء.
PSql کي ٽائم اسڪيل بي ڪنٽينر ۾ هلائڻ
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
، هي تعاون کي منظم ڪري ٿو ۽ غلطيون گھٽائي ٿو.
پي ايس اسان ۾
پيارا پڙهندڙن! توهان Docker Compose ڪيئن خودڪار ڪندا آهيو؟
جو ذريعو: www.habr.com