N'afọ ole na ole ọ bụla, ụlọ ọrụ mmepe ngwanrọ na-enwe mgbanwe mgbanwe. Enwere ike ịmata otu n'ime ihe ndị a dị ka mmasị na-eto eto na echiche nke obere ọrụ. Ọ bụ ezie na microservices abụghị teknụzụ kachasị ọhụrụ, naanị n'oge na-adịbeghị anya ka ewu ewu ya rịgoro n'ụzọ nkịtị.
A na-eji ọrụ microservices nọọrọ onwe ya dochie nnukwu ọrụ monolithic ugbu a. Enwere ike iche na microservice dị ka ngwa na-arụ otu ebumnuche na nke akọwapụtara nke ọma. Dịka ọmụmaatụ, ọ nwere ike ịbụ DBMS mmekọrịta, ngwa Express, ọrụ Solr.
Ụbọchị ndị a, o siri ike iche n'echiche ịmepụta usoro ngwanrọ ọhụrụ na-ejighị microservices. Na ọnọdụ a, n'aka nke ya, na-eduga anyị na ikpo okwu Docker.
Docker
Platform
Docker Dezie
Technology
Mgbe gị na Docker Compose na-arụ ọrụ, a na-eji faịlụ YAML hazie ọrụ ngwa yana hazie mmekọrịta ha na ibe ha. Docker Compose bụ ngwa ọrụ maka ịkọwa na iji ngwa Docker nwere ọtụtụ akpa.
Akpa abụọ na-arụ ọrụ na sistemụ nnabata
GNU Mee
Usoro ihe omume ahụ make
, bụ n'ezie ngwá ọrụ maka akpaghị aka na-ewu mmemme na ụlọ akwụkwọ si koodu isi mmalite. N'ozuzu, anyị nwere ike ikwu nke ahụ make
na-emetụta usoro ọ bụla nke gụnyere imezu iwu aka ike iji gbanwee ụfọdụ ihe ntinye ka ọ bụrụ ụdị mmepụta, gaa na ebumnuche ụfọdụ. N'ọnọdụ anyị, iwu docker-compose
a ga-agbanwe ka ọ bụrụ ebumnuche nkịtị (
Iji gwa mmemme make
banyere ihe anyị chọrọ site na ya, anyị chọrọ faịlụ Makefile
.
Na nke anyi Makefile
ga-enwe iwu mgbe niile docker
и docker-compose
, nke e mere iji dozie ọtụtụ nsogbu. Ya bụ, anyị na-ekwu maka ikpokọta akpa, banyere ịmalite ya, ịkwụsị ya, ịmalitegharị ya, banyere ịhazi nbanye onye ọrụ na akpa ahụ, banyere ịrụ ọrụ na ndekọ akpa, na iji dozie nsogbu ndị ọzọ yiri ya.
Akpa eji eme ihe maka Docker dere
Ka anyị were were were ngwa webụ oge niile nwere ihe ndị a:
- TimecaleDB nchekwa data (Postgres).
- ngwa Express.js.
- Ping (naanị akpa, anaghị eme ihe ọ bụla pụrụ iche).
Ngwa a ga-achọ akpa Docker 3 na faịlụ docker-compose
, nke nwere ntuziaka maka ijikwa arịa ndị a. Akpa ọ bụla ga-enwe ebe mmetụ aka dị iche iche. Dị ka ihe atụ, na akpa timescale
ọ ga-ekwe omume ịrụ ọrụ dịka otu ha si arụ ọrụ na ọdụ data. Ya bụ, ọ na-enye gị ohere ime omume ndị a:
- Ịbanye n'ime shei Postgres.
- Bubata na mbupụ tebụl.
- kere eke
pg_dump
tebụl ma ọ bụ ọdụ data.
Ngwa ngwa Express.js, expressjs
, nwere ike inwe ikike ndị a:
- Na-enye data ọhụrụ sitere na ndekọ sistemụ.
- Banye na shei iji mebie ụfọdụ iwu.
Mmekọrịta na arịa
Ozugbo anyị melitela nkwukọrịta n'etiti arịa site na iji Docker Compose, oge eruola ka gị na arịa ndị ahụ kparịta ụka. N'ime usoro Docker Compose enwere iwu docker-compose
, na-akwado nhọrọ -f
, nke na-enye gị ohere ịnyefe faịlụ na sistemụ docker-compose.yml
.
N'iji ike nke nhọrọ a, ị nwere ike igbochi mmekọrịta na usoro naanị na arịa ndị ahụ edepụtara na faịlụ ahụ. docker-compose.yml
.
Ka anyị leba anya n'ihe mmekọrịta na arịa dị ka mgbe ị na-eji iwu docker-compose
. Ọ bụrụ na anyị chere na anyị kwesịrị ịbanye n'ime shei psql
, mgbe ahụ iwu ndị kwekọrọ nwere ike ịdị ka nke a:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Otu iwu nke anaghị eji eme ya docker-compose
na docker
, nwere ike ịdị ka nke a:
docker exec -it edp_timescale_1 psql -Upostgres
Biko mara na n'ọnọdụ ndị dị otú ahụ ọ na-aka mma mgbe niile iji iwu ahụ docker
, na otu docker-compose
, dị ka nke a na-ewepụ mkpa icheta akpa aha.
Iwu abụọ a dị n'elu adịghị esi ike. Ma ọ bụrụ na anyị na-eji "wrapper" n'ụdị Makefile
, nke ga-enye anyị interface n'ụdị iwu dị mfe ma n'onwe ya na-akpọ ogologo iwu ogologo oge, mgbe ahụ enwere ike nweta otu nsonaazụ ahụ dị ka nke a:
make db-shell
Ọ bụ nnọọ doro anya na ojiji Makefile
na-eme ka iji arịa rụọ ọrụ dị mfe karị!
Ihe atụ na-arụ ọrụ
Dabere na eserese ọrụ dị n'elu, anyị ga-emepụta faịlụ na-esonụ 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
Iji jikwaa nhazi Docker Compose ma soro arịa ndị ọ kọwara na-emekọrịta ihe, anyị ga-emepụta faịlụ na-esote 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
Ọtụtụ n'ime iwu ndị akọwara ebe a na-emetụta arịa niile, mana iji nhọrọ c=
na-enye gị ohere ịmachi oke nke iwu na otu akpa.
Emechaa Makefile
njikere, ị nwere ike iji ya dị ka nke a:
make help
- inye ndepụta iwu niile dị makamake
.
Enyemaka na iwu dị
make build
- agbakọta ihe oyiyi siDockerfile
. N'ihe atụ anyị, anyị ji ihe oyiyi dị adịtimescale
иping
. Ma oyiyiapi
anyị chọrọ ịnakọta na mpaghara. Nke a bụ kpọmkwem ihe a ga-eme ma emechaa iwu a.
Iwuli akpa Docker
make start
- na-ebupụta arịa niile. Iji malite naanị otu akpa, ịnwere ike iji iwu dịkamake start c=timescale
.
Na-agba ọsọ akpa oge
Na-agba ọsọ akpa ping
make login-timescale
- nbanye na bash nnọkọ nke akpatimescale
.
Na-agba ọsọ bash n'ime akpa oge
make db-shell
- ọnụ ụzọpsql
n'ime akpatimescale
iji mezuo ajụjụ SQL megide nchekwa data.
Na-agba ọsọ psql n'ime akpa timescaledb
make stop
- nkwụsị akpa.
Ịkwụsị akpa oge
make down
- ịkwụsị na iwepu arịa. Iji wepụ otu akpa, ị nwere ike iji iwu a na-akọwapụta akpa achọrọ. Ọmụmaatụ -make down c=timescale
ma ọ bụmake down c=api
.
Ịkwụsị na ihichapụ akpa niile
Nsonaazụ
Agbanyeghị na Docker Compose na-enye anyị ọtụtụ iwu maka ijikwa arịa, mgbe ụfọdụ iwu ndị a nwere ike ịdị ogologo ma sie ike icheta.
Usoro eji Makefile
nyeere anyị aka ịmepụta mmekọrịta ngwa ngwa na ngwa ngwa na arịa sitere na faịlụ docker-compose.yml
. Ya bụ, anyị na-ekwu maka ihe ndị a:
- Onye nrụpụta na-emekọrịta ihe naanị na igbe ọrụ akọwara na ya
docker-compose.yml
, ọrụ ndị ọzọ na-agba ọsọ anaghị egbochi ọrụ. - Ọ bụrụ na echefuru ụfọdụ iwu, ị nwere ike ịme iwu ahụ
make help
ma nweta enyemaka na iwu dị. - Ịkwesighi icheta ogologo ndepụta arụmụka iji mee omume dị ka ịnweta ndenye ndekọ kachasị ọhụrụ ma ọ bụ ịbanye na sistemụ. Dịka ọmụmaatụ, iwu dịka
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
tụgharịa n'imemake db-shell
. - file
Makefile
Ị nwere ike ime mgbanwe na ya ka ọrụ ahụ na-etolite. Dịka ọmụmaatụ, ọ dị mfe ịgbakwunye iwu ka ịmepụta ndabere nchekwa data ma ọ bụ mee ihe ọ bụla ọzọ. - Ọ bụrụ na nnukwu ìgwè ndị mmepe na-eji otu ihe ahụ
Makefile
, nke a na-eme ka mmekọ ọnụ ma na-ebelata njehie.
PS Na nke anyi
Ezigbo ndị na-agụ akwụkwọ! Kedu ka esi eme Docker Compose?
isi: www.habr.com