Ădo disa vjet, industria e zhvillimit tĂ« softuerit pĂ«rjeton njĂ« ndryshim paradigme. NjĂ« nga kĂ«to fenomene mund tĂ« pranohet si rritja e interesit pĂ«r konceptin e mikroshĂ«rbimeve. Edhe pse mikroshĂ«rbimet nuk janĂ« njĂ« teknologji e re, vetĂ«m kohĂ«t e fundit popullariteti i saj Ă«shtĂ« rritur ndjeshĂ«m.
Shërbimet e mëdha monolitike po zëvendësohen sot nga mikroshërbime të pavarura dhe autonome. Një mikroshërvim mund të përshkruhet si një aplikacion që shërben një qëllim të vetëm dhe shumë specifik. Për shembull, mund të jetë një DB relacional, një aplikacion Express, ose një shërbim Solr.
Sot është e vështirë të imagjinosh zhvillimin e një sistemi të ri softuerik pa përdorimin e mikroshërbimeve. Kjo situatë na çon në platformën Docker.
Docker
Platforma , nĂ« zhvillimin dhe implementimin e mikroshĂ«rbimeve, Ă«shtĂ« bĂ«rĂ« praktikisht standard industrial. NĂ« faqen e projektit mund tĂ« mĂ«soni se Docker Ă«shtĂ« platforma e vetme e pavarur e kontejnerizimit qĂ« u lejon organizatave tĂ« krijojnĂ« çdo aplikacion pa shumĂ« mundime dhe ta shpĂ«rndajnĂ« atĂ« nĂ« çdo mjedis â nga nĂ« bulku deri nĂ« sisteme periferike.
Docker Compose
Teknologjia është e destinuar për konfigurimin e aplikacioneve me shumë kontejnerë. Në një projekt Docker Compose mund të përfshihen aq kontejnerë 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 me njëri-tjetrin, përdoret një skedar YAML. Docker Compose, kështu, është një mjet për përshkrimin dhe ekzekutimin e aplikacioneve Docker me shumë kontejnerë.

Dy kontejnerë që punojnë në sistemin pritës
GNU Make
Programi make, në thelb, është një mjet për automatizimin e ndërtimit të programeve dhe librarive nga kodi burimor. Në përgjithësi, mund të thuhet se make është e aplikueshme në çdo proces që përfshin ekzekutimin e komandave të ndryshme për të transformuar disa materiale të caktuara në një formë përfundimtare, në një qëllim. Në rastin tonë, komandat docker-compose do të konvertohen në qëllime abstrakte ().
Për t'i komunikuar programit make çfarë dëshirojmë prej tij, na nevojitet një skedar Makefile.
Në shërbimin tonë Makefile do të përmbajë komandat e zakonshme docker dhe docker-compose, të cilat janë të destinuara për zgjidhjen e shumë detyrave. Në veçanti, flasim për ndërtimin e kontejnerit, aktivizimin e tij, ndalimin, ri-aktivizimin, organizimin e hyrjes së përdoruesit në kontejner, punën me log-et e kontejnerit dhe zgjidhjen e problemeve të ngjashme.
Shembuj tipikë të përdorimit të Docker Compose
Imagjinoni një aplikacion të zakonshëm në web, që ka komponentët e mëposhtëm:
- Baza e të dhënave TimescaleDB (Postgres).
- Aplikacioni Express.js.
- Ping (thjesht një kontejner, që nuk bën gjë të veçantë).
Ky aplikacion do tĂ« kĂ«rkojĂ« 3 kontejnerĂ« Docker dhe njĂ« skedar docker-compose, qĂ« pĂ«rmban udhĂ«zime pĂ«r menaxhimin e kĂ«tyre konteinerĂ«ve. Ădo kontejner do tĂ« ketĂ« pika tĂ« ndryshme ndĂ«rveprimi. PĂ«r shembull, me kontejnerin timescale mund tĂ« punohet si me bazat e tĂ« dhĂ«nave. NĂ« veçanti, ai lejon kryerjen e veprimeve tĂ« mĂ«poshtme:
- Hyrje në shell-in Postgres.
- Import dhe eksport tabelash.
- Krijimi
pg_dumptabelash ose bazash të dhënash.
Kontejneri i aplikacionit Express.js, expressjs, mund të ketë mundësitë e mëposhtme:
- Shqipërimi i të dhënave të reja nga regjistri sistemor.
- Hyrje në shell për ekzekutimin e disa komandave.
Ndërveprimi me kontejnerët
Pas konfigurimit të lidhjeve midis kontejnerëve duke përdorur Docker Compose, është koha për të vendosur ndërveprimin me këta kontejnerë. Në sistemin Docker Compose ka një komandë docker-compose, që mbështet opsionin -f, i cili lejon kalimin e skedarit docker-compose.yml.
Duke përdorur mundësitë e këtij opsioni, mund të kufizohet ndërveprimi me sistemin në vetëm ato kontejnerë që përmenden në skedarin docker-compose.yml.
Le të shohim se si duken ndërveprimet me kontejnerët kur përdoren komandat docker-compose. Nëse imagjinoni se na nevojitet të hyjmë në shell psql, komandat përkatëse mund të duken kështu:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres I njëjti komandë, për të cilin përdoret jo docker-compose, dhe docker, mund të duket kështu:
docker exec -it edp_timescale_1 psql -Upostgres Vini re se në raste të tilla është gjithmonë më e preferueshme të përdorni komandën docker, sesa komandën docker-compose, pasi kjo lejon evitimin e nevojës për të mbajtur mend emrat e kontejnerëve.
Të dy komandat e mësipërme nuk janë aq të ndërlikuara. Por, nëse do të përdornim një "ndërfaqe" në formën e Makefile, e cila do të na jepte një ndërfaqe me komandat e thjeshta dhe vetë do të thërriste këto komanda të gjata, atëherë të njëjtat rezultate do të mund të arriheshin kështu:
make db-shell ĂshtĂ« qartĂ« se pĂ«rdorimi i Makefile e bĂ«n punĂ«n me kontejnerĂ«t shumĂ« mĂ« tĂ« thjeshtĂ«!
Një shembull praktik
Duke bazuar në skemën e projektit të shqyrtuar më parë, do të krijojmë skedarin që vijon 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 Për të menaxhuar konfigurimin e Docker Compose dhe për të bashkëpunuar me kontejnerët që ajo përshkruan, do të krijojmë skedarin vijues 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 Shumica e komandave të përshkruara këtu aplikohen për të gjithë kontejnerët, por përdorimi i opsionit c= lejon që fushën e veprimit të komandës ta kufizojmë në një kontejner.
Pas që Makefile gati, mund ta përdorim kështu:
make helpâ listimi i tĂ« gjitha komandave tĂ« disponueshme pĂ«rmake.

Ndihma mbi komandat e disponueshme
make buildâ ndĂ«rtimi i imazhit ngaDockerfile. NĂ« shembullin tonĂ«, ne pĂ«rdorĂ«m imazhe ekzistuesetimescaledheping. Por imazhiapiqĂ« dĂ«shirojmĂ« ta ndĂ«rtojmĂ« nĂ« mĂ«nyrĂ« lokale. Kjo do tĂ« realizohet pas ekzekutimit tĂ« kĂ«saj komande.

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

Nisja e kontejnerit timescale

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

Nisja e bash-it në kontejnerin timescale
make db-shellâ hyrja nĂ«psqlnĂ« kontejnertimescalepĂ«r tĂ« ekzekutuar kĂ«rkesat 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Ă« fshirĂ« njĂ« kontejner specifik, mund tĂ« pĂ«rdorim 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ërfundimet
Pavarësisht se sistemi Docker Compose na jep një gamë të gjerë komandash për menaxhimin e kontejnerëve, herë-other komandat bëhen të gjata, duke e bërë të vështirë që t'i mbajmë 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. Konkretisht, bëhet fjalë për këtë:
- Programuesi ndërvepron vetëm me kontejnerët e projektit, të përshkruar në
docker-compose.yml, punën nuk e pengojnë kontejnerët e tjerë në funksion. - Në rast se ndonjë komandë harrohet, mund të ekzekutojmë komandën
make helpdhe të marrim ndihmë mbi komandat e disponueshme. - Nuk është e nevojshme të mbani mend lista të gjata argumentesh për të kryer veprime si fitimi i regjistrimeve të reja të logut ose hyrja në sistem. Për shembull, një komandë si
docker-compose -f docker-compose.yml exec timescale psql -Upostgresshndërrohet nëmake db-shell. - Skedari
Makefilemund të përshtatet me fleksibilitet ndërsa projekti rritet. Për shembull, nuk është e vështirë të shtosh një komandë për krijimin e një kopje rezervë të bazës së të dhënave ose për të kryer ndonjë veprim tjetër. - Nëse një ekip i madh zhvilluesish përdor të njëjtin
Makefile, kjo rendit ndihmon në punën e përbashkët dhe zvogëlon numrin e gabimeve.
P.S. Në shërbimin tonë ka një imazh , i cili instalohet me një klik. Mund të kontrolloni punën e kontejnerëve në . Të gjithë klientët e rinj ofrohen falas 3 ditë për testim.
Të nderuar lexues! Si po e automatizoni punën me Docker Compose?
Burimi: habr.com
