Urte batzuetan, software garapenaren industriak paradigma aldaketa bat jasaten du. Fenomeno horietako bat mikrozerbitzuen kontzeptuarekiko gero eta interes handiagoa dela aitor daiteke. Mikrozerbitzuak teknologia berriena ez diren arren, duela gutxi bere ospea literalki gora egin du.
Zerbitzu monolitiko handiak mikrozerbitzu independente eta autonomoekin ordezkatzen ari dira. Mikrozerbitzu bat helburu bakarra eta oso zehatza betetzen duen aplikazio gisa pentsa daiteke. Adibidez, DBMS erlazional bat, Express aplikazio bat, Solr zerbitzu bat izan daiteke.
Egun, zaila da mikrozerbitzurik erabili gabe software-sistema berri bat garatzen imajinatzea. Eta egoera honek, Docker plataformara garamatza.
Docker
Plataforma
Docker Compose
Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ
Docker Compose-rekin lan egiten duzunean, YAML fitxategi bat erabiltzen da aplikazio-zerbitzuak konfiguratzeko eta elkarren arteko elkarrekintza antolatzeko. Docker Compose, beraz, edukiontzi anitzeko Docker aplikazioak deskribatzeko eta exekutatzeko tresna bat da.
Ostalari sistema batean exekutatzen diren bi edukiontzi
GNU Make
Programa make
, funtsean, iturburu-kodetik programak eta liburutegiak eraikitzea automatizatzeko tresna bat da. Oro har, hori esan dezakegu make
Sarrerako material batzuk irteera forma batera eraldatzeko komando arbitrarioak exekutatzen dituen prozesu guztietan aplikatzen da, helburu batzuetara. Gure kasuan, komandoak docker-compose
helburu abstraktu bihurtuko dira (
Programa kontatzeko make
bertatik nahi dugunari buruz, fitxategi bat behar dugu Makefile
.
Gure Makefile
ohiko komandoak izango ditu docker
ΠΈ docker-compose
, arazo asko konpontzeko diseinatuta daudenak. Hots, edukiontzi bat muntatzeaz, abiarazteaz, geldituz, berrabiarazteaz, erabiltzaileen edukiontzian saioa antolatzeaz, edukiontzien erregistroekin lan egiteaz eta antzeko beste arazo batzuk konpontzeaz ari gara.
Docker Compose-ren ohiko erabilera kasuak
Imajina dezagun osagai hauek dituen web aplikazio arrunt bat:
- TimescaleDB datu-basea (Postgres).
- Express.js aplikazioa.
- Ping (ontzi bat besterik ez, ez du ezer berezirik egiten).
Aplikazio honek 3 Docker edukiontzi eta fitxategi bat beharko ditu docker-compose
, edukiontzi hauek kudeatzeko argibideak jasotzen dituena. Edukiontzi bakoitzak ukipen puntu desberdinak izango ditu. Adibidez, edukiontzi batekin timescale
datu-baseekin lan egiten duten modu berean lan egin ahal izango da. Hain zuzen, ekintza hauek egiteko aukera ematen du:
- Postgres shell-en saioa hasi.
- Taulen inportazioa eta esportazioa.
- sortzea
pg_dump
taulak edo datu-baseak.
Express.js aplikazioaren edukiontzia, expressjs
, gaitasun hauek izan ditzake:
- Sistemaren erregistroko datu berriak ematea.
- Hasi saioa shell-ean zenbait komando exekutatzeko.
Edukiontziekin elkarrekintzan aritzea
Docker Compose erabiliz edukiontzien arteko komunikazioa konfiguratu ondoren, edukiontzi horiekin komunikatzeko garaia da. Docker Compose sistemaren barruan komando bat dago docker-compose
, laguntza aukera -f
, fitxategi bat sistemara transferitzeko aukera ematen duena docker-compose.yml
.
Aukera honen gaitasunak erabiliz, sistemarekin elkarrekintza fitxategian aipatzen diren edukiontzietara muga dezakezu. docker-compose.yml
.
Ikus dezagun komandoak erabiltzean edukiontziekiko elkarrekintzak nolakoak diren docker-compose
. Oskolean saioa hasi behar dugula imajinatzen badugu psql
, orduan dagozkien komandoak honelakoak izan daitezke:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Exekutatzeko erabiltzen ez den komando bera docker-compose
Eta docker
, honelakoa izan daiteke:
docker exec -it edp_timescale_1 psql -Upostgres
Kontuan izan horrelako kasuetan beti komeni dela komandoa erabiltzea docker
, eta komandoa docker-compose
, horrek edukiontzien izenak gogoratzeko beharra ezabatzen baitu.
Goiko bi komandoak ez dira hain zailak. Baina forman βbilgarriβ bat erabili bagenu Makefile
, komando sinpleen formako interfaze bat emango liguke eta berez antzeko komando luzeak deituko lituzke, orduan emaitza berdinak honela lor litezke:
make db-shell
Erabilera nahiko nabaria da Makefile
ontziekin lan egitea askoz errazten du!
Lan adibidea
Goiko proiektuaren diagraman oinarrituta, ondorengo fitxategia sortuko dugu 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
Docker Compose konfigurazioa kudeatzeko eta deskribatzen dituen edukiontziekin elkarreragiteko, honako fitxategi hau sortuko dugu 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
Hemen deskribatutako komando gehienak edukiontzi guztiei aplikatzen zaizkie, baina aukera erabiliz c=
komando baten esparrua edukiontzi batera mugatzeko aukera ematen du.
Ondoren Makefile
prest, honela erabil dezakezu:
make help
β eskuragarri dauden komando guztien zerrenda igortzeamake
.
Eskuragarri dauden komandoei buruzko laguntza
make build
- irudi bat muntatzeaDockerfile
. Gure adibidean lehendik dauden irudiak erabili ditugutimescale
ΠΈping
. Baina irudiaapi
lokalean bildu nahi dugu. Hauxe da komando hau exekutatu ondoren egingo dena.
Docker edukiontzi bat eraikitzea
make start
β Edukiontzi guztiak jaurtitzea. Edukiontzi bakarra abiarazteko, bezalako komando bat erabil dezakezumake start c=timescale
.
Denbora-eskalan edukiontzia exekutatzen
Ping edukiontzi bat exekutatzen
make login-timescale
β hasi saioa edukiontziaren bash saioantimescale
.
Bash exekutatzen denbora-eskalako edukiontzi batean
make db-shell
- sarrerapsql
edukiontzi bateantimescale
datu-basearen aurkako SQL kontsultak exekutatzeko.
psql exekutatzen timescaledb edukiontzi batean
make stop
β ontziak gelditzea.
Denbora-eskalan edukiontzi bat geldiaraztea
make down
β ontziak gelditzea eta kentzea. Edukiontzi zehatz bat kentzeko, komando hau erabil dezakezu nahi duzun edukiontzia zehaztuz. Adibidez -make down c=timescale
edomake down c=api
.
Edukiontzi guztiak gelditzea eta ezabatzea
Emaitzak
Docker Compose-k edukiontziak kudeatzeko komando sorta aberatsa eskaintzen digun arren, batzuetan komando hauek luzeak eta zailak izan daitezke gogoratzeko.
Erabilera-metodoa Makefile
fitxategi batetik edukiontziekin interakzio azkarra eta erraza ezartzen lagundu digu docker-compose.yml
. Hain zuzen, honako hauetaz ari gara:
- Garatzaileak atalean deskribatutako proiektu-edukiontziekin soilik elkarreragiten du
docker-compose.yml
, lanean ez dute oztoporik jartzen martxan dauden beste edukiontziek. - Komando jakin bat ahazten bada, komandoa exekutatu dezakezu
make help
eta lortu laguntza erabilgarri dauden komandoetan. - Ez duzu zertan argudio-zerrenda luzeak gogoratu behar ekintzak egiteko, esate baterako, azken erregistroko sarrerak lortzea edo sistema batean saioa hastea. Adibidez, bezalako komando bat
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
txandaka sartumake db-shell
. - fitxategia
Makefile
Proiektua hazten doan heinean malgutasunez molda zaitezke. Adibidez, erraza da komando bat gehitzea datu-basearen babeskopia sortzeko edo beste edozein ekintza egiteko. - Garatzaile talde handi batek bera erabiltzen badu
Makefile
, horrek lankidetza errazten du eta akatsak murrizten ditu.
PS Gure
Irakurle maitea! Nola automatizatzen duzu Docker Compose?
Iturria: www.habr.com