A szoftverfejlesztő ipar néhány évente paradigmaváltáson megy keresztül. Az egyik ilyen jelenség a mikroszolgáltatások koncepciója iránti növekvő érdeklődés. Bár a mikroszolgáltatások nem a legújabb technológia, népszerűsége csak a közelmúltban szökött meg az egekbe.
A nagy monolitikus szolgáltatásokat immár független, autonóm mikroszolgáltatások váltják fel. A mikroszolgáltatás egy olyan alkalmazásnak tekinthető, amely egyetlen és nagyon konkrét célt szolgál. Például lehet egy relációs DBMS, egy Express alkalmazás vagy egy Solr szolgáltatás.
Manapság nehéz elképzelni egy új szoftverrendszer fejlesztését mikroszolgáltatások használata nélkül. Ez a helyzet pedig a Docker platformhoz vezet bennünket.
Dokkmunkás
Emelvény
Docker Compose
Технология
A Docker Compose használatakor egy YAML-fájlt használnak az alkalmazásszolgáltatások konfigurálására és azok egymás közötti interakciójának megszervezésére. A Docker Compose ezért egy többkonténeres Docker-alkalmazások leírására és futtatására szolgáló eszköz.
Két konténer fut egy gazdagépen
GNU gyártmány
Program make
, lényegében a programok és könyvtárak forráskódból történő felépítésének automatizálására szolgáló eszköz. Általánosságban elmondhatjuk make
vonatkozik minden olyan folyamatra, amely tetszőleges parancsok végrehajtását foglalja magában, hogy bizonyos bemeneti anyagokat valamilyen kimeneti formává, valamilyen cél elérése érdekében alakítsanak át. Esetünkben a parancsok docker-compose
elvont célokká alakulnak át (
Megmondani a programnak make
arról, hogy mit akarunk tőle, szükségünk van egy fájlra Makefile
.
A miénkben Makefile
rendszeres parancsokat fog tartalmazni docker
и docker-compose
, amelyek számos probléma megoldására szolgálnak. Nevezetesen egy konténer összeállításáról, indításáról, leállításáról, újraindításáról, a konténerbe való felhasználói bejelentkezés megszervezéséről, a konténernaplókkal való munkavégzésről és egyéb hasonló problémák megoldásáról van szó.
A Docker Compose tipikus használati esetei
Képzeljünk el egy normál webalkalmazást, amely a következő összetevőkkel rendelkezik:
- TimescaleDB adatbázis (Postgres).
- Express.js alkalmazás.
- Ping (csak egy konténer, nem csinál semmi különöset).
Ehhez az alkalmazáshoz 3 Docker-tárolóra és egy fájlra lesz szüksége docker-compose
, amely utasításokat tartalmaz ezen tárolók kezeléséhez. Minden tárolónak különböző érintkezési pontjai lesznek. Például konténerrel timescale
megközelítőleg ugyanúgy lehet majd dolgozni, mint az adatbázisokkal. Nevezetesen a következő műveletek végrehajtását teszi lehetővé:
- Bejelentkezés a Postgres shellbe.
- Táblázatok importja és exportja.
- teremtés
pg_dump
táblázatok vagy adatbázisok.
Express.js alkalmazástároló, expressjs
, a következő képességekkel rendelkezhet:
- Friss adatok biztosítása a rendszernaplóból.
- Bizonyos parancsok végrehajtásához jelentkezzen be a shellbe.
Interakció a tárolókkal
Miután beállítottuk a kommunikációt a tárolók között a Docker Compose segítségével, ideje kommunikálni ezekkel a tárolókkal. A Docker Compose rendszeren belül van egy parancs docker-compose
, támogató opció -f
, amely lehetővé teszi egy fájl átvitelét a rendszerbe docker-compose.yml
.
Ennek az opciónak a segítségével korlátozhatja a rendszerrel való interakciót a fájlban említett tárolókra docker-compose.yml
.
Nézzük meg, hogyan néznek ki a tárolókkal való interakciók parancsok használatakor docker-compose
. Ha elképzeljük, hogy be kell jelentkeznünk a héjba psql
, akkor a megfelelő parancsok így nézhetnek ki:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Ugyanaz a parancs, amelyet nem használnak a végrehajtásra docker-compose
És docker
, így nézhet ki:
docker exec -it edp_timescale_1 psql -Upostgres
Kérjük, vegye figyelembe, hogy ilyen esetekben mindig előnyösebb a parancs használata docker
, és a parancs docker-compose
, mivel így nem kell megjegyezni a tárolóneveket.
Mindkét fenti parancs nem olyan nehéz. De ha „csomagolót” használtunk a formában Makefile
, amely egyszerű parancsok formájában adna nekünk egy interfészt, és maga is hasonló hosszú parancsokat hívna, akkor ugyanazt az eredményt lehetne elérni így:
make db-shell
Teljesen nyilvánvaló, hogy a felhasználás Makefile
sokkal könnyebbé teszi a konténerekkel való munkát!
Működő példa
A fenti projektdiagram alapján elkészítjük a következő fájlt 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éséhez és az általa leírt tárolókkal való interakcióhoz a következő 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
Az itt leírt parancsok többsége minden tárolóra vonatkozik, de az opció használatával c=
lehetővé teszi egy parancs hatókörének egy tárolóra való korlátozását.
Miután a Makefile
készen áll, így használhatod:
make help
— listát adunk ki az összes elérhető parancsrólmake
.
Segítség az elérhető parancsokhoz
make build
- kép összeállítása abbólDockerfile
. Példánkban meglévő képeket használtunktimescale
иping
. De a képapi
helyben szeretnénk gyűjteni. Pontosan ez történik a parancs végrehajtása után.
Docker konténer építése
make start
— az összes konténer vízre bocsátása. Csak egy tároló elindításához használhat egy parancsot, mint példáulmake start c=timescale
.
Az időskálás tároló futtatása
Ping tároló futtatása
make login-timescale
— bejelentkezés a tároló bash munkamenetébetimescale
.
A bash futtatása időskálás tárolóban
make db-shell
- bejáratpsql
konténerbentimescale
SQL lekérdezések végrehajtásához az adatbázisban.
A psql futtatása timescaledb tárolóban
make stop
— konténerek leállítása.
Időskála-tároló leállítása
make down
— konténerek leállítása és eltávolítása. Egy adott tároló eltávolításához használhatja ezt a parancsot a kívánt tároló megadásához. Például -make down c=timescale
vagymake down c=api
.
Az összes tároló leállítása és törlése
Eredményei
Bár a Docker Compose gazdag parancskészletet ad a tárolók kezelésére, néha ezek a parancsok hosszúak és nehezen megjegyezhetőek lehetnek.
Felhasználási mód Makefile
segített nekünk a fájlból származó tárolókkal való gyors és egyszerű interakció létrehozásában docker-compose.yml
. Mégpedig a következőkről beszélünk:
- A fejlesztő csak az itt leírt projekttárolókkal lép kapcsolatba
docker-compose.yml
, a munkát más futó konténerek nem zavarják. - Abban az esetben, ha egy bizonyos parancsot elfelejtünk, végrehajthatja a parancsot
make help
és segítséget kaphat az elérhető parancsokkal kapcsolatban. - Nem kell hosszú argumentumlistákat emlékeznie olyan műveletek végrehajtásához, mint a legfrissebb naplóbejegyzések lekérése vagy a rendszerbe való bejelentkezés. Például egy parancs, mint
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
befordulmake db-shell
. - fájl
Makefile
A projekt növekedésével rugalmasan alkalmazkodhat hozzá. Például könnyen hozzáadhat egy parancsot adatbázis biztonsági mentésének létrehozásához vagy bármilyen más művelet végrehajtásához. - Ha egy nagy fejlesztői csapat használja ugyanezt
Makefile
, ez leegyszerűsíti az együttműködést és csökkenti a hibák számát.
PS A miénkben
Kedves olvasók! Hogyan automatizálja a Docker Compose-t?
Forrás: will.com