Docker Compose: egyszerűsítse munkáját Makefiles használatával

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.

Docker Compose: egyszerűsítse munkáját Makefiles használatával

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 Dokkmunkás, a mikroszolgáltatások fejlesztésében és bevezetésében szinte iparági szabvánnyá vált. A projekt weboldalán megtudhatja, hogy a Docker az egyetlen független konténerezési platform, amely lehetővé teszi a szervezetek számára, hogy könnyedén létrehozzanak bármilyen alkalmazást, valamint terjesszék és futtassák azokat bármilyen környezetben – a hibrid felhőktől az élrendszerekig.

Docker Compose

Технология Docker Compose többkonténeres alkalmazások konfigurálására tervezték. Egy Docker Compose projekt annyi Docker-tárolót tartalmazhat, amennyire a projekt létrehozójának szüksége van.

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.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
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 (Telefonos célok).

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ól make.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
Segítség az elérhető parancsokhoz

  • make build - kép összeállítása abból Dockerfile. Példánkban meglévő képeket használtunk timescale и ping. De a kép api helyben szeretnénk gyűjteni. Pontosan ez történik a parancs végrehajtása után.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
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ául make start c=timescale.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
Az időskálás tároló futtatása

Docker Compose: egyszerűsítse munkáját Makefiles használatával
Ping tároló futtatása

  • make login-timescale — bejelentkezés a tároló bash munkamenetébe timescale.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
A bash futtatása időskálás tárolóban

  • make db-shell - bejárat psql konténerben timescale SQL lekérdezések végrehajtásához az adatbázisban.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
A psql futtatása timescaledb tárolóban

  • make stop — konténerek leállítása.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
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 vagy make down c=api.

Docker Compose: egyszerűsítse munkáját Makefiles használatával
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 befordul make 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 piactér van egy kép Dokkmunkás, amely egy kattintással telepíthető. A konténerek működését a címen ellenőrizheti VPS. Minden új ügyfél 3 napos ingyenes tesztelést kap.

Kedves olvasók! Hogyan automatizálja a Docker Compose-t?

Docker Compose: egyszerűsítse munkáját Makefiles használatával

Forrás: will.com

Hozzászólás