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.
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
Docker Compose
Технология
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.
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 (
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-compose
a 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 docker
a 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
.
Nápověda k dostupným příkazům
make build
- sestavení obrazu zDockerfile
. V našem příkladu jsme použili existující obrázkytimescale
иping
. Ale obrazapi
chceme sbírat lokálně. To je přesně to, co se stane po provedení tohoto příkazu.
Stavba kontejneru Docker
make start
— spuštění všech kontejnerů. Chcete-li spustit pouze jeden kontejner, můžete použít příkaz jakomake start c=timescale
.
Spuštění kontejneru časové osy
Spuštění pingového kontejneru
make login-timescale
— přihlášení do bash relace kontejnerutimescale
.
Běh bash v kontejneru časové osy
make db-shell
- vchod dopsql
v kontejnerutimescale
pro provádění SQL dotazů proti databázi.
Spuštění psql v kontejneru timescaledb
make stop
— zastavování nádob.
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
nebomake down c=api
.
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 domake 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
Vážení čtenáři! Jak automatizujete Docker Compose?
Zdroj: www.habr.com