Ik pēc dažiem gadiem programmatūras izstrādes nozarē notiek paradigmas maiņa. Par vienu no šīm parādībām var atpazīt pieaugošo interesi par mikropakalpojumu koncepciju. Lai gan mikropakalpojumi nav jaunākā tehnoloģija, tikai nesen to popularitāte burtiski pieauga debesīs.
Lieli monolīti pakalpojumi tagad tiek aizstāti ar neatkarīgiem, autonomiem mikropakalpojumiem. Mikropakalpojumu var uzskatīt par lietojumprogrammu, kas kalpo vienam un ļoti specifiskam mērķim. Piemēram, tā varētu būt relāciju DBVS, Express lietojumprogramma, Solr pakalpojums.
Mūsdienās ir grūti iedomāties jaunas programmatūras sistēmas izstrādi, neizmantojot mikropakalpojumus. Un šī situācija, savukārt, noved mūs pie Docker platformas.
dokers
Platforma
Docker sastopas
Технология
Strādājot ar Docker Compose, YAML fails tiek izmantots, lai konfigurētu lietojumprogrammu pakalpojumus un organizētu to mijiedarbību savā starpā. Tāpēc Docker Compose ir rīks vairāku konteineru Docker lietojumprogrammu aprakstīšanai un palaišanai.
Divi konteineri, kas darbojas resursdatora sistēmā
GNU Marka
Programma make
, būtībā ir rīks programmu un bibliotēku veidošanas automatizēšanai no pirmkoda. Kopumā mēs tā varam teikt make
attiecas uz jebkuru procesu, kas ietver patvaļīgu komandu izpildi, lai pārveidotu dažus ievades materiālus uz kādu izvades formu, uz kādu mērķi. Mūsu gadījumā komandas docker-compose
tiks pārveidoti par abstraktiem mērķiem (
Lai pastāstītu programmai make
par to, ko mēs no tā vēlamies, mums ir nepieciešams fails Makefile
.
Mūsos Makefile
saturēs regulāras komandas docker
и docker-compose
, kas paredzēti daudzu problēmu risināšanai. Proti, runa ir par konteinera komplektēšanu, par tā iedarbināšanu, apturēšanu, restartēšanu, par lietotāja pieteikšanās organizēšanu konteinerā, par darbu ar konteineru žurnāliem un par citu līdzīgu problēmu risināšanu.
Tipiski Docker Compose lietošanas gadījumi
Iedomāsimies parastu tīmekļa lietojumprogrammu, kurai ir šādi komponenti:
- TimescaleDB datu bāze (Postgres).
- Lietojumprogramma Express.js.
- Ping (tikai konteiners, neko īpašu nedara).
Šai lietojumprogrammai būs nepieciešami 3 Docker konteineri un fails docker-compose
, kurā ir norādījumi par šo konteineru pārvaldību. Katram konteineram būs dažādi saskares punkti. Piemēram, ar konteineru timescale
būs iespējams strādāt aptuveni tāpat kā viņi strādā ar datu bāzēm. Proti, tas ļauj veikt šādas darbības:
- Pieteikšanās Postgres apvalkā.
- Galdu imports un eksports.
- radīšana
pg_dump
tabulas vai datu bāzes.
Express.js lietojumprogrammu konteiners, expressjs
, var būt šādas iespējas:
- Jaunu datu nodrošināšana no sistēmas žurnāla.
- Piesakieties čaulā, lai izpildītu noteiktas komandas.
Mijiedarbība ar konteineriem
Kad esam iestatījuši saziņu starp konteineriem, izmantojot Docker Compose, ir pienācis laiks sazināties ar šiem konteineriem. Docker Compose sistēmā ir komanda docker-compose
, atbalsta iespēja -f
, kas ļauj pārsūtīt failu uz sistēmu docker-compose.yml
.
Izmantojot šīs opcijas iespējas, jūs varat ierobežot mijiedarbību ar sistēmu tikai tiem konteineriem, kas ir minēti failā docker-compose.yml
.
Apskatīsim, kā mijiedarbība ar konteineriem izskatās, izmantojot komandas docker-compose
. Ja iedomājamies, ka mums jāpiesakās čaulā psql
, tad atbilstošās komandas varētu izskatīties šādi:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Tā pati komanda, kas netiek izmantota izpildei docker-compose
Un docker
, varētu izskatīties šādi:
docker exec -it edp_timescale_1 psql -Upostgres
Lūdzu, ņemiet vērā, ka šādos gadījumos vienmēr ir vēlams izmantot komandu docker
un komandu docker-compose
, jo tas novērš nepieciešamību atcerēties konteineru nosaukumus.
Abas iepriekš minētās komandas nav tik sarežģītas. Bet, ja formā izmantotu “iesaiņojumu”. Makefile
, kas dotu mums saskarni vienkāršu komandu veidā un pats izsauktu līdzīgas garas komandas, tad tos pašus rezultātus varētu sasniegt šādi:
make db-shell
Ir pilnīgi skaidrs, ka izmantošana Makefile
ievērojami atvieglo darbu ar konteineriem!
Darba piemērs
Pamatojoties uz iepriekš minēto projekta diagrammu, mēs izveidosim šādu failu 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
Lai pārvaldītu Docker Compose konfigurāciju un mijiedarbotos ar tajā aprakstītajiem konteineriem, mēs izveidosim šādu failu 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
Lielākā daļa šeit aprakstīto komandu attiecas uz visiem konteineriem, bet izmantojot opciju c=
ļauj ierobežot komandas darbības jomu līdz vienam konteineram.
Pēc Makefile
gatavs, varat to izmantot šādi:
make help
— visu pieejamo komandu saraksta izdošanamake
.
Palīdzība par pieejamajām komandām
make build
- attēla salikšana noDockerfile
. Mūsu piemērā mēs izmantojām esošos attēlustimescale
иping
. Bet attēlsapi
mēs vēlamies savākt uz vietas. Tieši tas tiks darīts pēc šīs komandas izpildes.
Docker konteinera izveidošana
make start
— visu konteineru palaišana. Lai palaistu tikai vienu konteineru, varat izmantot komandu, piemērammake start c=timescale
.
Tiek palaists laika skalas konteiners
Palaižot ping konteineru
make login-timescale
— piesakieties konteinera bash sesijātimescale
.
Tiek palaists bash laika skalas konteinerā
make db-shell
- ieeja uzpsql
konteinerātimescale
lai izpildītu SQL vaicājumus datu bāzē.
Palaiž psql timescaledb konteinerā
make stop
— konteineru apturēšana.
Laika skalas konteinera apturēšana
make down
— konteineru apturēšana un izņemšana. Lai noņemtu noteiktu konteineru, varat izmantot šo komandu, norādot vajadzīgo konteineru. Piemēram -make down c=timescale
vaimake down c=api
.
Visu konteineru apturēšana un dzēšana
Rezultāti
Lai gan Docker Compose sniedz mums bagātīgu komandu kopu konteineru pārvaldībai, dažreiz šīs komandas var kļūt garas un grūti atcerēties.
Lietošanas metode Makefile
palīdzēja mums izveidot ātru un vienkāršu mijiedarbību ar konteineriem no faila docker-compose.yml
. Proti, mēs runājam par sekojošo:
- Izstrādātājs mijiedarbojas tikai ar projekta konteineriem, kas aprakstīti
docker-compose.yml
, darbu netraucē citi darbojošie konteineri. - Gadījumā, ja noteikta komanda tiek aizmirsta, varat to izpildīt
make help
un saņemiet palīdzību par pieejamajām komandām. - Jums nav jāatceras gari argumentu saraksti, lai veiktu darbības, piemēram, iegūtu jaunākos žurnāla ierakstus vai pieteiktos sistēmā. Piemēram, komanda, piemēram,
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
pārvēršasmake db-shell
. - fails
Makefile
Projektam augot, varat tam elastīgi pielāgoties. Piemēram, ir viegli pievienot komandu, lai izveidotu datu bāzes dublējumu vai veiktu jebkuru citu darbību. - Ja liela izstrādātāju komanda izmanto to pašu
Makefile
, tas racionalizē sadarbību un samazina kļūdu skaitu.
PS Mūsos
Cienījamie lasītāji! Kā jūs automatizējat Docker Compose?
Avots: www.habr.com