Ĉiujn malmultajn jarojn, la industrio pri programaro spertas paradigmoŝanĝon. Unu el ĉi tiuj fenomenoj povas esti rekonita kiel la kreskanta intereso en la koncepto de mikroservoj. Kvankam mikroservoj ne estas la plej nova teknologio, nur lastatempe ĝia populareco laŭvorte eksplodis.
Grandaj monolitaj servoj nun estas anstataŭigitaj per sendependaj, aŭtonomaj mikroservoj. Mikroservo povas esti konsiderata kiel aplikaĵo, kiu servas unuopan kaj tre specifan celon. Ekzemple, ĝi povus esti interrilata DBMS, Express-aplikaĵo, Solr-servo.
Nuntempe, estas malfacile imagi disvolvi novan programaran sistemon sen uzi mikroservojn. Kaj ĉi tiu situacio, siavice, kondukas nin al la platformo Docker.
Docker
Platformo
Docker Komponi
Teknologio
Kiam vi laboras kun Docker Compose, YAML-dosiero estas uzata por agordi aplikajn servojn kaj organizi ilian interagadon inter si. Docker Compose estas do ilo por priskribi kaj ruli plurkontenajn Docker-aplikaĵojn.
Du ujoj funkcias per gastiga sistemo
GNU Make
La programo make
, estas esence ilo por aŭtomatigi la konstruadon de programoj kaj bibliotekoj el fontkodo. Ĝenerale, ni povas diri tion make
validas por ajna procezo kiu implikas plenumi arbitrajn komandojn por transformi iujn enigmaterialojn al iu eligformo, al iu celo. En nia kazo, la komandoj docker-compose
estos transformitaj en abstraktajn celojn (
Por rakonti la programon make
pri tio, kion ni volas de ĝi, ni bezonas dosieron Makefile
.
En nia Makefile
enhavos regulajn komandojn docker
и docker-compose
, kiuj estas dizajnitaj por solvi multajn problemojn. Nome, ni parolas pri muntado de ujo, pri ekfunkciigo, haltigo, restartigo de ĝi, pri organizado de uzanta ensaluto al la ujo, pri laboro kun ujprogramoj kaj pri solvado de aliaj similaj problemoj.
Tipaj Uzkazoj por Docker Compose
Ni imagu regulan TTT-aplikaĵon kiu havas la jenajn komponentojn:
- TimescaleDB-datumbazo (Postgres).
- Express.js aplikaĵo.
- Ping (nur ujo, faras nenion specialan).
Ĉi tiu aplikaĵo bezonos 3 Docker-ujojn kaj dosieron docker-compose
, kiu enhavas instrukciojn por administri ĉi tiujn ujojn. Ĉiu ujo havos malsamajn tuŝpunktojn. Ekzemple, kun ujo timescale
eblos labori proksimume same kiel ili funkcias kun datumbazoj. Nome, ĝi permesas vin plenumi la jenajn agojn:
- Ensalutu en la Postgres-ŝelon.
- Importo kaj eksportado de tabeloj.
- kreaĵo
pg_dump
tabeloj aŭ datumbazoj.
Express.js aplika ujo, expressjs
, povas havi la jenajn kapablojn:
- Provizante freŝajn datumojn de la sistema protokolo.
- Ensalutu al la ŝelo por ekzekuti iujn komandojn.
Interagado kun Ujoj
Post kiam ni starigis komunikadon inter ujoj uzante Docker Compose, estas tempo komuniki kun tiuj ujoj. Ene de la sistemo Docker Compose estas komando docker-compose
, subtenanta opcion -f
, kiu permesas vin translokigi dosieron al la sistemo docker-compose.yml
.
Uzante la kapablojn de ĉi tiu opcio, vi povas limigi interagadon kun la sistemo nur al tiuj ujoj kiuj estas menciitaj en la dosiero. docker-compose.yml
.
Ni rigardu kiel aspektas interagoj kun ujoj kiam vi uzas komandojn docker-compose
. Se ni imagas, ke ni devas ensaluti en la ŝelon psql
, tiam la respondaj komandoj povus aspekti jene:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
La sama komando, kiu ne estas uzata por ekzekuti docker-compose
kaj docker
, povus aspekti jene:
docker exec -it edp_timescale_1 psql -Upostgres
Bonvolu noti, ke en tiaj kazoj estas ĉiam preferinde uzi la komandon docker
, kaj la teamo docker-compose
, ĉar tio forigas la bezonon memori ujajn nomojn.
Ambaŭ ĉi-supraj komandoj ne estas tiom malfacilaj. Sed se ni uzis "envolvaĵon" en la formo Makefile
, kiu donus al ni interfacon en la formo de simplaj komandoj kaj mem nomus similajn longajn komandojn, tiam la samaj rezultoj povus esti atingitaj jene:
make db-shell
Estas sufiĉe evidente, ke la uzo Makefile
multe pli facilas labori kun ujoj!
Labora ekzemplo
Surbaze de la supra projekto-diagramo, ni kreos la sekvan dosieron 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
Por administri la agordon de Docker Compose kaj interagi kun la ujoj, kiujn ĝi priskribas, ni kreos la sekvan dosieron 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
La plej multaj el la komandoj priskribitaj ĉi tie validas por ĉiuj ujoj, sed uzante la opcion c=
permesas vin limigi la amplekson de komando al unu ujo.
post la Makefile
preta, vi povas uzi ĝin tiel:
make help
— eldonante liston de ĉiuj disponeblaj komandoj pormake
.
Helpo pri disponeblaj komandoj
make build
- kunmeti bildon elDockerfile
. En nia ekzemplo ni uzis ekzistantajn bildojntimescale
иping
. Sed la bildoapi
ni volas kolekti loke. Ĉi tio estas ĝuste kio estos farita post ekzekuto de ĉi tiu komando.
Konstruante Docker-ujon
make start
— lanĉante ĉiujn ujojn. Por lanĉi nur unu ujon, vi povas uzi komandon kielmake start c=timescale
.
Kurante la tempskalan ujon
Rulado de ping-ujo
make login-timescale
— ensalutu al la bash-sesio de la ujotimescale
.
Kuranta bash en temposkala ujo
make db-shell
- enirejo alpsql
en ujotimescale
por efektivigi SQL-demandojn kontraŭ la datumbazo.
Rulante psql en timescaledb-ujo
make stop
— haltigi ujojn.
Maldaŭrigante tempskalan ujon
make down
— haltigi kaj forigi ujojn. Por forigi specifan ujon, vi povas uzi ĉi tiun komandon specifante la deziratan ujon. Ekzemple -make down c=timescale
aŭmake down c=api
.
Ĉesigi kaj forigi ĉiujn ujojn
Rezultoj
Kvankam Docker Compose donas al ni riĉan aron da komandoj por administri ujojn, foje ĉi tiuj komandoj povas fariĝi longaj kaj malfacile memoreblaj.
Metodo de uzo Makefile
helpis nin establi rapidan kaj facilan interagadon kun ujoj de dosiero docker-compose.yml
. Nome, ni parolas pri la jenaj:
- La programisto interagas nur kun la projektujoj priskribitaj en
docker-compose.yml
, laboro ne estas malhelpita de aliaj kurantaj ujoj. - En la okazo, ke certa komando estas forgesita, vi povas plenumi la komandon
make help
kaj ricevu helpon pri disponeblaj komandoj. - Vi ne devas memori longajn listojn de argumentoj por plenumi agojn kiel ricevi la plej novajn protokolojn aŭ ensaluti en sistemon. Ekzemple, komando kiel
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
iĝasmake db-shell
. - dosiero
Makefile
Vi povas flekseble adaptiĝi al ĝi dum la projekto kreskas. Ekzemple, estas facile aldoni komandon por krei datumbazan sekurkopion aŭ fari ajnan alian agon. - Se granda teamo de programistoj uzas la saman
Makefile
, ĉi tio fluliniigas kunlaboron kaj reduktas erarojn.
PS En nia
Karaj legantoj! Kiel vi aŭtomatigas Docker Compose?
fonto: www.habr.com