Docker Compose: Zjednodušenie vašej práce pomocou Makefiles

Každých pár rokov prechádza priemysel vývoja softvéru zmenou paradigmy. Jedným z týchto fenoménov je rastúci záujem o koncept mikroslužieb. Hoci mikroslužby nie sú najnovšou technológiou, len v poslednom čase ich obľuba doslova raketovo stúpa.

Veľké monolitické služby sú teraz nahradené nezávislými, autonómnymi mikroslužbami. Mikroslužbu si možno predstaviť ako aplikáciu, ktorá slúži jedinému a veľmi špecifickému účelu. Môže to byť napríklad relačná DBMS, expresná aplikácia, služba Solr.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles

V súčasnosti je ťažké predstaviť si vývoj nového softvérového systému bez použitia mikroslužieb. A táto situácia nás zasa vedie k platforme Docker.

prístavný robotník

Platforma prístavný robotník, vo vývoji a nasadzovaní mikroslužieb, sa stala takmer priemyselným štandardom. Na webovej stránke projektu sa môžete dozvedieť, že Docker je jediná nezávislá kontajnerizačná platforma, ktorá umožňuje organizáciám bez námahy vytvárať ľubovoľné aplikácie, ako aj ich distribuovať a spúšťať v akomkoľvek prostredí – od hybridných cloudov až po okrajové systémy.

Docker Compose

Технология Docker Compose určené na konfiguráciu aplikácií s viacerými kontajnermi. Projekt Docker Compose môže obsahovať toľko kontajnerov Docker, koľko potrebuje tvorca projektu.

Pri práci s Docker Compose sa súbor YAML používa na konfiguráciu aplikačných služieb a organizovanie ich vzájomnej interakcie. Docker Compose je teda nástroj na popis a spustenie viackontajnerových aplikácií Docker.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Dva kontajnery bežiace na hostiteľskom systéme

Značka GNU

Program make, je v podstate nástrojom na automatizáciu vytvárania programov a knižníc zo zdrojového kódu. Vo všeobecnosti to môžeme povedať make sa vzťahuje na akýkoľvek proces, ktorý zahŕňa vykonávanie ľubovoľných príkazov na transformáciu niektorých vstupných materiálov do určitej výstupnej formy na nejaký účel. V našom prípade príkazy docker-compose sa premení na abstraktné ciele (Telefónne ciele).

Ak chcete povedať programu make o tom, čo od toho chceme, potrebujeme súbor Makefile.

V našom Makefile bude obsahovať bežné príkazy docker и docker-compose, ktoré sú určené na riešenie mnohých problémov. Konkrétne hovoríme o zostavení kontajnera, o jeho spustení, zastavení, reštarte, o organizácii prihlásenia používateľa do kontajnera, o práci s protokolmi kontajnera a o riešení iných podobných problémov.

Typické prípady použitia pre Docker Compose

Predstavme si bežnú webovú aplikáciu, ktorá má nasledujúce komponenty:

  • Databáza TimescaleDB (Postgres).
  • Aplikácia Express.js.
  • Ping (len kontajner, nerobí nič zvláštne).

Táto aplikácia bude potrebovať 3 kontajnery Docker a súbor docker-compose, ktorý obsahuje pokyny na správu týchto kontajnerov. Každý kontajner bude mať iné kontaktné body. Napríklad s nádobou timescale bude možné pracovať približne rovnako, ako pracujú s databázami. Konkrétne vám umožňuje vykonávať nasledujúce akcie:

  • Prihlásenie do shellu Postgres.
  • Import a export tabuliek.
  • tvorba pg_dump tabuľky alebo databázy.

kontajner aplikácie Express.js, expressjs, môže mať nasledujúce schopnosti:

  • Poskytovanie čerstvých údajov zo systémového denníka.
  • Ak chcete vykonať určité príkazy, prihláste sa do shellu.

Interakcia s kontajnermi

Keď sme nastavili komunikáciu medzi kontajnermi pomocou Docker Compose, je čas komunikovať s týmito kontajnermi. V rámci systému Docker Compose existuje príkaz docker-compose, podporná možnosť -f, ktorý umožňuje preniesť súbor do systému docker-compose.yml.

Pomocou možností tejto voľby môžete obmedziť interakciu so systémom len na tie kontajnery, ktoré sú uvedené v súbore docker-compose.yml.

Pozrime sa, ako vyzerajú interakcie s kontajnermi pri používaní príkazov docker-compose. Ak si predstavíme, že sa potrebujeme prihlásiť do shellu psql, potom môžu zodpovedajúce príkazy vyzerať takto:

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

Rovnaký príkaz, ktorý sa nepoužíva na vykonanie docker-composeA docker, môže vyzerať takto:

docker exec -it  edp_timescale_1 psql -Upostgres

Upozorňujeme, že v takýchto prípadoch je vždy vhodnejšie použiť príkaz dockera príkaz docker-compose, pretože to eliminuje potrebu pamätať si názvy kontajnerov.

Oba vyššie uvedené príkazy nie sú také ťažké. Ale ak by sme vo forme použili „obal“. Makefile, ktorý by nám poskytol rozhranie vo forme jednoduchých príkazov a sám by volal podobné dlhé príkazy, potom by sa dali dosiahnuť rovnaké výsledky takto:

make db-shell

Je úplne zrejmé, že použitie Makefile značne uľahčuje prácu s nádobami!

Pracovný príklad

Na základe vyššie uvedenej schémy projektu vytvoríme nasledujúci súbor 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

Na spravovanie konfigurácie Docker Compose a interakciu s kontajnermi, ktoré popisuje, vytvoríme nasledujúci súbor 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äčšina tu popísaných príkazov sa vzťahuje na všetky kontajnery, ale s použitím voľby c= umožňuje obmedziť rozsah príkazu na jeden kontajner.

potom, čo Makefile pripravený, môžete ho použiť takto:

  • make help — vydanie zoznamu všetkých dostupných príkazov make.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Pomoc s dostupnými príkazmi

  • make build - zostavenie obrazu z Dockerfile. V našom príklade sme použili existujúce obrázky timescale и ping. Ale obraz api chceme zbierať lokálne. To je presne to, čo sa stane po vykonaní tohto príkazu.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Vytvorenie kontajnera Docker

  • make start — spustenie všetkých kontajnerov. Ak chcete spustiť iba jeden kontajner, môžete použiť príkaz ako make start c=timescale.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Spustenie kontajnera časovej mierky

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Spustenie pingového kontajnera

  • make login-timescale — prihláste sa do bash relácie kontajnera timescale.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Spustený bash v časovom kontajneri

  • make db-shell - vchod do psql v nádobe timescale na vykonanie SQL dotazov proti databáze.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Spustenie psql v kontajneri timescaledb

  • make stop — zastavenie nádob.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Zastavenie kontajnera časovej mierky

  • make down — zastavovanie a odstraňovanie nádob. Ak chcete odstrániť konkrétny kontajner, môžete použiť tento príkaz špecifikujúci požadovaný kontajner. Napríklad - make down c=timescale alebo make down c=api.

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles
Zastavenie a odstránenie všetkých kontajnerov

Výsledky

Hoci nám Docker Compose poskytuje bohatú sadu príkazov na správu kontajnerov, niekedy môžu byť tieto príkazy dlhé a ťažko zapamätateľné.

Spôsob použitia Makefile nám pomohol vytvoriť rýchlu a jednoduchú interakciu s kontajnermi zo súboru docker-compose.yml. Konkrétne hovoríme o nasledujúcom:

  • Vývojár komunikuje iba s projektovými kontajnermi opísanými v docker-compose.yml, práci neprekážajú iné bežiace kontajnery.
  • V prípade zabudnutia určitého príkazu môžete príkaz vykonať make help a získajte pomoc s dostupnými príkazmi.
  • Nemusíte si pamätať dlhé zoznamy argumentov na vykonanie akcií, ako je získanie najnovších záznamov denníka alebo prihlásenie do systému. Napríklad príkaz ako docker-compose -f docker-compose.yml exec timescale psql -Upostgres zákruty do make db-shell.
  • súbor Makefile Môžete sa mu flexibilne prispôsobiť podľa toho, ako projekt rastie. Napríklad je jednoduché pridať príkaz na vytvorenie zálohy databázy alebo vykonať akúkoľvek inú akciu.
  • Ak to isté používa veľký tím vývojárov Makefile, to zefektívňuje spoluprácu a znižuje chyby.

PS V našom trhovisko je tam obrázok prístavný robotník, ktorý je možné nainštalovať jedným kliknutím. Prevádzku kontajnerov si môžete skontrolovať na VPS. Všetci noví klienti majú 3 dni na testovanie zdarma.

Vážení čitatelia! Ako automatizujete Docker Compose?

Docker Compose: Zjednodušenie vašej práce pomocou Makefiles

Zdroj: hab.com

Pridať komentár