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

Lisa kommentaar