Chak kèk ane, endistri devlopman lojisyèl sibi yon chanjman paradigm. Youn nan fenomèn sa yo ka rekonèt kòm enterè k ap grandi nan konsèp mikwosèvis yo. Malgre ke mikwosèvis yo pa dernye teknoloji a, sèlman dènyèman gen popilarite li literalman monte.
Gwo sèvis monolitik yo kounye a ap ranplase pa mikwosèvis endepandan, otonòm. Yon mikwosèvis ka konsidere kòm yon aplikasyon ki sèvi yon sèl ak yon objektif trè espesifik. Pou egzanp, li ta ka yon DBMS relasyon, yon aplikasyon Express, yon sèvis Solr.
Jou sa yo, li difisil pou imajine devlope yon nouvo sistèm lojisyèl san yo pa itilize mikwosèvis. Ak sitiyasyon sa a, nan vire, mennen nou nan platfòm la Docker.
Koupre
Platfòm
Docker Konpoze
Технология
Lè w ap travay ak Docker Compose, yo itilize yon dosye YAML pou konfigirasyon sèvis aplikasyon yo epi òganize entèraksyon yo youn ak lòt. Se poutèt sa, Docker Compose se yon zouti pou dekri ak kouri aplikasyon pou plizyè veso Docker.
De resipyan kouri sou yon sistèm lame
GNU Fè
Pwogram make
, se esansyèlman yon zouti pou otomatize bilding nan pwogram ak bibliyotèk soti nan kòd sous. An jeneral, nou ka di sa make
aplike nan nenpòt pwosesis ki enplike nan egzekite kòmandman abitrè transfòme kèk materyèl antre nan kèk fòm pwodiksyon, nan kèk objektif. Nan ka nou an, kòmandman yo docker-compose
pral transfòme an objektif abstrè (
Pou di pwogram nan make
sou sa nou vle soti nan li, nou bezwen yon dosye Makefile
.
Nan nou an Makefile
pral gen kòmandman regilye docker
и docker-compose
, ki fèt pou rezoud anpil pwoblèm. Savwa, nou ap pale sou rasanble yon veso, sou kòmanse li, sispann li, rekòmanse li, sou òganize itilizatè login nan veso a, sou travay ak mòso bwa veso, ak sou rezoud lòt pwoblèm ki sanble.
Ka itilizasyon tipik pou Docker Compose
Ann imajine yon aplikasyon entènèt regilye ki gen eleman sa yo:
- baz done TimescaleDB (Postgres).
- Aplikasyon Express.js.
- Ping (jis yon veso, pa fè anyen espesyal).
Aplikasyon sa a pral bezwen 3 resipyan Docker ak yon dosye docker-compose
, ki gen enstriksyon pou jere resipyan sa yo. Chak veso pral gen diferan touchpoints. Pou egzanp, ak yon veso timescale
li pral posib pou travay apeprè menm jan yo travay ak baz done. Savwa, li pèmèt ou fè aksyon sa yo:
- Antre nan koki Postgres la.
- Enpòte ak ekspòtasyon tab yo.
- kreyasyon
pg_dump
tab oswa baz done.
veso aplikasyon Express.js, expressjs
, ka gen kapasite sa yo:
- Bay done fre nan boutèy demi lit sistèm lan.
- Konekte nan koki a pou egzekite sèten kòmandman.
Entèaksyon ak Containers
Yon fwa nou te etabli kominikasyon ant resipyan lè l sèvi avèk Docker Compose, li lè pou kominike ak resipyan sa yo. Nan sistèm Docker Compose gen yon lòd docker-compose
, opsyon sipò -f
, ki pèmèt ou transfere yon dosye nan sistèm nan docker-compose.yml
.
Sèvi ak kapasite opsyon sa a, ou ka limite entèraksyon ak sistèm nan sèlman nan resipyan sa yo ki mansyone nan dosye a. docker-compose.yml
.
Ann pran yon gade nan ki entèraksyon ak resipyan sanble lè w ap itilize kòmandman docker-compose
. Si nou imajine ke nou bezwen konekte nan koki a psql
, Lè sa a, kòmandman korespondan yo ta ka sanble sa a:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Kòmandman an menm ki pa itilize pou egzekite docker-compose
Ak docker
, ta ka sanble sa a:
docker exec -it edp_timescale_1 psql -Upostgres
Tanpri sonje ke nan ka sa yo li toujou pi preferab pou itilize kòmandman an docker
, ak kòmandman an docker-compose
, kòm sa elimine nesesite pou sonje non veso yo.
Tou de kòmandman ki anwo yo pa difisil. Men, si nou te itilize yon "wrapper" nan fòm lan Makefile
, ki ta ba nou yon koòdone nan fòm kòmandman senp epi li ta menm rele kòmandman long ki sanble, Lè sa a, menm rezilta yo ta ka reyalize tankou sa a:
make db-shell
Li se byen evidan ke itilizasyon an Makefile
fè travay ak resipyan pi fasil!
Travay egzanp
Dapre dyagram pwojè ki anwo a, nou pral kreye dosye sa a 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
Pou jere konfigirasyon Docker Compose ak kominike avèk resipyan li dekri yo, nou pral kreye dosye sa a 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
Pifò nan kòmandman ki dekri isit la aplike nan tout resipyan, men lè l sèvi avèk opsyon an c=
pèmèt ou limite sijè ki abòde yon kòmandman nan yon sèl veso.
Apre Makefile
pare, ou ka itilize li tankou sa a:
make help
— bay yon lis tout kòmandman ki disponib poumake
.
Èd sou kòmandman ki disponib
make build
- rasanble yon imaj deDockerfile
. Nan egzanp nou an nou itilize imaj ki egziste dejatimescale
иping
. Men, imaj laapi
nou vle kolekte lokalman. Sa a se egzakteman sa yo pral fè apre egzekite lòd sa a.
Bati yon veso Docker
make start
— lanse tout veso yo. Pou lanse yon sèl veso, ou ka itilize yon kòmand tankoumake start c=timescale
.
Kouri veso a tan
Kouri yon veso ping
make login-timescale
— konekte nan sesyon bash veso atimescale
.
Kouri bach nan yon veso echèl
make db-shell
- antre nanpsql
nan yon vesotimescale
pou egzekite demann SQL kont baz done a.
Kouri psql nan yon veso timescaledb
make stop
- kanpe veso yo.
Sispann yon veso echèl
make down
— kanpe epi retire veso yo. Pou retire yon veso espesifik, ou ka itilize kòmandman sa a ki espesifye veso a vle. Pa egzanp -make down c=timescale
oswamake down c=api
.
Sispann ak efase tout resipyan yo
Rezilta
Malgre ke Docker Compose ban nou yon seri kòmandman rich pou jere resipyan, pafwa kòmandman sa yo ka vin long epi difisil pou sonje.
Metòd pou itilize Makefile
te ede nou etabli entèraksyon rapid ak fasil ak resipyan ki soti nan yon dosye docker-compose.yml
. Savwa, nou ap pale de bagay sa yo:
- Pwomotè a reyaji sèlman ak resipyan pwojè yo dekri nan
docker-compose.yml
, travay pa entèfere ak lòt kontenè kouri. - Nan evènman an ke yo bliye yon lòd sèten, ou ka egzekite lòd la
make help
epi jwenn èd sou kòmandman ki disponib. - Ou pa bezwen sonje lis long agiman pou fè aksyon tankou jwenn dènye antre yo oswa antre nan yon sistèm. Pou egzanp, yon lòd tankou
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
vire nanmake db-shell
. - dosye
Makefile
Ou ka adapte yo avèk li pandan pwojè a ap grandi. Pou egzanp, li fasil pou ajoute yon lòd pou kreye yon backup baz done oswa fè nenpòt lòt aksyon. - Si yon gwo ekip devlopè itilize menm bagay la
Makefile
, sa rasyonalize kolaborasyon ak diminye erè.
PS Nan nou an
Chè lektè! Ki jan ou otomatize Docker Compose?
Sous: www.habr.com