Docker Compose: a munka egyszerűsítése Makefile használatával

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.

Docker Compose: a munka egyszerűsítése Makefile használatával

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 Docker, 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 Docker Compose-t használtunk. 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.

Docker Compose: a munka egyszerűsítése Makefile használatával
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 (Phony targets).

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_dump tá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ása make.

Docker Compose: a munka egyszerűsítése Makefile használatával
Információ az elérhető parancsokról

  • make build — az image összeállítása Dockerfile. A példánkban meglévő képeket használtunk timescale és ping. De a kép api amit helyben szeretnénk összerakni. Ezt fogjuk megtenni ennek a parancsnak a végrehajtása után.

Docker Compose: a munka egyszerűsítése Makefile használatával
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ő parancsot make start c=timescale.

Docker Compose: a munka egyszerűsítése Makefile használatával
A timescale konténer indítása

Docker Compose: a munka egyszerűsítése Makefile használatával
A ping konténer indítása

  • make login-timescale — belépés a konténer bash session-jébe timescale.

Docker Compose: a munka egyszerűsítése Makefile használatával
Bash indítása a timescale konténerben

  • make db-shell — belépés a psql konténerbe timescale az SQL lekérdezések végrehajtásához az adatbázison.

Docker Compose: a munka egyszerűsítése Makefile használatával
psql indítása a timescaledb konténerben

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

Docker Compose: a munka egyszerűsítése Makefile használatával
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=timescale vagy make down c=api.

Docker Compose: a munka egyszerűsítése Makefile használatával
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 átalakul make db-shell.
  • Fájl Makefile ahogy 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 marketplace-ünkben , amely egy kattintással telepíthető. Ellenőrizheti a konténerek működését a Docker. Minden új ügyfél számára ingyenesen biztosítunk 3 napos tesztelési lehetőséget. VPSTisztelt olvasóink!

Használjátok a CI/CD technológiákat a projektjeitekben? Hogyan automatizálja a munkát a Docker Compose-szal?

Docker Compose: a munka egyszerűsítése Makefile használatával

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster