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.
TĂ€napĂ€eval on keeruline kujutleda uue tarkvarasĂŒsteemi arendamist ilma mikroteenuste kasutamiseta. See olukord viib meid Docker platvormini.
Docker
Platvorm , 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 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.

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 ().
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_dumptabelid 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 saadavalmake.

KÀskudele juurdepÀÀsu abi
make buildâ pildi koostamine.Dockerfile. Meie nĂ€ites kasutasime olemasolevaid piltetimescalejaping. Kuid piltapimida me soovime kohapeal kokku panna. Just see toimub pĂ€rast selle kĂ€su tĂ€itmist.

Docker konteineri ehitus
make startâ kĂ”igi konteinerite kĂ€ivitamine. Ăhe konteineri kĂ€ivitamiseks vĂ”ib kasutada sellist kĂ€skumake start c=timescale.

timescale konteineri kÀivitamine

ping konteineri kÀivitamine
make login-timescaleâ sisenemine konteineri bash-seanssitimescale.

timescale konteineris bash'i kÀivitamine
make db-shellâ siseneminepsqlkonteineristimescaleSQL-pĂ€ringute tĂ€itmiseks andmebaasi.

psql'i kÀivitamine timescaledb konteineris
make stopâ konteinerite peatamine.
![]()
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=timescalevĂ”imake down c=api.

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 helpja 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 -Upostgresmuutubmake db-shell. - File
MakefilevÔ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 on olemas pilt , mis installitakse ĂŒhe klĂ”psuga. Saate kontrollida konteinerite tööd . KĂ”igile uutele klientidele antakse tasuta 3 pĂ€eva katsetamiseks.
Lugupidamisega lugejad! Kuidas automatiseerite Docker Compose'i kasutamist?
Allikas: habr.com
