Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles

Çdo disa vjet, industria e zhvillimit të softuerit pëson një ndryshim paradigme. Një nga këto dukuri mund të njihet si interesi në rritje për konceptin e mikroshërbimeve. Edhe pse mikroshërbimet nuk janë teknologjia më e re, vetëm kohët e fundit popullariteti i saj fjalë për fjalë është rritur në qiell.

Shërbimet e mëdha monolitike tani po zëvendësohen nga mikroshërbime të pavarura, autonome. Një mikroshërbim mund të konsiderohet si një aplikacion që i shërben një qëllimi të vetëm dhe shumë specifik. Për shembull, mund të jetë një DBMS relacionale, një aplikacion Express, një shërbim Solr.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles

Këto ditë, është e vështirë të imagjinohet zhvillimi i një sistemi të ri softuerësh pa përdorur mikroshërbime. Dhe kjo situatë, nga ana tjetër, na çon në platformën Docker.

prerës

Platformë prerës, në zhvillimin dhe vendosjen e mikroshërbimeve, është bërë pothuajse një standard i industrisë. Në faqen e internetit të projektit mund të zbuloni se Docker është e vetmja platformë e pavarur e kontejnerizimit që lejon organizatat të krijojnë pa mundim çdo aplikacion, si dhe t'i shpërndajnë dhe ekzekutojnë ato në çdo mjedis - nga retë hibride te sistemet e skajshme.

Shkruaj Docker

Технология Shkruaj Docker projektuar për konfigurimin e aplikacioneve me shumë kontejnerë. Një projekt Docker Compose mund të përmbajë aq kontejnerë Docker sa i duhen krijuesit të projektit.

Kur punoni me Docker Compose, një skedar YAML përdoret për të konfiguruar shërbimet e aplikacionit dhe për të organizuar ndërveprimin e tyre me njëri-tjetrin. Prandaj, Docker Compose është një mjet për përshkrimin dhe ekzekutimin e aplikacioneve Docker me shumë kontejnerë.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Dy kontejnerë që funksionojnë në një sistem pritës

Bëni GNU

Program make, është në thelb një mjet për automatizimin e ndërtimit të programeve dhe bibliotekave nga kodi burimor. Në përgjithësi, mund të themi se make zbatohet për çdo proces që përfshin ekzekutimin e komandave arbitrare për të transformuar disa materiale hyrëse në një formë dalëse për ndonjë qëllim. Në rastin tonë, komandat docker-compose do të shndërrohet në qëllime abstrakte (Synimet e telefonit).

Për të treguar programin make për atë që duam prej tij, na duhet një skedar Makefile.

Në tonë Makefile do të përmbajë komanda të rregullta docker и docker-compose, të cilat janë krijuar për të zgjidhur shumë probleme. Domethënë, ne po flasim për montimin e një kontejneri, për fillimin e tij, ndalimin e tij, rinisjen e tij, për organizimin e hyrjes së përdoruesit në kontejner, për punën me regjistrat e kontejnerëve dhe për zgjidhjen e problemeve të tjera të ngjashme.

Rastet tipike të përdorimit për Docker Compose

Le të imagjinojmë një aplikacion të rregullt në internet që ka komponentët e mëposhtëm:

  • Baza e të dhënave TimescaleDB (Postgres).
  • Aplikacioni Express.js.
  • Ping (vetëm një enë, nuk bën asgjë të veçantë).

Ky aplikacion do të ketë nevojë për 3 kontejnerë Docker dhe një skedar docker-compose, i cili përmban udhëzime për menaxhimin e këtyre kontejnerëve. Çdo kontejner do të ketë pika kontakti të ndryshme. Për shembull, me një enë timescale do të jetë e mundur të punohet përafërsisht në të njëjtën mënyrë siç punojnë me bazat e të dhënave. Përkatësisht, ju lejon të kryeni veprimet e mëposhtme:

  • Hyrja në guaskën Postgres.
  • Importi dhe eksporti i tavolinave.
  • krijim pg_dump tabelat ose bazat e të dhënave.

Kontejneri i aplikacionit Express.js, expressjs, mund të ketë aftësitë e mëposhtme:

  • Sigurimi i të dhënave të freskëta nga regjistri i sistemit.
  • Hyni në shell për të ekzekutuar komanda të caktuara.

Ndërveprimi me kontejnerët

Pasi të kemi vendosur komunikimin midis kontejnerëve duke përdorur Docker Compose, është koha për të komunikuar me ato kontejnerë. Brenda sistemit Docker Compose ekziston një komandë docker-compose, opsion mbështetës -f, i cili ju lejon të transferoni një skedar në sistem docker-compose.yml.

Duke përdorur aftësitë e këtij opsioni, ju mund të kufizoni ndërveprimin me sistemin vetëm në ato kontejnerë që janë përmendur në skedar docker-compose.yml.

Le të hedhim një vështrim se si duken ndërveprimet me kontejnerët kur përdorni komanda docker-compose. Nëse imagjinojmë se duhet të hyjmë në shell psql, atëherë komandat përkatëse mund të duken kështu:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

E njëjta komandë që nuk përdoret për të ekzekutuar docker-composeDhe docker, mund të duket kështu:

docker exec -it  edp_timescale_1 psql -Upostgres

Ju lutemi vini re se në raste të tilla është gjithmonë e preferueshme të përdoret komanda docker, dhe komanda docker-compose, pasi kjo eliminon nevojën për të mbajtur mend emrat e kontejnerëve.

Të dyja komandat e mësipërme nuk janë aq të vështira. Por nëse do të përdornim një "mbështjellës" në formë Makefile, e cila do të na jepte një ndërfaqe në formën e komandave të thjeshta dhe do të quhej vetë komanda të ngjashme të gjata, atëherë të njëjtat rezultate mund të arriheshin si kjo:

make db-shell

Është mjaft e qartë se përdorimi Makefile e bën shumë më të lehtë punën me kontejnerë!

Shembull pune

Bazuar në diagramin e mësipërm të projektit, ne do të krijojmë skedarin e mëposhtëm 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ëvepruar me kontejnerët që ai përshkruan, ne do të krijojmë skedarin e mëposhtëm 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 zbatohen për të gjithë kontejnerët, por duke përdorur opsionin c= ju lejon të kufizoni shtrirjen e një komande në një kontejner.

Pas Makefile gati, mund ta përdorni si kjo:

  • make help — lëshimi i një liste të të gjitha komandave të disponueshme për make.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Ndihmë për komandat e disponueshme

  • make build - montimi i një imazhi nga Dockerfile. Në shembullin tonë kemi përdorur imazhe ekzistuese timescale и ping. Por imazhi api ne duam të mbledhim në vend. Kjo është pikërisht ajo që do të bëhet pas ekzekutimit të kësaj komande.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Ndërtimi i një kontejneri Docker

  • make start — nisja e të gjithë kontejnerëve. Për të nisur vetëm një kontejner, mund të përdorni një komandë si make start c=timescale.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Drejtimi i kontejnerit të shkallës kohore

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Drejtimi i një kontejneri ping

  • make login-timescale — hyni në sesionin bash të kontejnerit timescale.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Running bash në një enë me kohë

  • make db-shell - hyrje në psql në një enë timescale për të ekzekutuar pyetje SQL kundër bazës së të dhënave.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Ekzekutimi i psql në një enë timescaledb

  • make stop — kontejnerët e ndalimit.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Ndalimi i një kontejneri të shkallës kohore

  • make down — ndalimi dhe heqja e kontejnerëve. Për të hequr një enë specifike, mund të përdorni këtë komandë duke specifikuar kontejnerin e dëshiruar. Për shembull - make down c=timescale ose make down c=api.

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles
Ndalimi dhe fshirja e të gjithë kontejnerëve

Rezultatet e

Megjithëse Docker Compose na jep një grup të pasur komandash për menaxhimin e kontejnerëve, ndonjëherë këto komanda mund të bëhen të gjata dhe të vështira për t'u mbajtur mend.

Mënyra e përdorimit Makefile na ndihmoi të krijojmë ndërveprim të shpejtë dhe të lehtë me kontejnerët nga një skedar docker-compose.yml. Përkatësisht, ne po flasim për sa vijon:

  • Zhvilluesi ndërvepron vetëm me kontejnerët e projektit të përshkruar në docker-compose.yml, puna nuk ndërhyhet nga kontejnerë të tjerë që funksionojnë.
  • Në rast se një komandë e caktuar harrohet, mund ta ekzekutoni komandën make help dhe merrni ndihmë për komandat e disponueshme.
  • Nuk është e nevojshme të mbani mend lista të gjata argumentesh për të kryer veprime të tilla si marrja e shënimeve më të fundit të regjistrit ose hyrja në një sistem. Për shembull, një komandë si docker-compose -f docker-compose.yml exec timescale psql -Upostgres kthehet në make db-shell.
  • skedar Makefile Ju mund të përshtateni në mënyrë fleksibël me të ndërsa projekti rritet. Për shembull, është e lehtë të shtoni një komandë për të krijuar 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ëjtën gjë Makefile, kjo thjeshton bashkëpunimin dhe redukton gabimet.

PS Në tonë treg ka një imazh prerës, i cili mund të instalohet me një klik. Ju mund të kontrolloni funksionimin e kontejnerëve në VPS. Të gjithë klientëve të rinj u jepet 3 ditë testim pa pagesë.

Të nderuar lexues! Si e automatizoni Docker Compose?

Docker Compose: Thjeshtimi i punës suaj duke përdorur Makefiles

Burimi: www.habr.com

Shto një koment