Ădo disa vjet, nĂ« industrinĂ« e zhvillimit tĂ« softuerit ndodhin ndryshime paradigme. NjĂ« nga kĂ«to fenomene mund tĂ« pranohet si rritja e interesit pĂ«r konceptin e mikroshĂ«rbimeve. MegjithĂ«se mikroshĂ«rbimet janĂ« njĂ« teknologji e njohur, vetĂ«m sĂ« fundmi popullariteti i saj shpĂ«rtheu.
Shërbimet e mëdha monolite sot zëvendësohen nga mikroshërbime autonome dhe të pavarura. Një mikroshërbim mund të konsiderohet si një aplikacion që shërben për një qëllim të vetëm dhe shumë specifik. Për shembull, mund të jetë një DBMS relational, një aplikacion Express, ose një shërbim Solr.
Sot është e vështirë të imagjinohet zhvillimi i një sistemi të ri softujor pa përdorimin e mikroshërbimeve. Kjo situatë, nga ana e saj, na çon te platforma Docker.
Docker
Platforma , nĂ« zhvillimin dhe shpĂ«rndarjen e mikroshĂ«rbimeve, Ă«shtĂ« bĂ«rĂ« standard industrial. NĂ« faqen e projektit mund tĂ« mĂ«sohet se Docker Ă«shtĂ« platforma e vetme e pavarur e konteinerizimit qĂ« lejon organizatat tĂ« krijojnĂ« pa shumĂ« vĂ«shtirĂ«si aplikacione dhe t'i shpĂ«rndajnĂ« dhe ekzekutojnĂ« ato nĂ« çdo mjedis â nga reja hibride deri te sistemet nĂ« kufi.
Docker Compose
Shkenca është e destinuar për konfigurimin e aplikacioneve me shumë konteinerë. Në një projekt Docker Compose mund të përfshihen aq konteinerë Docker sa dëshiron krijuesi i këtij projekti.
Kur punoni me Docker Compose për të konfiguruar shërbimet e aplikacionit dhe për të organizuar ndërveprimin e tyre të ndërsjellë, përdoret një skedari YAML. Docker Compose, kështu, është një mjet për përshkrimin dhe nisjen e aplikacioneve Docker me shumë konteinerë.

Dy konteinerë që punojnë në sistemin host
GNU Make
Programi make, në esencë, paraqet një mjet për automatizimin e ndërtimit të programeve dhe bibliotekave nga kodet burimorë. Në përgjithësi, mund të flasim se make është e aplikueshme në çdo proces që përfshin ekzekutimin e komandave të rastit për të transformuar disa materiale fillestare në një formë përfundimtare, në një qëllim. Në rastin tonë, komandat docker-compose do të kthehen në qëllime abstrakte ().
Për të komunikuar me programin make për atë që ne duam prej tij, na nevojitet një skedar Makefile.
Në tonin Makefile që do të përmbajë komandat e zakonshme docker dhe docker-compose, të cilat janë të destinuara për të zgjidhur një sërë problemesh. Këtu flasim për ndërtimin e një kontejneri, nisjen, ndalimin, ripërkujtimin e tij, organizimin e hyrjes së përdoruesit në kontejner, punën me log-et e kontejnerit dhe zgjidhjen e problemeve të tjera të ngjashme.
Varianca tipike të përdorimit të Docker Compose
Imagjinoni një aplikacion tipik web, i cili ka këto komponentë:
- Baza e të dhënave TimescaleDB (Postgres).
- Aplikacioni Express.js.
- Ping (vetëm një kontejner, që nuk bën gjë të veçantë).
Ky aplikacion do tĂ« kĂ«rkojĂ« 3 kontejnerĂ« Docker dhe njĂ« skedĂ« docker-compose, qĂ« pĂ«rmban udhĂ«zime pĂ«r menaxhimin e kĂ«tyre konteinerĂ«ve. Ădo njĂ« nga kontejnerĂ«t do tĂ« ketĂ« pika tĂ« ndryshme interaksioni. PĂ«r shembull, me kontejnerin timescale mund tĂ« punojmĂ« pak a shumĂ« si me bazat e tĂ« dhĂ«nave. KĂ«tu janĂ« disa veprime qĂ« mund tĂ« kryhen:
- Hyrja në shell-in e Postgres.
- Importimi dhe eksportimi i tabelave.
- Krijimi
pg_dumptabelat ose bazat e të dhënave.
Konteineri i aplikacionit Express.js, expressjs, mund të ketë këto mundësi:
- Nxjerrja e të dhënave të freskëta nga jurnal sistemi.
- Hyrja në shell për të kryer disa komanda.
Interaksioni me kontejnerët
Pasi kemi rregulluar lidhjen midis kontejnerëve duke përdorur Docker Compose, është koha për të krijuar interaksionin me këto kontejnerë. Në sistemin Docker Compose ka një komandë docker-compose, që mbështet opsionin --follow, i cili lejon kalimin e skedës docker-compose.yml.
Duke përdorur mundësitë e këtij opsioni, mund të kufizojmë interaksionin me sistemin vetëm me ato kontejnerë që përmenden në skedë. docker-compose.yml.
Shikoni se si duket interaksioni me kontejnerët kur përdoren komandat docker-compose. Nëse supozojmë se na nevojitet të hyjmë në shell-in psql, komandat përkatëse mund të duken kështu:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres E njëjta komandë, për të cilën përdoret jo docker-compose, ndërsa docker, mund të duket kështu:
docker exec -it edp_timescale_1 psql -Upostgres Kujtoni se në këto raste është gjithmonë e preferueshme të përdoret komandë docker, sesa komanda docker-compose, sepse kjo lejon të heqim nevojën për të mbajtur mend emrat e kontejnerëve.
Të dyja komandat e sipërpërmendura nuk janë aq të komplikuara. Por nëse do të kishim përdorur një "mbështjellës" në formën e Makefile, e cila do të na jepte një ndërfaqe të thjeshtë komandash dhe do të thërriste vetë komandat e gjata, mund të arrihen të njëjtat rezultate kështu:
bĂ«ni db-shell ĂshtĂ« krejtĂ«sisht e qartĂ« se pĂ«rdorimi Makefile ndihmon ndjeshĂ«m nĂ« thjeshtimin e punĂ«s me kontejnerĂ«t!
Shembulli funksional
Duke u mbështetur në skemën e shqyrtuar më sipër, do të krijojmë këtë skedar të ardhshëm docker-compose.yml:
version: '3.3'
shërbimet:
api:
ndërtimi: .
imazhi: mywebimage:0.0.1
portet:
- 8080:8080
vëllimet:
- \/app\/node_modules\/
varet nga:
- timescale
komandë: npm run dev
rrjetet:
- webappnetwork
timescale:
imazhi: timescale\/timescaledb-postgis:latest-pg11
ambienti:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
komandë: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
vëllimet:
- .\/create_schema.sql:\/docker-entrypoint-initdb.d\/create_schema.sql
rrjetet:
- webappnetwork
ping:
imazhi: willfarrell\/ping
ambienti:
HOSTNAME: "localhost"
TIMEOUT: 300
rrjetet:
webappnetwork:
drejtues: bridge Për menaxhimin e konfigurimit të Docker Compose dhe për komunikimin me kontejnerët që ajo përshkruan, do të krijojmë këtë skedar të ardhshëm Makefile:
THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: ndihmë ndërtim ngritje fillim poshtë shkathtësim ndal revitalizim loge loge-api ps login-timescale login-api db-shell
ndihmë:
bëni -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 '^$@$$'
ndërtim:
docker-compose -f docker-compose.yml ndërtim $(c)
ngritje:
docker-compose -f docker-compose.yml lartë -d $(c)
fillim:
docker-compose -f docker-compose.yml fillim $(c)
poshtë:
docker-compose -f docker-compose.yml poshtë $(c)
shkathtësim:
docker-compose -f docker-compose.yml poshtë -v $(c)
dal:
docker-compose -f docker-compose.yml ndal $(c)
revitalizim:
docker-compose -f docker-compose.yml ndal $(c)
docker-compose -f docker-compose.yml lartë -d $(c)
loge:
docker-compose -f docker-compose.yml loge --tail=100 -f $(c)
loge-api:
docker-compose -f docker-compose.yml loge --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 Shumica e komandave të përshkruara këtu aplikohen për të gjithë kontejnerët, por përdorimi i opsionit c= lejon kufizimin e fushës së veprimit të komandës në një kontejner të vetëm.
Pasi është Makefile gati, mund ta përdorim kështu:
bĂ«ni ndihmĂ«nâ jep njĂ« listĂ« tĂ« tĂ« gjitha komandave qĂ« janĂ« tĂ« disponueshme pĂ«rmake.

Ndihma në lidhje me komandat e disponueshme
bĂ«ni ndĂ«rtimâ ndĂ«rtimi i imazhit ngaDockerfile. NĂ« shembullin tonĂ«, ne pĂ«rdorĂ«m imazhe ekzistuesetimescaledheping. Por imazhiapiqĂ« duam ta krijojmĂ« nĂ« mĂ«nyrĂ« lokale. KĂ«tĂ« do ta bĂ«jmĂ« pas ekzekutimit tĂ« kĂ«tij komandimi.

Ndërtimi i kontejnerit Docker
make startâ nisja e tĂ« gjithĂ« kontejnerĂ«ve. PĂ«r tĂ« nisur vetĂ«m njĂ« kontejner, mund tĂ« pĂ«rdorni komandĂ«n e tipitmake start c=timescale.

Nisja e kontejnerit timescale

Nisja e kontejnerit ping
make login-timescaleâ hyrja nĂ« sesionin bash tĂ« kontejnerittimescale.

Nisja e bash në kontejnerin timescale
bĂ«ni db-shellâ hyrja nĂ«psqlnĂ« kontejnertimescalepĂ«r tĂ« ekzekutuar pyetje SQL nĂ« bazĂ«n e tĂ« dhĂ«nave.

Nisja e psql në kontejnerin timescaledb
make stopâ ndalimi i kontejnerĂ«ve.
![]()
Ndalimi i kontejnerit timescale
make downâ ndalimi dhe heqja e kontejnerĂ«ve. PĂ«r tĂ« hequr njĂ« kontejner tĂ« caktuar, mund tĂ« pĂ«rdorni kĂ«tĂ« komandĂ« me pĂ«rcaktimin e kontejnerit tĂ« dĂ«shiruar. PĂ«r shembull âmake down c=timescaleosemake down c=api.

Ndalimi dhe heqja e të gjithë kontejnerëve
Përfundime
Megjithatë, edhe pse sistemi Docker Compose ofron një gamë të gjerë komandash për menaxhimin e kontejnerëve, herë pas here këto komanda bëhen të gjata dhe ndonjëherë është e vështirë të mbahen mend.
Metodologjia e përdorimit Makefile na ndihmoi të krijojmë një ndërveprim të shpejtë dhe të thjeshtë me kontejnerët nga skedari docker-compose.yml. Saktësisht, bëhet fjalë për këtë:
- Zhvilluesi ndërvepron vetëm me kontejnerët e projektit, të përshkruar në
docker-compose.yml, ndërkohë që kontejnerët e tjerë të nisur nuk pengojnë punën. - Në rast se ndonjë komandë është harruar, mund të ekzekutoni komandën
bëni ndihmëndhe të merrni ndihmën mbi komandat e disponueshme. - Nuk ka nevojë të mbani mend lista të gjata argumentesh për të realizuar veprime të tilla si marrja e të dhënave të reja të logut apo hyrja në sistem. Për shembull, një komandë e tipit
docker-compose -f docker-compose.yml exec timescale psql -Upostgresshndërrohet nëbëni db-shell. - Skeda
Makefilemund të rregullohet fleksibilisht me rritjen e projektit. Për shembull, nuk është e vështirë të shtoni një komandë për krijimin e një kopje rezervë të bazës së të dhënave apo për të realizuar çdo veprim tjetër. - Nëse një ekip i madh zhvilluesish përdor të njëjtin
Makefile, kjo rregullon bashkëpunimin dhe redukton numrin e gabimeve.
P.S. Në tonin ka një imazh , i cili instalohet me një klik. Ju mund të kontrolloni funksionimin e kontejnerëve në . Të gjithë klientët e rinj u ofrohen falas 3 ditë për provë.
Të nderuar lexues! Si e automatizoni punën me Docker Compose?
Burimi: habr.com
