Kas kelerius metus programinės įrangos kūrimo pramonė patiria paradigmos pasikeitimą. Vienas iš šių reiškinių gali būti pripažintas didėjančiu susidomėjimu mikropaslaugų koncepcija. Nors mikropaslaugos nėra pati naujausia technologija, tik pastaruoju metu jos populiarumas tiesiogine prasme išaugo.
Didelės monolitinės paslaugos dabar pakeičiamos nepriklausomomis, autonomiškomis mikropaslaugomis. Mikropaslauga gali būti laikoma programa, kuri tarnauja vienam ir labai konkrečiam tikslui. Pavyzdžiui, tai gali būti reliacinė DBVS, „Express“ programa, „Solr“ paslauga.
Šiais laikais sunku įsivaizduoti naujos programinės įrangos kūrimą nenaudojant mikro paslaugų. Ir ši situacija savo ruožtu veda mus į Docker platformą.
dokininkas
Platforma
"Docker Compose"
Технология
Dirbant su Docker Compose, YAML failas naudojamas konfigūruoti taikomųjų programų paslaugas ir organizuoti jų sąveiką tarpusavyje. Todėl „Docker Compose“ yra kelių konteinerių „Docker“ programų apibūdinimo ir vykdymo įrankis.
Du konteineriai, veikiantys pagrindinėje sistemoje
GNU gamintojas
Programa make
, iš esmės yra įrankis, skirtas automatizuoti programų ir bibliotekų kūrimą iš šaltinio kodo. Apskritai galime pasakyti, kad make
taikoma bet kokiam procesui, apimančiam savavališkų komandų vykdymą, kad kai kurios įvesties medžiagos būtų paverčiamos tam tikra išvesties forma, tam tikru tikslu. Mūsų atveju komandos docker-compose
bus paversti abstrakčiais tikslais (
Papasakoti programai make
apie tai, ko norime iš jo, mums reikia failo Makefile
.
Mumyse Makefile
bus įprastos komandos docker
и docker-compose
, kurios yra skirtos daugeliui problemų išspręsti. Būtent, mes kalbame apie konteinerio surinkimą, apie jo paleidimą, sustabdymą, paleidimą iš naujo, apie vartotojo prisijungimo prie konteinerio organizavimą, apie darbą su konteinerių žurnalais ir apie kitų panašių problemų sprendimą.
Įprasti „Docker Compose“ naudojimo atvejai
Įsivaizduokime įprastą žiniatinklio programą, kurią sudaro šie komponentai:
- TimescaleDB duomenų bazė (Postgres).
- Express.js programa.
- Ping (tik konteineris, nieko ypatingo nedaro).
Šiai programai reikės 3 Docker konteinerių ir failo docker-compose
, kuriame pateikiamos šių konteinerių tvarkymo instrukcijos. Kiekvienas konteineris turės skirtingus kontaktinius taškus. Pavyzdžiui, su konteineriu timescale
bus galima dirbti maždaug taip pat, kaip jie dirba su duomenų bazėmis. Būtent ji leidžia atlikti šiuos veiksmus:
- Prisijungimas prie Postgres apvalkalo.
- Lentelių importas ir eksportas.
- kūrimas
pg_dump
lenteles ar duomenų bazes.
Express.js programos konteineris, expressjs
, gali turėti šias galimybes:
- Naujų duomenų pateikimas iš sistemos žurnalo.
- Prisijunkite prie apvalkalo, kad vykdytumėte tam tikras komandas.
Sąveika su konteineriais
Kai nustatysime ryšį tarp konteinerių naudodami „Docker Compose“, laikas susisiekti su tais konteineriais. „Docker Compose“ sistemoje yra komanda docker-compose
, atraminis variantas -f
, kuri leidžia perkelti failą į sistemą docker-compose.yml
.
Naudodamiesi šios parinkties galimybėmis, galite apriboti sąveiką su sistema tik tais konteineriais, kurie yra paminėti faile docker-compose.yml
.
Pažiūrėkime, kaip sąveika su konteineriais atrodo naudojant komandas docker-compose
. Jei įsivaizduosime, kad turime prisijungti prie apvalkalo psql
, tada atitinkamos komandos gali atrodyti taip:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Ta pati komanda, kuri nenaudojama vykdyti docker-compose
Ir docker
, gali atrodyti taip:
docker exec -it edp_timescale_1 psql -Upostgres
Atkreipkite dėmesį, kad tokiais atvejais visada geriau naudoti komandą docker
, ir komanda docker-compose
, nes taip nebereikia atsiminti konteinerių pavadinimų.
Abi aukščiau pateiktos komandos nėra tokios sudėtingos. Bet jei formoje naudotume „įvyniojimą“. Makefile
, kuri suteiktų mums sąsają paprastų komandų pavidalu ir pati vadintų panašias ilgas komandas, tada tuos pačius rezultatus būtų galima pasiekti taip:
make db-shell
Visiškai akivaizdu, kad naudojimas Makefile
labai palengvina darbą su konteineriais!
Darbo pavyzdys
Remdamiesi aukščiau pateikta projekto schema, sukursime šį failą 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
Norėdami valdyti „Docker Compose“ konfigūraciją ir sąveikauti su joje aprašytais konteineriais, sukursime šį failą 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
Dauguma čia aprašytų komandų taikomos visiems konteineriams, tačiau naudojant parinktį c=
leidžia apriboti komandos apimtį iki vieno konteinerio.
Po Makefile
paruošta, galite naudoti taip:
make help
— visų galimų komandų sąrašo išdavimasmake
.
Pagalba apie galimas komandas
make build
- surinkti vaizdą išDockerfile
. Mūsų pavyzdyje naudojome esamus vaizdustimescale
иping
. Bet vaizdasapi
norime surinkti vietoje. Būtent tai bus daroma įvykdžius šią komandą.
„Docker“ konteinerio kūrimas
make start
— visų konteinerių paleidimas. Norėdami paleisti tik vieną konteinerį, galite naudoti tokią komandą kaipmake start c=timescale
.
Paleidžiamas laiko skalės sudėtinis rodinys
Ping konteinerio paleidimas
make login-timescale
- prisijunkite prie konteinerio bash sesijostimescale
.
Paleidžiamas bash laiko skalės konteineryje
make db-shell
- įėjimas įpsql
konteineryjetimescale
vykdyti SQL užklausas duomenų bazėje.
Psql paleidimas laiko skalės b konteineryje
make stop
— konteinerių sustabdymas.
Sustabdomas laiko skalės konteineris
make down
— konteinerių sustabdymas ir išėmimas. Norėdami pašalinti konkretų konteinerį, galite naudoti šią komandą, nurodydami norimą konteinerį. Pavyzdžiui -make down c=timescale
arbamake down c=api
.
Visų konteinerių stabdymas ir ištrynimas
rezultatai
Nors „Docker Compose“ suteikia daug komandų, skirtų konteineriams tvarkyti, kartais šios komandos gali tapti ilgos ir sunkiai įsimenamos.
Naudojimo būdas Makefile
padėjo mums greitai ir lengvai sąveikauti su konteineriais iš failo docker-compose.yml
. Būtent, mes kalbame apie šiuos dalykus:
- Kūrėjas sąveikauja tik su projekto konteineriais, aprašytais
docker-compose.yml
, darbui netrukdo kiti veikiantys konteineriai. - Jei tam tikra komanda pamirštama, galite ją vykdyti
make help
ir gauti pagalbos dėl galimų komandų. - Norint atlikti tokius veiksmus, kaip gauti naujausius žurnalo įrašus arba prisijungti prie sistemos, nereikia prisiminti ilgų argumentų sąrašų. Pavyzdžiui, tokia komanda kaip
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
virstamake db-shell
. - byla
Makefile
Galite lanksčiai prie jo prisitaikyti projektui augant. Pavyzdžiui, nesunku pridėti komandą duomenų bazės atsarginei kopijai sukurti arba bet kokiam kitam veiksmui atlikti. - Jei didelė kūrėjų komanda naudoja tą patį
Makefile
, tai supaprastina bendradarbiavimą ir sumažina klaidų skaičių.
PS Mumyse
Mieli skaitytojai! Kaip automatizuojate „Docker Compose“?
Šaltinis: www.habr.com