Iga paari aasta tagant toimub tarkvaraarenduse tööstuses paradigmamuutus. Üheks selliseks nähtuseks võib tunnistada kasvavat huvi mikroteenuste kontseptsiooni vastu. Kuigi mikroteenused ei ole uusim tehnoloogia, on selle populaarsus alles hiljuti hüppeliselt tõusnud.
Suured monoliitsed teenused on nüüd asendatud sõltumatute autonoomsete mikroteenustega. Mikroteenust võib pidada rakenduseks, mis teenib ühte ja väga konkreetset eesmärki. Näiteks võib see olla relatsiooniline DBMS, Express-rakendus või Solr-teenus.
Tänapäeval on raske ette kujutada uue tarkvarasüsteemi arendamist ilma mikroteenuseid kasutamata. Ja see olukord omakorda viib meid Dockeri platvormile.
laevalaadija
Platvorm
Docker loo
Технология
Docker Compose'iga töötamisel kasutatakse YAML-faili rakendusteenuste konfigureerimiseks ja nendevahelise suhtluse korraldamiseks. Docker Compose on seega tööriist mitme konteineriga Dockeri rakenduste kirjeldamiseks ja käitamiseks.
Kaks konteinerit, mis töötavad hostsüsteemis
GNU kaubamärk
Programm make
, on sisuliselt tööriist programmide ja teekide loomise automatiseerimiseks lähtekoodist. Üldiselt võime seda öelda make
kehtib mis tahes protsessi kohta, mis hõlmab suvaliste käskude täitmist, et teisendada mõned sisendmaterjalid mingile väljundvormile, eesmärgi saavutamiseks. Meie puhul käsud docker-compose
muudetakse abstraktseteks eesmärkideks (
Et programmile öelda make
selle kohta, mida me sellest tahame, vajame faili Makefile
.
Meie Makefile
sisaldab tavalisi käske docker
и docker-compose
, mis on mõeldud paljude probleemide lahendamiseks. Nimelt räägime konteineri kokkupanemisest, selle käivitamisest, seiskamisest, taaskäivitamisest, kasutaja konteinerisse sisselogimise korraldamisest, tööst konteinerilogidega ja muude sarnaste probleemide lahendamisest.
Docker Compose'i tüüpilised kasutusjuhud
Kujutagem ette tavalist veebirakendust, millel on järgmised komponendid:
- TimescaleDB andmebaas (Postgres).
- Express.js rakendus.
- Ping (lihtsalt konteiner, ei tee midagi erilist).
See rakendus vajab 3 Dockeri konteinerit ja faili docker-compose
, mis sisaldab juhiseid nende konteinerite haldamiseks. Igal konteineril on erinevad puutepunktid. Näiteks konteineriga timescale
on võimalik töötada ligikaudu samamoodi nagu nad töötavad andmebaasidega. Nimelt võimaldab see teil teha järgmisi toiminguid:
- Logige sisse Postgresi kesta.
- Tabelite import ja eksport.
- loomine
pg_dump
tabelid või andmebaasid.
Express.js rakenduse konteiner, expressjs
, võivad olla järgmised võimalused:
- Värskete andmete esitamine süsteemilogist.
- Teatud käskude täitmiseks logige kesta sisse.
Suhtlemine konteineritega
Kui oleme Docker Compose'i abil konteineritevahelise suhtluse seadistanud, on aeg nende konteineritega suhelda. Docker Compose süsteemis on käsk docker-compose
, tugivõimalus -f
, mis võimaldab faili süsteemi üle kanda docker-compose.yml
.
Selle valiku võimalusi kasutades saate piirata süsteemiga suhtlemist ainult nende konteineritega, mis on failis mainitud docker-compose.yml
.
Vaatame, kuidas näeb välja interaktsioon konteineritega käskude kasutamisel docker-compose
. Kui kujutame ette, et peame kesta sisse logima psql
, siis võivad vastavad käsud välja näha järgmised:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Sama käsk, mida ei kasutata täitmiseks docker-compose
Ja docker
, võib välja näha selline:
docker exec -it edp_timescale_1 psql -Upostgres
Pange tähele, et sellistel juhtudel on alati eelistatav kasutada käsku docker
ja käsk docker-compose
, kuna see välistab vajaduse konteinerite nimesid meeles pidada.
Mõlemad ülaltoodud käsud pole nii keerulised. Aga kui kasutaksime vormis "ümbrist". Makefile
, mis annaks meile liidese lihtsate käskude kujul ja ise nimetaks sarnaseid pikki käske, siis saaks samad tulemused saavutada järgmiselt:
make db-shell
On üsna ilmne, et kasutamine Makefile
muudab konteineritega töötamise palju lihtsamaks!
Töönäide
Ülaltoodud projektiskeemi põhjal loome järgmise faili 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'i konfiguratsiooni haldamiseks ja selles kirjeldatud konteineritega suhtlemiseks loome järgmise faili 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
Enamik siin kirjeldatud käske kehtib kõikidele konteineritele, kuid kasutades suvandit c=
võimaldab piirata käsu ulatust ühe konteineriga.
Pärast Makefile
valmis, saate seda kasutada järgmiselt:
make help
— kõigi saadaolevate käskude loendi väljastaminemake
.
Abi saadaolevate käskude kohta
make build
- pildi kokkupanekDockerfile
. Meie näites kasutasime olemasolevaid piltetimescale
иping
. Aga piltapi
tahame koguda kohapeal. Täpselt seda tehakse pärast selle käsu täitmist.
Dockeri konteineri ehitamine
make start
— kõigi konteinerite vettelaskmine. Ainult ühe konteineri käivitamiseks võite kasutada käsku nagumake start c=timescale
.
Ajaskaala konteineri käitamine
Pingimiskonteineri käitamine
make login-timescale
— logige sisse konteineri bash-seanssetimescale
.
Bashi käivitamine ajaskaala konteineris
make db-shell
- sissepääspsql
konteineristimescale
SQL päringute täitmiseks andmebaasis.
Psql-i käivitamine ajaskaalaga b konteineris
make stop
— konteinerite peatamine.
Ajaskaala konteineri peatamine
make down
— konteinerite peatamine ja eemaldamine. Konkreetse konteineri eemaldamiseks saate selle käsu abil määrata soovitud konteineri. Näiteks -make down c=timescale
võimake down c=api
.
Kõigi konteinerite peatamine ja kustutamine
Tulemused
Kuigi Docker Compose annab meile rikkaliku hulga käske konteinerite haldamiseks, võivad need käsud mõnikord muutuda pikaks ja neid on raske meeles pidada.
Kasutusmeetod Makefile
aitas meil luua kiire ja lihtsa suhtluse faili konteineritega docker-compose.yml
. Nimelt räägime järgmisest:
- Arendaja suhtleb ainult artiklis kirjeldatud projekti konteineritega
docker-compose.yml
, tööd ei sega teised jooksvad konteinerid. - Kui teatud käsk on ununenud, saate selle käsu täita
make help
ja saada abi saadaolevate käskude kohta. - Te ei pea meeles pidama pikki argumentide loendeid, et teha selliseid toiminguid nagu uusimate logikirjete hankimine või süsteemi sisselogimine. Näiteks käsk nagu
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
muutubmake db-shell
. - fail
Makefile
Saate sellega paindlikult kohaneda projekti kasvades. Näiteks on lihtne lisada käsku andmebaasi varukoopia loomiseks või mõne muu toimingu tegemiseks. - Kui suur arendajate meeskond kasutab sama
Makefile
, muudab see koostööd sujuvamaks ja vähendab vigu.
PS Meie
Kallid lugejad! Kuidas automatiseerite Docker Compose'i?
Allikas: www.habr.com