Néhány évente a szoftverfejlesztési iparban paradigmaváltás történik. Az egyik ilyen jelenség a mikroszolgáltatások iránti érdeklődés növekedése. Bár a mikroszolgáltatások nem egy új technológia, népszerűsége az utóbbi időben szó szerint az egekbe szökött.
A nagy monolitikus szolgáltatásokat ma már független, autonóm mikroszolgáltatások váltják fel. A mikroszolgáltatás olyan alkalmazásként értelmezhető, amely egyetlen, nagyon specifikus célt szolgál. Például ez lehet egy relációs adatbázis, egy Express-alkalmazás vagy egy Solr-szolgáltatás.
Ma már nehéz elképzelni egy új szoftverrendszer fejlesztését mikroszolgáltatások alkalmazása nélkül. Ez a helyzet pedig elvezet minket a Docker platformhoz.
Docker
Platforma , a mikroszolgáltatások fejlesztésében és telepítésében gyakorlatilag ipari szabvánnyá vált. A projekthonlapon megtudhatjuk, hogy a Docker egy független konténerizáló platform, amely lehetővé teszi a szervezetek számára, hogy különösebb erőfeszítések nélkül hozzanak létre bármilyen alkalmazást és eloszthassák, valamint futtathassák azokat bármilyen környezetben — a hibrid felhőktől kezdve a határ menti rendszerekig.
Docker Compose-t használtunk.
Technológia a többkonténeres alkalmazások konfigurálására szolgál. A Docker Compose projektbe annyi Docker-konténer kerülhet, amennyit a projekt készítője szükségesnek tart.
A Docker Compose használatakor az alkalmazás szolgáltatásainak beállítására és azok kölcsönhatásainak megszervezésére YAML-fájlt használunk. A Docker Compose tehát egy eszköz a Docker többkonténeres alkalmazások leírására és elindítására.

Két konténer, amely a gazda rendszerén működik.
GNU Make
Program make, lényegében egy eszköz a programok és könyvtárak forráskódból való összeállításának automatizálására. Általánosságban elmondható, hogy make bármely folyamatra alkalmazható, amely magában foglalja tetszőleges parancsok végrehajtását, hogy valamilyen alapanyagot egy meghatározott eredményformába alakítson, egy meghatározott cél felé. A mi esetünkben a parancsok docker-compose abstrakt célokba ().
Ahhoz, hogy tájékoztassuk a programot make arról, mit szeretnénk tőle, szükségünk van egy fájlra, Makefile.
rendszerünkben van egy Makefile amelyek a szokásos parancsokat tartalmazzák. docker és docker-compose, amelyek számos feladat megoldására szolgálnak. Nevezetesen, a tartály összeszereléséről, elindításáról, leállításáról, újraindításáról, a felhasználó belépésének megszervezéséről a tartályba, a tartály naplóinak kezeléséről és más hasonló feladatok elvégzéséről van szó.
A Docker Compose tipikus felhasználási esetai
Képzeljünk el egy klasszikus webalkalmazást, amelyben a következő komponensek találhatók:
- TimescaleDB (Postgres) adatbázis.
- Express.js alkalmazás.
- Ping (egyszerű tartály, amely nem végez semmi különöset).
Ennek az alkalmazásnak 3 Docker tartályra és egy fájlra lesz szüksége docker-compose, amely utasításokat tartalmaz ezeknek a tartályoknak a kezelésére. Mindegyik tartálynak más interakciós pontjai lesznek. Például a tartályhoz timescale kb. úgy lehet interakcióba lépni, ahogyan az adatbázisokkal szoktunk. Nevezetesen, a következő műveletek elvégzésére képes:
- Belépés a Postgres shellbe.
- Táblák importálása és exportálása.
- Módszer kidolgozása
pg_dumptáblák vagy adatbázisok.
Az Express.js alkalmazás tartálya, expressjs, a következő lehetőségekkel rendelkezhet:
- Friss adatok kibocsátása a rendszer naplóból.
- Belépés a shellbe bizonyos parancsok végrehajtásához.
Interakció a tartályokkal
Miután beállítottuk a kapcsolatot a tartályok között a Docker Compose használatával, elérkezett az idő, hogy interakcióba lépjünk ezekkel a tartályokkal. A Docker Compose rendszerben van egy parancs, docker-compose, amely támogat egy -fopciót, amely lehetővé teszi a rendszer számára fájl átadását docker-compose.yml.
Ennek az opciónak a lehetőségeit kihasználva korlátozhatjuk az interakciót a rendszerrel csupán a közzétett tartályokkal, amelyek a fájlban szerepelnek. docker-compose.yml.
Nézzük meg, hogyan néznek ki az interakciók a tartályokkal a parancsok használatakor. docker-compose. Ha felmerül a szükség, hogy belépjünk a psqlshellbe, az ehhez tartozó parancsok így nézhetnek ki:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres Ugyanez a parancs, amelyet nem a docker-compose, és dockerhasználunk, így nézhet ki:
docker exec -it edp_timescale_1 psql -Upostgres Ne feledjük, hogy az ilyen esetekben mindig előnyösebb nem a dockerparancsot használni, hanem a docker-composeparancsot, mivel ez megszabadít attól, hogy emlékeznünk kelljen a tartályok neveire.
A fent említett két parancs nem túl bonyolult. De ha egy 'burkot' használnánk ehelyett Makefile, amely egyszerű parancsok formájában biztosítana számunkra interfészt, és maga hívná meg az ilyen hosszú parancsokat, a hasonló eredmények így is elérhetők lennének:
make db-shell Teljesen egyértelmű, hogy a Makefile significantly simplifies working with containers!
Munkapélda
A fent bemutatott projekt séma alapján az alábbi fájlt hozzuk létre: 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 A Docker Compose konfiguráció kezelése és a benne leírt konténerekkel való interakció érdekében az alábbi fájlt hozzuk létre: 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 A legtöbb itt leírt parancs minden konténerre vonatkozik, de az opció használata c= lehetővé teszi, hogy a parancs hatókörét egyetlen konténerre korlátozzuk.
Miután Makefile készen áll, így használható:
make help— a rendelkezésre álló összes parancs felsorolásamake.

Információ az elérhető parancsokról
make build— az image összeállításaDockerfile. A példánkban meglévő képeket használtunktimescaleésping. De a képapiamit helyben szeretnénk összerakni. Ezt fogjuk megtenni ennek a parancsnak a végrehajtása után.

Docker konténer építése
make start— minden konténer indítása. Csak egy konténer elindításához használhatjuk a következő parancsotmake start c=timescale.

A timescale konténer indítása

A ping konténer indítása
make login-timescale— belépés a konténer bash session-jébetimescale.

Bash indítása a timescale konténerben
make db-shell— belépés apsqlkonténerbetimescaleaz SQL lekérdezések végrehajtásához az adatbázison.

psql indítása a timescaledb konténerben
make stop— a konténerek leállítása.
![]()
A timescale konténer leállítása
make down— a konténerek leállítása és törlése. Egy adott konténer törléséhez ezt a parancsot használhatjuk a kívánt konténer megadásával. Például —make down c=timescalevagymake down c=api.

Minden konténer leállítása és törlése
Összegzés
Bár a Docker Compose rendszer széles körű parancskészletet biztosít a konténerek kezelésére, néha ezek a parancsok túl hosszúak, így nehéz megjegyezni őket.
Használati módszer Makefile segített nekünk gyors és egyszerű kölcsönhatást teremteni a konténerekkel a fájlból docker-compose.yml. Pontosabban a következőkről van szó:
- A fejlesztő csak a projekt konténereivel lép interakcióba, amelyeket leírtunk
docker-compose.yml, így a futó többi konténer nem zavarja a munkát. - Ha elfelejtettünk egy parancsot, végrehajthatjuk a parancsot
make helpés segítséget kaphatunk a rendelkezésre álló parancsokról. - Nincs szükség hosszú argumentumlisták megjegyzésére olyan műveletek végrehajtásához, mint a legfrissebb naplóbejegyzések megjelenítése vagy a rendszerbe való belépés. Például egy parancs formája
docker-compose -f docker-compose.yml exec timescale psql -Upostgresátalakulmake db-shell. - Fájl
Makefileahogy a projekt növekszik, rugalmasan igazítható hozzá. Például könnyen hozzáadhatunk parancsot az adatbázis biztonsági másolatának készítéséhez vagy bármilyen más művelet végrehajtásához. - Ha nagy csapat fejlesztő használja ugyanezt
Makefile, ez rendszerezi a közös munkát és csökkenti a hibák számát.
P.S. rendszerünkben van egy , amely egy kattintással telepíthető. Ellenőrizheti a konténerek működését a . Minden új ügyfél számára ingyenesen biztosítunk 3 napos tesztelési lehetőséget. Tisztelt olvasóink!
Használjátok a CI/CD technológiákat a projektjeitekben? Hogyan automatizálja a munkát a Docker Compose-szal?
Forrás: habr.com
