Docker Compose: töö lihtsustamine Makefile'i kasutamisega

MĂ”ned aastad tagasi toimus tarkvaraarenduse valdkonnas paradigmade vahetus. Üheks selliseks nĂ€htuseks on huvi kasvu mikroteenuste kontseptsiooni vastu. Kuigi mikroteenused ei ole sugugi uus tehnoloogia, on nende populaarsus viimasel ajal tĂ”usnud taevasse.

Suurte monoliitsete teenuste asemel on tĂ€napĂ€eval rohkem sĂ”ltumatuid ja autonoomseid mikroteenuseid. Mikroteenust vĂ”ib vaadelda kui rakendust, millel on ĂŒksainus ja vĂ€ga spetsiifiline eesmĂ€rk. NĂ€iteks — see vĂ”ib olla relatsiooniline andmebaas, Express-rakendus vĂ”i Solr-teenus.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega

TĂ€napĂ€eval on keeruline kujutleda uue tarkvarasĂŒsteemi arendamist ilma mikroteenuste kasutamiseta. See olukord viib meid Docker platvormini.

Docker

Platvorm Docker, mikroteenuste arendamisel ja juurutamisel on peaaegu tööstusstandardi saavutanud. Projekti veebisaidilt saab teada, et Docker on ainus sĂ”ltumatu konteineriseerimist platvorm, mis vĂ”imaldab organisatsioonidel hĂ”lpsasti luua igasuguseid rakendusi ning jagada ja kĂ€ivitada neid erinevates keskkondades — alates hĂŒbriidpilvedest kuni servasĂŒsteemideni.

Docker Compose

Tehnoloogia Docker Compose on mÔeldud mitme konteineri rakenduste konfigureerimiseks. Docker Compose'i projekt vÔib sisaldada nii palju Docker konteinerite, kui projekti looja soovib.

Docker Compose'i kasutamisel rakenduste teenuste seadistamiseks ja nende omavahelise koostoime korraldamiseks kasutatakse YAML-faili. Seega on Docker Compose tööriist, mis kirjeldab ja kÀivitab mitme konteineri Docker rakendusi.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Kaks konteinerit, mis töötavad host-sĂŒsteemis

GNU Make

Programm make, on pĂ”himĂ”tteliselt tööriist programmide ja raamatukogude kokkupaneku automatiseerimiseks lĂ€htekoodist. Üldiselt vĂ”ib öelda, et make on rakendatav mis tahes protsessile, mis hĂ”lmab meelevaldsete kĂ€skude tĂ€itmist, et muuta toormaterjalid mingiks soovitud vormiks, mingiks sihiks. Meie puhul kĂ€sud docker-compose muudetakse abstraktseteks sihtmĂ€rkideks (Phony targets).

Kuna teavitada programmi make selle kohta, mida me temalt soovime, on meil vajalik fail Makefile.

Meie Makefile sisaldavad tavapĂ€raseid kĂ€ske docker ja docker-compose, mis on mĂ”eldud mitmete ĂŒlesannete tĂ€itmiseks. TĂ€psemalt, see hĂ”lmab konteineri kokkupanekut, kĂ€ivitamist, peatamist, taaskĂ€ivitamist, kasutaja sisenemist konteinerisse, konteineri logidega töötamist ning muude sarnaste ĂŒlesannete lahendamist.

TĂŒĂŒpilised kasutusvariante Docker Compose'i jaoks

Kujutame ette tavalist veebirakendust, milles on jÀrgmised komponendid:

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

Selle rakenduse jaoks on vaja 3 Docker konteinerit ja faili docker-compose, mis sisaldab juhiseid nende konteinerite haldamiseks. Igal konteineril on erinevad suhtluspunktid. NÀiteks konteineriga timescale saab töötada nii, nagu töötatakse andmebaasidega. See vÔimaldab teostada jÀrgmisi toiminguid:

  • Sisenemine Postgres'i kĂ€sureale.
  • Tabelite importimine ja eksportimine.
  • Loomine pg_dump tabelid vĂ”i andmebaasid.

Express.js rakenduse konteiner, expressjs, vÔib omada jÀrgmisi funktsioone:

  • Uute andmete vĂ€ljastamine sĂŒsteemi logidest.
  • Sisenemine kĂ€sureale teatud kĂ€skude tĂ€itmiseks.

Koostöö konteineritega

PĂ€rast konteinerite ĂŒhendamise seadistamist Docker Compose'i abil on aeg luua nendega suhtlemine. Docker Compose'i sĂŒsteemis on kĂ€sk docker-compose, mis toetab valikut -f, mis vĂ”imaldab sĂŒsteemile edastada faili docker-compose.yml.

Selle valiku abil saab piirata suhtlemist sĂŒsteemiga ainult nende konteineritega, mis on faili sees mainitud. docker-compose.yml.

Vaatame, millised on suhtlemised konteineritega, kui kasutada kÀsku docker-compose. Kui eeldada, et peame sisenema kestasse psql, vÔivad vastavad kÀsud vÀlja nÀha jÀrgmiselt:

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

Sama kÀsk, mille tÀitmiseks ei kasutata docker-compose, ja docker, vÔib vÀlja nÀha jÀrgmine:

docker exec -it edp_timescale_1 psql -Upostgres

Pange tÀhele, et sarnastes olukordades on alati soovitatav kasutada kÀsku docker, mitte kÀsku docker-compose, kuna see vÔimaldab unustada konteinerite nimed.

MĂ”lemad eelnevalt mainitud kĂ€sud ei ole ĂŒlemÀÀra keerulised. Kuid kui me kasutaksime "ĂŒmbrist" nĂ€ol Makefile, mis oleks meile lihtsat kĂ€surea liidest ja kutsuks ise vĂ€lja selliseid pikki kĂ€ske, siis nende samade tulemuste saavutamiseks saaks teha nii:

make db-shell

On tÀiesti selge, et kasutamine Makefile meenutab oluliselt meie konteineritega töötamist!

Tööproov

Eelnevalt kÀsitletud projektskeemi 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 konteineritega, mille ta kirjeldab, 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 siinkohal kirjeldatud kĂ€sku rakendatakse kĂ”igi konteinerite suhtes, kuid valiku kasutamine c= lubab piirata kĂ€su ulatust ĂŒhe konteineriga.

PÀrast seda, kui Makefile on valmis, seda saab kasutada jÀrgmiselt:

  • make help — loetelu kĂ”igist kĂ€skudest, mis on saadaval make.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
KÀskudele juurdepÀÀsu abi

  • make build — pildi koostamine. Dockerfile. Meie nĂ€ites kasutasime olemasolevaid pilte timescale ja ping. Kuid pilt api mida me soovime kohapeal kokku panna. Just see toimub pĂ€rast selle kĂ€su tĂ€itmist.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Docker konteineri ehitus

  • make start — kĂ”igi konteinerite kĂ€ivitamine. Ühe konteineri kĂ€ivitamiseks vĂ”ib kasutada sellist kĂ€sku make start c=timescale.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
timescale konteineri kÀivitamine

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
ping konteineri kÀivitamine

  • make login-timescale — sisenemine konteineri bash-seanssi timescale.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
timescale konteineris bash'i kÀivitamine

  • make db-shell — sisenemine psql konteineris timescale SQL-pĂ€ringute tĂ€itmiseks andmebaasi.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
psql'i kÀivitamine timescaledb konteineris

  • make stop — konteinerite peatamine.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
timescale konteineri peatamine

  • make down — konteinerite peatamine ja eemaldamine. Konkreetse konteineri eemaldamiseks vĂ”ib seda kĂ€sku kasutada, mÀÀrates vajadusel konteineri. NĂ€iteks — make down c=timescale vĂ”i make down c=api.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
kÔigi konteinerite peatamine ja eemaldamine

KokkuvÔte

Kuna Docker Compose sĂŒsteem pakub rohkesti kĂ€ske, mis on mĂ”eldud konteinerite haldamiseks, vĂ”ivad need kĂ€sud mĂ”nikord pugeda pikaks, mistĂ”ttu on neid raske meelde jĂ€tta.

Kasutamismeetod Makefile aitas meil kiiret ja lihtsat suhtlemist konteineritega failist korraldada docker-compose.yml. Nimelt on juttu jÀrgmistest:

  • Arendaja suhtleb ainult projekti konteineritega, mis on kirjeldatud docker-compose.yml, teised jooksvalt töötavad konteinerid ei sega tööd.
  • Kui mĂ”ni kĂ€sk jÀÀb unustamata, vĂ”ite sisestada kĂ€su make help ja saada teavet saadaval olevate kĂ€skude kohta.
  • Ei pea mĂ€letama pikki argumentide loendeid selliste toimingute jaoks nagu vĂ€rskete logi sissekande saamine vĂ”i sĂŒsteemi sisse logimine. NĂ€iteks kĂ€sk, mis nĂ€eb vĂ€lja nagu docker-compose -f docker-compose.yml exec timescale psql -Upostgres muutub make db-shell.
  • File Makefile vĂ”imalik, et projekti kasvades saab teda paindlikult kohandada. NĂ€iteks on lihtne lisada kĂ€sku, mis loob andmebaasi varukoopia vĂ”i tĂ€idab mĂ”ne muu toimingu.
  • Kui suur arendajate meeskond kasutab sama Makefile, siis korrastab see koostööd ja vĂ€hendab vigade arvu.

P.S. Meie turul on olemas pilt Docker, mis installitakse ĂŒhe klĂ”psuga. Saate kontrollida konteinerite tööd VPS. KĂ”igile uutele klientidele antakse tasuta 3 pĂ€eva katsetamiseks.

Lugupidamisega lugejad! Kuidas automatiseerite Docker Compose'i kasutamist?

Docker Compose: töö lihtsustamine Makefile'i kasutamisega

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster