هر څو کاله، د سافټویر پراختیا صنعت د تمثیل بدلون څخه تیریږي. د دې پدیدې څخه یوه د مایکرو خدماتو په مفهوم کې د مخ پر ودې علاقې په توګه پیژندل کیدی شي. که څه هم مایکرو خدمتونه نوې ټیکنالوژي نه ده، یوازې په دې وروستیو کې یې شهرت په لفظي توګه آسمان ته رسیدلی.
لوی واحد خدمتونه اوس د خپلواکو، خپلواکو کوچنیو خدماتو لخوا ځای په ځای شوي. د مایکرو سرویس د یو غوښتنلیک په توګه فکر کیدی شي چې یو واحد او خورا ځانګړي هدف ته خدمت کوي. د مثال په توګه، دا کیدای شي یو اړونده DBMS، د ایکسپریس غوښتنلیک، د سولر خدمت وي.
پدې ورځو کې ، د مایکرو خدماتو کارولو پرته د نوي سافټویر سیسټم رامینځته کولو تصور کول ګران دي. او دا وضعیت ، په بدل کې ، موږ د ډاکر پلیټ فارم ته رسوي.
ډاکر
فورمې
ډاکر جوړ کړئ
ټیکنالوژي
کله چې د ډاکر کمپوز سره کار کول ، د YAML فایل د غوښتنلیک خدماتو تنظیم کولو او د یو بل سره د دوی تعامل تنظیم کولو لپاره کارول کیږي. د ډاکر کمپوز له همدې امله د ملټي کانټینر ډاکر غوښتنلیکونو تشریح او چلولو لپاره وسیله ده.
دوه کانټینرونه په کوربه سیسټم کې روان دي
GNU جوړ کړئ
پروګرام make
، په اصل کې د سرچینې کوډ څخه د برنامو او کتابتونونو جوړولو اتومات کولو وسیله ده. په عموم کې، موږ کولی شو ووایو make
په هر هغه پروسې باندې تطبیق کیږي چې د خپل سري حکمونو اجرا کول پکې شامل وي ترڅو ځینې داخلي توکي په ځینې محصول فارم کې بدل کړي، ځینې هدف ته. زموږ په قضیه کې، امرونه docker-compose
په خلاصو اهدافو به بدل شي (
پروګرام ته ووایه make
د هغه څه په اړه چې موږ ترې غواړو، موږ یو فایل ته اړتیا لرو Makefile
.
زموږ کې Makefile
منظم حکمونه به ولري docker
и docker-compose
، کوم چې د ډیری ستونزو حل کولو لپاره ډیزاین شوي. د مثال په توګه ، موږ د کانټینر راټولولو په اړه خبرې کوو ، د پیل کولو په اړه یې ، د دې ودرولو ، بیا پیل کولو په اړه ، کانټینر ته د کارونکي ننوتل تنظیم کولو په اړه ، د کانټینر لاګونو سره کار کولو په اړه ، او د ورته نورو ستونزو حل کولو په اړه.
د ډاکر کمپوز لپاره د کارولو عادي قضیې
راځئ چې یو منظم ویب غوښتنلیک تصور کړو چې لاندې برخې لري:
- د TimescaleDB ډیټابیس (Postgres).
- د 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
د ډیټابیس په وړاندې د 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
، دا همکاري منظموي او غلطۍ کموي.
PS زموږ کې
ګرانو لوستونکو! تاسو د ډاکر کمپوز څنګه اتومات کوئ؟
سرچینه: www.habr.com