Docker Compose: oma töö lihtsustamine Makefile'i abil

Iga paari aasta tagant toimub tarkvaraarenduse tööstuses paradigmamuutus. Üheks selliseks nĂ€htuseks vĂ”ib tunnistada kasvavat huvi mikroteenuste kontseptsiooni vastu. Kuigi mikroteenused ei ole uusim tehnoloogia, on selle populaarsus alles hiljuti hĂŒppeliselt tĂ”usnud.

Suured monoliitsed teenused on nĂŒĂŒd asendatud sĂ”ltumatute autonoomsete mikroteenustega. Mikroteenust vĂ”ib pidada rakenduseks, mis teenib ĂŒhte ja vĂ€ga konkreetset eesmĂ€rki. NĂ€iteks vĂ”ib see olla relatsiooniline DBMS, Express-rakendus vĂ”i Solr-teenus.

Docker Compose: oma töö lihtsustamine Makefile'i abil

TĂ€napĂ€eval on raske ette kujutada uue tarkvarasĂŒsteemi arendamist ilma mikroteenuseid kasutamata. Ja see olukord omakorda viib meid Dockeri platvormile.

laevalaadija

Platvorm laevalaadija, on mikroteenuste arendamisel ja juurutamisel muutunud peaaegu tööstusstandardiks. Projekti veebisaidilt saate teada, et Docker on ainus sĂ”ltumatu konteineriseerimisplatvorm, mis vĂ”imaldab organisatsioonidel hĂ”lpsalt luua mis tahes rakendusi, samuti levitada ja kĂ€ivitada neid mis tahes keskkonnas - hĂŒbriidpilvedest servasĂŒsteemideni.

Docker loo

ĐąĐ”Ń…ĐœĐŸĐ»ĐŸĐłĐžŃ Docker loo mĂ”eldud mitme konteineri rakenduste konfigureerimiseks. Docker Compose'i projekt vĂ”ib sisaldada nii palju Dockeri konteinereid, kui projekti looja vajab.

Docker Compose'iga töötamisel kasutatakse YAML-faili rakendusteenuste konfigureerimiseks ja nendevahelise suhtluse korraldamiseks. Docker Compose on seega tööriist mitme konteineriga Dockeri rakenduste kirjeldamiseks ja kÀitamiseks.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Kaks konteinerit, mis töötavad hostsĂŒsteemis

GNU kaubamÀrk

Programm make, on sisuliselt tööriist programmide ja teekide loomise automatiseerimiseks lĂ€htekoodist. Üldiselt vĂ”ime seda öelda make kehtib mis tahes protsessi kohta, mis hĂ”lmab suvaliste kĂ€skude tĂ€itmist, et teisendada mĂ”ned sisendmaterjalid mingile vĂ€ljundvormile, eesmĂ€rgi saavutamiseks. Meie puhul kĂ€sud docker-compose muudetakse abstraktseteks eesmĂ€rkideks (Telefoni sihtmĂ€rgid).

Et programmile öelda make selle kohta, mida me sellest tahame, vajame faili Makefile.

Meie Makefile sisaldab tavalisi kÀske docker О docker-compose, mis on mÔeldud paljude probleemide lahendamiseks. Nimelt rÀÀgime konteineri kokkupanemisest, selle kÀivitamisest, seiskamisest, taaskÀivitamisest, kasutaja konteinerisse sisselogimise korraldamisest, tööst konteinerilogidega ja muude sarnaste probleemide lahendamisest.

Docker Compose'i tĂŒĂŒpilised kasutusjuhud

Kujutagem ette tavalist veebirakendust, millel on jÀrgmised komponendid:

  • TimescaleDB andmebaas (Postgres).
  • Express.js rakendus.
  • Ping (lihtsalt konteiner, ei tee midagi erilist).

See rakendus vajab 3 Dockeri konteinerit ja faili docker-compose, mis sisaldab juhiseid nende konteinerite haldamiseks. Igal konteineril on erinevad puutepunktid. NÀiteks konteineriga timescale on vÔimalik töötada ligikaudu samamoodi nagu nad töötavad andmebaasidega. Nimelt vÔimaldab see teil teha jÀrgmisi toiminguid:

  • Logige sisse Postgresi kesta.
  • Tabelite import ja eksport.
  • loomine pg_dump tabelid vĂ”i andmebaasid.

Express.js rakenduse konteiner, expressjs, vÔivad olla jÀrgmised vÔimalused:

  • VĂ€rskete andmete esitamine sĂŒsteemilogist.
  • Teatud kĂ€skude tĂ€itmiseks logige kesta sisse.

Suhtlemine konteineritega

Kui oleme Docker Compose'i abil konteineritevahelise suhtluse seadistanud, on aeg nende konteineritega suhelda. Docker Compose sĂŒsteemis on kĂ€sk docker-compose, tugivĂ”imalus -f, mis vĂ”imaldab faili sĂŒsteemi ĂŒle kanda docker-compose.yml.

Selle valiku vĂ”imalusi kasutades saate piirata sĂŒsteemiga suhtlemist ainult nende konteineritega, mis on failis mainitud docker-compose.yml.

Vaatame, kuidas nÀeb vÀlja interaktsioon konteineritega kÀskude kasutamisel docker-compose. Kui kujutame ette, et peame kesta sisse logima psql, siis vÔivad vastavad kÀsud vÀlja nÀha jÀrgmised:

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

Sama kÀsk, mida ei kasutata tÀitmiseks docker-composeJa docker, vÔib vÀlja nÀha selline:

docker exec -it  edp_timescale_1 psql -Upostgres

Pange tÀhele, et sellistel juhtudel on alati eelistatav kasutada kÀsku dockerja kÀsk docker-compose, kuna see vÀlistab vajaduse konteinerite nimesid meeles pidada.

MĂ”lemad ĂŒlaltoodud kĂ€sud pole nii keerulised. Aga kui kasutaksime vormis "ĂŒmbrist". Makefile, mis annaks meile liidese lihtsate kĂ€skude kujul ja ise nimetaks sarnaseid pikki kĂ€ske, siis saaks samad tulemused saavutada jĂ€rgmiselt:

make db-shell

On ĂŒsna ilmne, et kasutamine Makefile muudab konteineritega töötamise palju lihtsamaks!

TöönÀide

Ülaltoodud projektiskeemi pĂ”hjal loome jĂ€rgmise faili 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

Docker Compose'i konfiguratsiooni haldamiseks ja selles kirjeldatud konteineritega suhtlemiseks loome jÀrgmise faili 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

Enamik siin kirjeldatud kĂ€ske kehtib kĂ”ikidele konteineritele, kuid kasutades suvandit c= vĂ”imaldab piirata kĂ€su ulatust ĂŒhe konteineriga.

PÀrast Makefile valmis, saate seda kasutada jÀrgmiselt:

  • make help — kĂ”igi saadaolevate kĂ€skude loendi vĂ€ljastamine make.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Abi saadaolevate kÀskude kohta

  • make build - pildi kokkupanek Dockerfile. Meie nĂ€ites kasutasime olemasolevaid pilte timescale Đž ping. Aga pilt api tahame koguda kohapeal. TĂ€pselt seda tehakse pĂ€rast selle kĂ€su tĂ€itmist.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Dockeri konteineri ehitamine

  • make start — kĂ”igi konteinerite vettelaskmine. Ainult ĂŒhe konteineri kĂ€ivitamiseks vĂ”ite kasutada kĂ€sku nagu make start c=timescale.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Ajaskaala konteineri kÀitamine

Docker Compose: oma töö lihtsustamine Makefile'i abil
Pingimiskonteineri kÀitamine

  • make login-timescale — logige sisse konteineri bash-seansse timescale.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Bashi kÀivitamine ajaskaala konteineris

  • make db-shell - sissepÀÀs psql konteineris timescale SQL pĂ€ringute tĂ€itmiseks andmebaasis.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Psql-i kÀivitamine ajaskaalaga b konteineris

  • make stop — konteinerite peatamine.

Docker Compose: oma töö lihtsustamine Makefile'i abil
Ajaskaala konteineri peatamine

  • make down — konteinerite peatamine ja eemaldamine. Konkreetse konteineri eemaldamiseks saate selle kĂ€su abil mÀÀrata soovitud konteineri. NĂ€iteks - make down c=timescale vĂ”i make down c=api.

Docker Compose: oma töö lihtsustamine Makefile'i abil
KÔigi konteinerite peatamine ja kustutamine

Tulemused

Kuigi Docker Compose annab meile rikkaliku hulga kÀske konteinerite haldamiseks, vÔivad need kÀsud mÔnikord muutuda pikaks ja neid on raske meeles pidada.

Kasutusmeetod Makefile aitas meil luua kiire ja lihtsa suhtluse faili konteineritega docker-compose.yml. Nimelt rÀÀgime jÀrgmisest:

  • Arendaja suhtleb ainult artiklis kirjeldatud projekti konteineritega docker-compose.yml, tööd ei sega teised jooksvad konteinerid.
  • Kui teatud kĂ€sk on ununenud, saate selle kĂ€su tĂ€ita make help ja saada abi saadaolevate kĂ€skude kohta.
  • Te ei pea meeles pidama pikki argumentide loendeid, et teha selliseid toiminguid nagu uusimate logikirjete hankimine vĂ”i sĂŒsteemi sisselogimine. NĂ€iteks kĂ€sk nagu docker-compose -f docker-compose.yml exec timescale psql -Upostgres muutub make db-shell.
  • fail Makefile Saate sellega paindlikult kohaneda projekti kasvades. NĂ€iteks on lihtne lisada kĂ€sku andmebaasi varukoopia loomiseks vĂ”i mĂ”ne muu toimingu tegemiseks.
  • Kui suur arendajate meeskond kasutab sama Makefile, muudab see koostööd sujuvamaks ja vĂ€hendab vigu.

PS Meie turuplats pilt on olemas laevalaadija, mille saab installida ĂŒhe klĂ”psuga. Konteinerite tööd saate kontrollida aadressil VPS. KĂ”ikidele uutele klientidele antakse 3 pĂ€eva tasuta testimist.

Kallid lugejad! Kuidas automatiseerite Docker Compose'i?

Docker Compose: oma töö lihtsustamine Makefile'i abil

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster