Ç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
