Á nokkurra ára fresti verður hugmyndafræðibreyting í hugbúnaðarþróunariðnaðinum. Eitt af þessum fyrirbærum má greina sem vaxandi áhugi á hugtakinu örþjónustu. Þrátt fyrir að örþjónusta sé ekki nýjasta tæknin, hafa vinsældir hennar bókstaflega rokið upp aðeins nýlega.
Nú er verið að skipta út stórri einhæfri þjónustu fyrir sjálfstæðar, sjálfstæðar örþjónustur. Líta má á örþjónustu sem forrit sem þjónar einum og mjög sérstökum tilgangi. Til dæmis gæti það verið vensla DBMS, Express forrit, Solr þjónusta.
Þessa dagana er erfitt að ímynda sér að þróa nýtt hugbúnaðarkerfi án þess að nota örþjónustur. Og þetta ástand leiðir okkur aftur að Docker pallinum.
Docker
Platform
Docker Compose
Технология
Þegar unnið er með Docker Compose er YAML skrá notuð til að stilla forritaþjónustur og skipuleggja samskipti þeirra við hvert annað. Docker Compose er því tæki til að lýsa og keyra Docker forrit með mörgum gáma.
Tveir gámar sem keyra á hýsilkerfi
GNU Make
Program make
, er í meginatriðum tæki til að gera sjálfvirkan smíði forrita og bókasöfna frá frumkóða. Almennt séð getum við sagt það make
á við um hvaða ferli sem er sem felur í sér að framkvæma handahófskenndar skipanir til að umbreyta sumum inntaksefnum í eitthvert úttaksform, að einhverju markmiði. Í okkar tilviki, skipanirnar docker-compose
verður umbreytt í óhlutbundin markmið (
Til að segja forritinu make
um hvað við viljum fá úr því, við þurfum skrá Makefile
.
Í okkar Makefile
mun innihalda reglulegar skipanir docker
и docker-compose
, sem eru hönnuð til að leysa mörg vandamál. Við erum nefnilega að tala um að setja saman gám, um að ræsa hann, stöðva hann, endurræsa hann, um að skipuleggja notendainnskráningu á gáminn, um að vinna með gámalogga og um að leysa önnur svipuð vandamál.
Dæmigert notkunartilvik fyrir Docker Compose
Við skulum ímynda okkur venjulegt vefforrit sem hefur eftirfarandi hluti:
- TimescaleDB gagnagrunnur (Postgres).
- Express.js forritið.
- Ping (bara ílát, gerir ekkert sérstakt).
Þetta forrit mun þurfa 3 Docker gáma og skrá docker-compose
, sem inniheldur leiðbeiningar um stjórnun þessara gáma. Hver gámur mun hafa mismunandi snertipunkta. Til dæmis með ílát timescale
hægt verður að vinna nokkurn veginn á sama hátt og þeir vinna með gagnagrunna. Það gerir þér nefnilega kleift að framkvæma eftirfarandi aðgerðir:
- Að skrá sig inn í Postgres skelina.
- Inn- og útflutningur á borðum.
- sköpun
pg_dump
töflur eða gagnagrunna.
Express.js forritsílát, expressjs
, gæti haft eftirfarandi eiginleika:
- Að útvega ný gögn úr kerfisskránni.
- Skráðu þig inn í skelina til að framkvæma ákveðnar skipanir.
Samskipti við gáma
Þegar við höfum sett upp samskipti milli gáma með því að nota Docker Compose, er kominn tími til að hafa samskipti við þá gáma. Innan Docker Compose kerfisins er skipun docker-compose
, stuðningsmöguleiki -f
, sem gerir þér kleift að flytja skrá yfir í kerfið docker-compose.yml
.
Með því að nota möguleika þessa valmöguleika geturðu takmarkað samskipti við kerfið aðeins við þá ílát sem eru nefnd í skránni docker-compose.yml
.
Við skulum skoða hvernig samskipti við gáma líta út þegar skipanir eru notaðar docker-compose
. Ef við ímyndum okkur að við þurfum að skrá þig inn í skelina psql
, þá gætu samsvarandi skipanir litið svona út:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Sama skipun og er ekki notuð til að framkvæma docker-compose
Og docker
, gæti litið svona út:
docker exec -it edp_timescale_1 psql -Upostgres
Vinsamlegast athugaðu að í slíkum tilvikum er alltaf æskilegt að nota skipunina docker
, og skipunina docker-compose
, þar sem þetta útilokar þörfina á að muna gámaheiti.
Báðar ofangreindar skipanir eru ekki svo erfiðar. En ef við notuðum „umbúðir“ í formi Makefile
, sem myndi gefa okkur viðmót í formi einfaldra skipana og myndi sjálft kalla svipaðar langar skipanir, þá gæti sömu niðurstöður náðst svona:
make db-shell
Það er alveg augljóst að notkun Makefile
gerir vinnu með gáma mun auðveldari!
Vinnandi dæmi
Byggt á ofangreindu verkefnismynd, munum við búa til eftirfarandi skrá 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
Til að stjórna Docker Compose stillingunum og hafa samskipti við gámana sem hún lýsir munum við búa til eftirfarandi skrá 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
Flestar skipanirnar sem lýst er hér eiga við um alla gáma, en með því að nota valkostinn c=
gerir þér kleift að takmarka umfang skipunar við einn gám.
Eftir Makefile
tilbúinn, þú getur notað það svona:
make help
- gefa út lista yfir allar skipanir sem eru tiltækar fyrirmake
.
Hjálp um tiltækar skipanir
make build
- að setja saman mynd úrDockerfile
. Í dæminu okkar notuðum við núverandi myndirtimescale
иping
. En myndinapi
við viljum safna á staðnum. Þetta er nákvæmlega það sem verður gert eftir að þessi skipun er framkvæmd.
Byggja Docker gám
make start
— ræsa alla gáma. Til að ræsa aðeins einn ílát geturðu notað skipun eins ogmake start c=timescale
.
Keyrir tímakvarða gáminn
Að keyra ping gám
make login-timescale
— skráðu þig inn á bash-lotu ílátsinstimescale
.
Hlaupandi bash í tímakvarða ílát
make db-shell
- inngangur aðpsql
í gámitimescale
til að framkvæma SQL fyrirspurnir gegn gagnagrunninum.
Keyrir psql í timescaledb gámi
make stop
— stöðva gáma.
Stöðvun tímakvarða gáms
make down
— stöðva og fjarlægja gáma. Til að fjarlægja tiltekið ílát geturðu notað þessa skipun til að tilgreina viðkomandi ílát. Til dæmis -make down c=timescale
eðamake down c=api
.
Stöðva og eyða öllum gámum
Niðurstöður
Þó að Docker Compose gefi okkur mikið sett af skipunum til að stjórna gámum, geta þessar skipanir stundum orðið langar og erfitt að muna þær.
Notkunaraðferð Makefile
hjálpaði okkur að koma á skjótum og auðveldum samskiptum við gáma úr skrá docker-compose.yml
. Við erum nefnilega að tala um eftirfarandi:
- Framkvæmdaraðilinn hefur aðeins samskipti við verkefnisílátin sem lýst er í
docker-compose.yml
, vinnu er ekki truflað af öðrum hlaupandi gámum. - Ef ákveðin skipun gleymist geturðu framkvæmt skipunina
make help
og fáðu aðstoð við tiltækar skipanir. - Þú þarft ekki að muna langa lista af rökum til að framkvæma aðgerðir eins og að fá nýjustu skráningarfærslur eða skrá þig inn í kerfi. Til dæmis skipun eins og
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
breytist ímake db-shell
. - skrá
Makefile
Þú getur á sveigjanlegan hátt lagað þig að því eftir því sem verkefnið stækkar. Til dæmis er auðvelt að bæta við skipun til að búa til öryggisafrit af gagnagrunni eða framkvæma aðrar aðgerðir. - Ef stórt teymi forritara notar það sama
Makefile
, þetta hagræðir samvinnu og dregur úr villum.
PS Í okkar
Kæru lesendur! Hvernig gerirðu sjálfvirkan Docker Compose?
Heimild: www.habr.com