Her çend sal carekê, pîşesaziya pêşkeftina nermalavê berbi guheztinek paradîgmayê ve diçe. Yek ji van diyardeyan dikare wekî eleqeya mezin a li ser têgeha mîkroservisan were nas kirin. Her çend mîkroxizmet ne teknolojiya herî nû ne jî, tenê di van demên dawî de populerbûna wê bi rastî zêde bûye.
Karûbarên yekparêz ên mezin naha bi mîkroxizmetên serbixwe û xweser têne guheztin. Microservice dikare wekî serîlêdanek ku ji armancek yekane û pir taybetî re xizmet dike were fikirîn. Mînakî, ew dikare DBMS-ek têkilî, serîlêdanek Express, karûbarek Solr be.
Van rojan, dijwar e ku meriv xeyal bike ku pergalek nermalava nû bêyî karanîna mîkroservisan pêşve bibe. Û ev rewş, di encamê de, me berbi platforma Docker ve dibe.
Docker
Platforma
Docker Compose
Teknolojiyê
Dema ku bi Docker Compose re dixebitin, pelek YAML tê bikar anîn da ku karûbarên serîlêdanê mîheng bike û danûstendina wan bi hev re organîze bike. Ji ber vê yekê Docker Compose amûrek e ji bo ravekirin û xebitandina sepanên Docker-a pir-konteyner.
Du konteynir li ser pergalek mêvandar dixebitin
GNU Bike
Bername make
, di esasê xwe de amûrek e ji bo otomatîkkirina avakirina bername û pirtûkxaneyan ji koda çavkaniyê. Bi gelemperî, em dikarin bêjin make
ji bo her pêvajoyek ku pêkanîna fermanên keyfî vedihewîne ji bo veguheztina hin materyalên têketinê li hin formên derketinê, ji hin armancê re derbas dibe. Di rewşa me de, ferman docker-compose
dê veguhere armancên razber (
Ji bo bernameyê bêje make
li ser tiştên ku em jê dixwazin, em pelek hewce ne Makefile
.
Vîdeo Makefile
dê fermanên birêkûpêk hebin docker
и docker-compose
, ku ji bo çareserkirina gelek pirsgirêkan hatine çêkirin. Ango, em li ser berhevkirina konteynerek, li ser destpêkirina wê, rawestandina wê, ji nû ve destpêkirina wê, li ser organîzekirina têketina bikarhêner a konteynerê, li ser xebata bi têketinên konteynerê û li ser çareserkirina pirsgirêkên din ên bi vî rengî diaxivin.
Bûyerên Bikaranîna Tîpîkî ji bo Docker Compose
Ka em serîlêdanek webê ya birêkûpêk bifikirin ku pêkhateyên jêrîn hene:
- DatascaleDB (Postgres).
- sepana Express.js.
- Ping (tenê konteynerek, tiştek taybetî nake).
Vê serîlêdanê dê 3 konteynerên Docker û pelek hewce bike docker-compose
, ku talîmatên ji bo birêvebirina van konteyneran vedihewîne. Her konteynir dê xwediyê nuqteyên cûda yên têkiliyê be. Ji bo nimûne, bi konteynir timescale
dê mimkun be ku bi qasî ku ew bi databasan re bixebitin bi heman awayî bixebitin. Ango, ew dihêle hûn kiryarên jêrîn bikin:
- Têkeve nav şêlê Postgres.
- Import û hinardekirina tabloyan.
- creation
pg_dump
tablo an databases.
konteynir serîlêdana Express.js, expressjs
, dibe ku xwedî kapasîteyên jêrîn be:
- Daneyên nû ji têketina pergalê peyda dikin.
- Têkeve şêlê da ku hin fermanan bicîh bîne.
Têkiliya bi konteyniran re
Gava ku me di navbera konteyneran de bi karanîna Docker Compose re danûstendinê saz kir, ew dem e ku em bi wan konteyneran re têkilî daynin. Di nav pergala Docker Compose de fermanek heye docker-compose
, vebijarka piştgirî -f
, ku destûrê dide te ku pelek pergalê veguhezîne docker-compose.yml
.
Bi karanîna kapasîteyên vê vebijarkê, hûn dikarin danûstendina bi pergalê re tenê bi wan konteynerên ku di pelê de têne destnîşan kirin sînordar bikin. docker-compose.yml
.
Ka em mêze bikin ka têkiliyên bi konteyneran re dema ku emrê bikar tînin çawa xuya dikin docker-compose
. Ger em xeyal bikin ku pêdivî ye ku em têkevin şêlê psql
, wê hingê dibe ku emrên têkildar bi vî rengî xuya bikin:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Heman fermana ku ji bo bicîhkirinê nayê bikar anîn docker-compose
û docker
, dibe ku bi vî rengî xuya bike:
docker exec -it edp_timescale_1 psql -Upostgres
Ji kerema xwe bala xwe bidin ku di rewşên weha de her gav çêtir e ku meriv fermanê bikar bîne docker
, û tîmê docker-compose
, ji ber ku ev hewcedariya bîranîna navên konteyneran ji holê radike.
Her du fermanên jorîn ne ew çend dijwar in. Lê heke me di formê de "wrapper" bikar bîne Makefile
, ku dê di forma fermanên hêsan de navbeynkariyek bide me û bixwe dê fermanên dirêj ên mîna hev binav bike, wê hingê heman encam dikarin bi vî rengî werin bidestxistin:
make db-shell
Pir eşkere ye ku karanîna wê Makefile
xebata bi konteyneran re pir hêsantir dike!
Mînaka xebatê
Li ser bingeha diyagrama projeya jorîn, em ê pelê jêrîn biafirînin 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
Ji bo birêvebirina veavakirina Docker Compose û têkilî bi konteynerên ku ew diyar dike, em ê pelê jêrîn biafirînin 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
Piraniya fermanên ku li vir têne diyar kirin li hemî konteyneran têne sepandin, lê vebijarkê bikar tînin c=
destûrê dide te ku çarçoweya fermanek bi yek konteynir re sînordar bike.
Piştî Makefile
amade ye, hûn dikarin vî rengî bikar bînin:
make help
- weşandina navnîşek hemî fermanên ku ji bo wan henemake
.
Alîkarî li ser fermanên berdest
make build
- berhevkirina wêneyek jiDockerfile
. Di mînaka xwe de me wêneyên heyî bikar anîntimescale
иping
. Lê wêneapi
em dixwazin li herêmê kom bikin. Tiştê ku dê piştî pêkanîna vê fermanê were kirin tam ev e.
Avakirina konteynerek Docker
make start
- avêtina hemî konteyneran. Ji bo destpêkirina tenê yek konteynir, hûn dikarin fermanek mîna bikar bîninmake start c=timescale
.
Rêvekirina konteynera demjimêrê
Running konteynir ping
make login-timescale
- têkevin danişîna bash ya konteynerêtimescale
.
Bash di konteynirek demkî de diherike
make db-shell
- ketina navpsql
di konteynir detimescale
ji bo pêkanîna pirsên SQL li hember databasê.
psql di konteynirek timescaledb de dimeşîne
make stop
- konteynerên rawestandin.
Rawestandina konteynirek demkî
make down
- rawestandin û rakirina konteyneran. Ji bo rakirina konteynirek taybetî, hûn dikarin vê fermanê bikar bînin ku konteynera xwestî diyar bike. Bo nimûne -make down c=timescale
anmake down c=api
.
Rawestandin û jêbirina hemî konteyneran
Encam
Her çend Docker Compose ji bo birêvebirina konteyneran komek fermanên zengîn dide me, carinan ev ferman dikarin bîranîna dirêj û dijwar bibin.
Rêbaza bikaranînê Makefile
alîkariya me kir ku bi konteyneran re ji pelek pêwendiyek bilez û hêsan saz bikin docker-compose.yml
. Ango em behsa van tiştan dikin:
- Pêşvebir tenê bi konteynerên projeyê yên ku di nav de hatine destnîşan kirin re têkilî dike
docker-compose.yml
, kar ji hêla konteynerên din ên xebitandinê ve nayê asteng kirin. - Di bûyera ku fermanek diyarkirî ji bîr kirin, hûn dikarin fermanê bicîh bikin
make help
û li ser fermanên berdest alîkariyê bistînin. - Ne hewce ye ku hûn navnîşên dirêj ên argumanan bi bîr bînin da ku hûn çalakiyên wekî wergirtina têketinên herî paşîn an têketina pergalê bikin. Mînakî, fermanek mîna
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
vediguheremake db-shell
. - file
Makefile
Her ku proje mezin dibe hûn dikarin bi nermî pê re biguncînin. Mînakî, hêsan e ku meriv fermanek lê zêde bike da ku paşvekêşek databasê biafirîne an çalakiyek din bike. - Ger tîmek mezin a pêşdebiran heman yekê bikar tîne
Makefile
, ev hevkariyê xweş dike û xeletiyan kêm dike.
PS Vîdeo
Xwendevanên delal! Hûn çawa Docker Compose otomatîk dikin?
Source: www.habr.com