Bob ychydig flynyddoedd, mae'r diwydiant datblygu meddalwedd yn mynd trwy newid paradeim. Gellir cydnabod un o'r ffenomenau hyn fel y diddordeb cynyddol yn y cysyniad o ficrowasanaethau. Er nad microwasanaethau yw'r dechnoleg ddiweddaraf, dim ond yn ddiweddar y mae ei boblogrwydd wedi cynyddu'n aruthrol.
Mae gwasanaethau mawr monolithig bellach yn cael eu disodli gan ficrowasanaethau annibynnol, ymreolaethol. Gellir meddwl am ficrowasanaeth fel cymhwysiad sy'n ateb pwrpas unigol a phenodol iawn. Er enghraifft, gallai fod yn DBMS perthynol, yn gais Express, yn wasanaeth Solr.
Y dyddiau hyn, mae'n anodd dychmygu datblygu system feddalwedd newydd heb ddefnyddio microwasanaethau. Ac mae'r sefyllfa hon, yn ei dro, yn ein harwain at lwyfan y Docker.
Docker
Llwyfan
Cyfansoddwr Dociwr
Технология
Wrth weithio gyda Docker Compose, defnyddir ffeil YAML i ffurfweddu gwasanaethau cymhwysiad a threfnu eu rhyngweithio â'i gilydd. Felly mae Docker Compose yn offeryn ar gyfer disgrifio a rhedeg cymwysiadau Docker aml-gynhwysydd.
Dau gynhwysydd yn rhedeg ar system gwesteiwr
GNU Gwneud
Rhaglen make
, yn ei hanfod yn offeryn ar gyfer awtomeiddio adeiladu rhaglenni a llyfrgelloedd o god ffynhonnell. Yn gyffredinol, gallwn ddweud hynny make
yn berthnasol i unrhyw broses sy'n cynnwys gweithredu gorchmynion mympwyol i drawsnewid rhai deunyddiau mewnbwn i ffurf allbwn, i ryw nod. Yn ein hachos ni, y gorchmynion docker-compose
yn cael ei drawsnewid yn nodau haniaethol (
I ddweud wrth y rhaglen make
am yr hyn yr ydym ei eisiau ganddo, mae angen ffeil Makefile
.
Yn ein Makefile
bydd yn cynnwys gorchmynion rheolaidd docker
и docker-compose
, sydd wedi'u cynllunio i ddatrys llawer o broblemau. Sef, yr ydym yn sôn am gydosod cynhwysydd, am ei gychwyn, ei atal, ei ailgychwyn, am drefnu mewngofnodi defnyddiwr i'r cynhwysydd, am weithio gyda logiau cynhwysydd, ac am ddatrys problemau tebyg eraill.
Achosion Defnydd Nodweddiadol ar gyfer Cyfansoddi Docwyr
Gadewch i ni ddychmygu cymhwysiad gwe rheolaidd sydd â'r cydrannau canlynol:
- Cronfa ddata AmserlenDB (Postgres).
- Cais Express.js.
- Nid yw ping (dim ond cynhwysydd, yn gwneud unrhyw beth arbennig).
Bydd angen 3 cynhwysydd Docker a ffeil ar y cais hwn docker-compose
, sy'n cynnwys cyfarwyddiadau ar gyfer rheoli'r cynwysyddion hyn. Bydd gan bob cynhwysydd wahanol bwyntiau cyffwrdd. Er enghraifft, gyda chynhwysydd timescale
bydd modd gweithio tua'r un ffordd ag y maent yn gweithio gyda chronfeydd data. Sef, mae'n caniatáu ichi gyflawni'r gweithredoedd canlynol:
- Mewngofnodi i gragen Postgres.
- Mewnforio ac allforio tablau.
- creu
pg_dump
tablau neu gronfeydd data.
Cynhwysydd cais Express.js, expressjs
, gall fod â'r galluoedd canlynol:
- Darparu data ffres o log y system.
- Mewngofnodwch i'r gragen i weithredu rhai gorchmynion.
Rhyngweithio â Chynhwyswyr
Unwaith y byddwn wedi sefydlu cyfathrebu rhwng cynwysyddion gan ddefnyddio Docker Compose, mae'n bryd cyfathrebu â'r cynwysyddion hynny. O fewn y system Docker Compose mae gorchymyn docker-compose
, opsiwn ategol -f
, sy'n eich galluogi i drosglwyddo ffeil i'r system docker-compose.yml
.
Gan ddefnyddio galluoedd yr opsiwn hwn, gallwch gyfyngu rhyngweithio â'r system yn unig i'r cynwysyddion hynny a grybwyllir yn y ffeil docker-compose.yml
.
Gadewch i ni edrych ar sut olwg sydd ar ryngweithio â chynwysyddion wrth ddefnyddio gorchmynion docker-compose
. Os dychmygwn fod angen i ni fewngofnodi i'r gragen psql
, yna efallai y bydd y gorchmynion cyfatebol yn edrych fel hyn:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Yr un gorchymyn na ddefnyddir i weithredu docker-compose
Ac docker
, efallai y bydd yn edrych fel hyn:
docker exec -it edp_timescale_1 psql -Upostgres
Sylwch, mewn achosion o'r fath, mae bob amser yn well defnyddio'r gorchymyn docker
, a'r gorchymyn docker-compose
, gan fod hyn yn dileu'r angen i gofio enwau cynwysyddion.
Nid yw'r ddau orchymyn uchod mor anodd â hynny. Ond pe baem yn defnyddio “lapiwr” yn y ffurf Makefile
, a fyddai'n rhoi rhyngwyneb i ni ar ffurf gorchmynion syml ac a fyddai ei hun yn galw gorchmynion hir tebyg, yna gellid cyflawni'r un canlyniadau fel hyn:
make db-shell
Mae'n eithaf amlwg bod y defnydd Makefile
yn gwneud gweithio gyda chynwysyddion yn llawer haws!
Enghraifft weithredol
Yn seiliedig ar y diagram prosiect uchod, byddwn yn creu'r ffeil ganlynol 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
Er mwyn rheoli cyfluniad Docker Compose a rhyngweithio â'r cynwysyddion y mae'n eu disgrifio, byddwn yn creu'r ffeil ganlynol 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
Mae'r rhan fwyaf o'r gorchmynion a ddisgrifir yma yn berthnasol i bob cynhwysydd, ond gan ddefnyddio'r opsiwn c=
yn eich galluogi i gyfyngu cwmpas gorchymyn i un cynhwysydd.
Ar ôl Makefile
yn barod, gallwch ei ddefnyddio fel hyn:
make help
— cyhoeddi rhestr o'r holl orchmynion sydd ar gael ar eu cyfermake
.
Help gyda'r gorchmynion sydd ar gael
make build
- cydosod delwedd oDockerfile
. Yn ein hesiampl fe wnaethom ddefnyddio delweddau sy'n bodoli eisoestimescale
иping
. Ond y ddelweddapi
rydym am gasglu'n lleol. Dyma'n union beth fydd yn cael ei wneud ar ôl gweithredu'r gorchymyn hwn.
Adeiladu cynhwysydd Docker
make start
— lansio pob cynhwysydd. I lansio un cynhwysydd yn unig, gallwch ddefnyddio gorchymyn felmake start c=timescale
.
Rhedeg y cynhwysydd amserlen
Rhedeg cynhwysydd ping
make login-timescale
— mewngofnodi i sesiwn bash y cynhwysyddtimescale
.
Rhedeg bash mewn cynhwysydd amserlen
make db-shell
- mynediad ipsql
mewn cynhwysyddtimescale
i weithredu ymholiadau SQL yn erbyn y gronfa ddata.
Rhedeg psql mewn cynhwysydd timetimedb
make stop
— cynwysyddion stopio.
Stopio cynhwysydd amserlen
make down
— stopio a thynnu cynwysyddion. I gael gwared ar gynhwysydd penodol, gallwch ddefnyddio'r gorchymyn hwn yn nodi'r cynhwysydd a ddymunir. Er enghraifft -make down c=timescale
neumake down c=api
.
Stopio a dileu pob cynhwysydd
Canlyniadau
Er bod Docker Compose yn rhoi set gyfoethog o orchmynion i ni ar gyfer rheoli cynwysyddion, weithiau gall y gorchmynion hyn ddod yn hir ac yn anodd eu cofio.
Dull o ddefnyddio Makefile
ein helpu i sefydlu rhyngweithio cyflym a hawdd gyda chynwysyddion o ffeil docker-compose.yml
. Sef, rydym yn sôn am y canlynol:
- Mae'r datblygwr yn rhyngweithio â'r cynwysyddion prosiect a ddisgrifir yn unig
docker-compose.yml
, nid yw cynwysyddion rhedeg eraill yn ymyrryd â gwaith. - Os bydd gorchymyn penodol yn cael ei anghofio, gallwch chi weithredu'r gorchymyn
make help
a chael cymorth ar y gorchmynion sydd ar gael. - Nid oes rhaid i chi gofio rhestrau hir o ddadleuon i gyflawni gweithredoedd megis cael y cofnodion log diweddaraf neu fewngofnodi i system. Er enghraifft, gorchymyn fel
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
yn troi i mewn imake db-shell
. - file
Makefile
Gallwch addasu'n hyblyg iddo wrth i'r prosiect dyfu. Er enghraifft, mae'n hawdd ychwanegu gorchymyn i greu copi wrth gefn o gronfa ddata neu gyflawni unrhyw gamau eraill. - Os bydd tîm mawr o ddatblygwyr yn defnyddio'r un peth
Makefile
, mae hyn yn symleiddio cydweithio ac yn lleihau gwallau.
PS Yn ein
Annwyl ddarllenwyr! Sut ydych chi'n awtomeiddio Docker Compose?
Ffynhonnell: hab.com