Docker Compose: thjeshtimi i punës me përdorimin e Makefile

Ç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.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile

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 Docker, 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 Docker Compose ë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ë.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
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 (Qëllimet Phony).

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_dump tabelat 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Ă«r make.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
Ndihma në lidhje me komandat e disponueshme

  • bĂ«ni ndĂ«rtim — ndĂ«rtimi i imazhit nga Dockerfile. NĂ« shembullin tonĂ«, ne pĂ«rdorĂ«m imazhe ekzistuese timescale dhe ping. Por imazhi api qĂ« duam ta krijojmĂ« nĂ« mĂ«nyrĂ« lokale. KĂ«tĂ« do ta bĂ«jmĂ« pas ekzekutimit tĂ« kĂ«tij komandimi.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
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 tipit make start c=timescale.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
Nisja e kontejnerit timescale

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
Nisja e kontejnerit ping

  • make login-timescale — hyrja nĂ« sesionin bash tĂ« kontejnerit timescale.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
Nisja e bash në kontejnerin timescale

  • bĂ«ni db-shell — hyrja nĂ« psql nĂ« kontejner timescale pĂ«r tĂ« ekzekutuar pyetje SQL nĂ« bazĂ«n e tĂ« dhĂ«nave.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
Nisja e psql në kontejnerin timescaledb

  • make stop — ndalimi i kontejnerĂ«ve.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
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=timescale ose make down c=api.

Docker Compose: thjeshtimi i punës me përdorimin e Makefile
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Ă«n dhe 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 -Upostgres shndĂ«rrohet nĂ« bĂ«ni db-shell.
  • Skeda Makefile mund 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 marketin tonë ka një imazh Docker, i cili instalohet me një klik. Ju mund të kontrolloni funksionimin e kontejnerëve në VPS. 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?

Docker Compose: thjeshtimi i punës me përdorimin e Makefile

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster