Docker Compose: Zjednodušení vaší práce pomocí Makefiles

Každých pár let prochází průmysl vývoje softwaru změnou paradigmatu. Jedním z těchto fenoménů je rostoucí zájem o koncept mikroslužeb. Přestože mikroslužby nejsou nejnovější technologií, teprve v poslední době jejich obliba doslova raketově stoupá.

Velké monolitické služby jsou nyní nahrazovány nezávislými, autonomními mikroslužbami. Mikroslužbu lze považovat za aplikaci, která slouží jedinému a velmi specifickému účelu. Může to být například relační DBMS, aplikace Express, služba Solr.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles

V dnešní době je těžké si představit vývoj nového softwarového systému bez použití mikroslužeb. A tato situace nás zase vede k platformě Docker.

přístavní dělník

Platforma přístavní dělník, ve vývoji a zavádění mikroslužeb, se stal téměř průmyslovým standardem. Na webu projektu se můžete dozvědět, že Docker je jediná nezávislá kontejnerizační platforma, která organizacím umožňuje bez námahy vytvářet libovolné aplikace a také je distribuovat a provozovat v jakémkoli prostředí – od hybridních cloudů po okrajové systémy.

Docker Compose

Технология Docker Compose navržený pro konfiguraci vícekontejnerových aplikací. Projekt Docker Compose může obsahovat tolik kontejnerů Docker, kolik tvůrce projektu potřebuje.

Při práci s Docker Compose se soubor YAML používá ke konfiguraci aplikačních služeb a organizaci jejich vzájemné interakce. Docker Compose je tedy nástroj pro popis a spouštění vícekontejnerových aplikací Docker.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Dva kontejnery běžící na hostitelském systému

Značka GNU

Program make, je v podstatě nástroj pro automatizaci vytváření programů a knihoven ze zdrojového kódu. Obecně to můžeme říci make se vztahuje na jakýkoli proces, který zahrnuje provádění libovolných příkazů k transformaci některých vstupních materiálů na nějakou výstupní formu, na nějaký cíl. V našem případě příkazy docker-compose se promění v abstraktní cíle (Telefonní cíle).

Abych řekl programu make o tom, co od něj chceme, potřebujeme soubor Makefile.

V našem Makefile bude obsahovat běžné příkazy docker и docker-compose, které jsou určeny k řešení mnoha problémů. Konkrétně mluvíme o sestavení kontejneru, o jeho spouštění, zastavování, restartování, o organizaci přihlášení uživatele do kontejneru, o práci s protokoly kontejneru a o řešení dalších podobných problémů.

Typické případy použití pro Docker Compose

Představme si běžnou webovou aplikaci, která má následující součásti:

  • Databáze TimescaleDB (Postgres).
  • aplikace Express.js.
  • Ping (jen kontejner, nedělá nic zvláštního).

Tato aplikace bude potřebovat 3 kontejnery Docker a soubor docker-compose, který obsahuje pokyny pro správu těchto kontejnerů. Každý kontejner bude mít různé kontaktní body. Například s kontejnerem timescale bude možné pracovat přibližně stejně, jako pracují s databázemi. Konkrétně vám umožňuje provádět následující akce:

  • Přihlášení do prostředí Postgres.
  • Import a export tabulek.
  • tvorba pg_dump tabulky nebo databáze.

kontejner aplikace Express.js, expressjs, může mít následující schopnosti:

  • Poskytování čerstvých dat ze systémového protokolu.
  • Chcete-li provádět určité příkazy, přihlaste se do shellu.

Interakce s kontejnery

Jakmile nastavíme komunikaci mezi kontejnery pomocí Docker Compose, je čas komunikovat s těmito kontejnery. V systému Docker Compose existuje příkaz docker-compose, podpůrná varianta -f, který umožňuje přenést soubor do systému docker-compose.yml.

Pomocí možností této volby můžete omezit interakci se systémem pouze na ty kontejnery, které jsou uvedeny v souboru docker-compose.yml.

Pojďme se podívat, jak vypadají interakce s kontejnery při používání příkazů docker-compose. Pokud si představíme, že se potřebujeme přihlásit do shellu psql, pak mohou odpovídající příkazy vypadat takto:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Stejný příkaz, který se nepoužívá k provedení docker-composea docker, může vypadat takto:

docker exec -it  edp_timescale_1 psql -Upostgres

Upozorňujeme, že v takových případech je vždy vhodnější použít příkaz dockera tým docker-compose, protože to eliminuje potřebu pamatovat si názvy kontejnerů.

Oba výše uvedené příkazy nejsou tak obtížné. Pokud bychom ale ve formuláři použili „obal“. Makefile, který by nám poskytl rozhraní ve formě jednoduchých příkazů a sám by volal podobné dlouhé příkazy, pak by bylo možné dosáhnout stejných výsledků takto:

make db-shell

Je zcela zřejmé, že použití Makefile výrazně usnadňuje práci s kontejnery!

Pracovní příklad

Na základě výše uvedeného projektového diagramu vytvoříme následující soubor 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

Pro správu konfigurace Docker Compose a interakci s kontejnery, které popisuje, vytvoříme následující soubor 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

Většina zde popsaných příkazů platí pro všechny kontejnery, ale s použitím volby c= umožňuje omezit rozsah příkazu na jeden kontejner.

Po Makefile připraveno, můžete jej použít takto:

  • make help — vydání seznamu všech dostupných příkazů make.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Nápověda k dostupným příkazům

  • make build - sestavení obrazu z Dockerfile. V našem příkladu jsme použili existující obrázky timescale и ping. Ale obraz api chceme sbírat lokálně. To je přesně to, co se stane po provedení tohoto příkazu.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Stavba kontejneru Docker

  • make start — spuštění všech kontejnerů. Chcete-li spustit pouze jeden kontejner, můžete použít příkaz jako make start c=timescale.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Spuštění kontejneru časové osy

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Spuštění pingového kontejneru

  • make login-timescale — přihlášení do bash relace kontejneru timescale.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Běh bash v kontejneru časové osy

  • make db-shell - vchod do psql v kontejneru timescale pro provádění SQL dotazů proti databázi.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Spuštění psql v kontejneru timescaledb

  • make stop — zastavování nádob.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Zastavení kontejneru časové osy

  • make down — zastavení a odstranění nádob. Chcete-li odebrat konkrétní kontejner, můžete použít tento příkaz určující požadovaný kontejner. Například - make down c=timescale nebo make down c=api.

Docker Compose: Zjednodušení vaší práce pomocí Makefiles
Zastavení a odstranění všech kontejnerů

Výsledky

Přestože nám Docker Compose poskytuje bohatou sadu příkazů pro správu kontejnerů, někdy mohou být tyto příkazy dlouhé a obtížně zapamatovatelné.

Způsob použití Makefile nám pomohl vytvořit rychlou a snadnou interakci s kontejnery ze souboru docker-compose.yml. Konkrétně mluvíme o následujícím:

  • Vývojář komunikuje pouze s projektovými kontejnery popsanými v docker-compose.yml, práci neruší jiné běžící kontejnery.
  • V případě, že je určitý příkaz zapomenut, můžete příkaz provést make help a získat nápovědu k dostupným příkazům.
  • Nemusíte si pamatovat dlouhé seznamy argumentů, abyste mohli provádět akce, jako je získání nejnovějších záznamů protokolu nebo přihlášení do systému. Například příkaz jako docker-compose -f docker-compose.yml exec timescale psql -Upostgres zatáčky do make db-shell.
  • Soubor Makefile Můžete se mu flexibilně přizpůsobit, jak projekt roste. Je například snadné přidat příkaz pro vytvoření zálohy databáze nebo provést jakoukoli jinou akci.
  • Pokud velký tým vývojářů používá totéž Makefile, to zjednodušuje spolupráci a snižuje chyby.

PS V našem tržiště je tam obrázek přístavní dělník, který se nainstaluje jedním kliknutím. Můžete zkontrolovat, jak kontejnery fungují VPS. Všichni noví zákazníci mají 3 dny na testování zdarma.

Vážení čtenáři! Jak automatizujete Docker Compose?

Docker Compose: Zjednodušení vaší práce pomocí Makefiles

Zdroj: www.habr.com

Přidat komentář