Kull ftit snin, l-industrija tal-iżvilupp tas-softwer tgħaddi minn bidla fil-paradigma. Wieħed minn dawn il-fenomeni jista 'jiġi rikonoxxut bħala l-interess dejjem jikber fil-kunċett ta' mikroservizzi. Għalkemm il-mikroservizzi mhumiex l-aktar teknoloġija ġdida, dan l-aħħar biss il-popolarità tagħha żdiedet litteralment.
Servizzi monolitiċi kbar issa qed jiġu sostitwiti minn mikroservizzi indipendenti u awtonomi. Mikroservizz jista' jitqies bħala applikazzjoni li sservi għan wieħed u speċifiku ħafna. Per eżempju, jista 'jkun DBMS relazzjonali, applikazzjoni Express, servizz Solr.
Dawn il-ġranet, huwa diffiċli li wieħed jimmaġina li qed tiżviluppa sistema ta 'softwer ġdida mingħajr ma tuża mikroservizzi. U din is-sitwazzjoni, min-naħa tagħha, twassalna għall-pjattaforma Docker.
Docker
Pjattaforma
Docker Ikteb
Технология
Meta taħdem ma 'Docker Compose, fajl YAML jintuża biex jiġi kkonfigurat is-servizzi tal-applikazzjoni u jorganizzaw l-interazzjoni tagħhom ma' xulxin. Docker Compose huwa għalhekk għodda biex tiddeskrivi u tħaddem applikazzjonijiet Docker b'ħafna kontenituri.
Żewġ kontenituri li jaħdmu fuq sistema ospitanti
GNU Make
Program make
, hija essenzjalment għodda għall-awtomatizzazzjoni tal-bini ta 'programmi u libreriji mill-kodiċi tas-sors. B'mod ġenerali, nistgħu ngħidu li make
japplika għal kwalunkwe proċess li jinvolvi l-eżekuzzjoni ta 'kmandi arbitrarji biex jittrasforma xi materjali ta' input għal xi forma ta 'output, għal xi għan. Fil-każ tagħna, il-kmandi docker-compose
se jinbidel f'miri astratti (
Biex tgħid il-programm make
dwar dak li rridu minnu, għandna bżonn fajl Makefile
.
Fil-tagħna Makefile
se jkun fih kmandi regolari docker
и docker-compose
, li huma mfassla biex isolvu ħafna problemi. Jiġifieri, qed nitkellmu dwar l-assemblaġġ ta 'kontenitur, dwar il-bidu tiegħu, it-twaqqif, il-bidu mill-ġdid, dwar l-organizzazzjoni tal-login tal-utent fil-kontenitur, dwar il-ħidma ma' zkuk tal-kontenituri, u dwar is-soluzzjoni ta 'problemi oħra simili.
Każijiet ta' Użu Tipiċi għal Docker Compose
Ejja nimmaġinaw applikazzjoni tal-web regolari li għandha l-komponenti li ġejjin:
- Database TimescaleDB (Postgres).
- Applikazzjoni Express.js.
- Ping (sempliċement kontenitur, ma jagħmel xejn speċjali).
Din l-applikazzjoni se teħtieġ 3 kontenituri Docker u fajl docker-compose
, li fih struzzjonijiet għall-ġestjoni ta' dawn il-kontenituri. Kull kontenitur se jkollu touchpoints differenti. Per eżempju, b'kontenitur timescale
ikun possibbli li taħdem bejn wieħed u ieħor bl-istess mod kif jaħdmu mad-databases. Jiġifieri, jippermettilek twettaq l-azzjonijiet li ġejjin:
- Logging fil-qoxra Postgres.
- Importazzjoni u esportazzjoni ta' tabelli.
- ħolqien
pg_dump
tabelli jew databases.
Kontenitur tal-applikazzjoni Express.js, expressjs
, jista' jkollu l-kapaċitajiet li ġejjin:
- Tipprovdi dejta friska mir-reġistru tas-sistema.
- Idħol fil-qoxra biex tesegwixxi ċerti kmandi.
Interazzjoni mal-Kontenituri
Ladarba waqqafna komunikazzjoni bejn il-kontenituri bl-użu ta' Docker Compose, wasal iż-żmien li nikkomunikaw ma' dawk il-kontenituri. Fi ħdan is-sistema Docker Compose hemm kmand docker-compose
, għażla ta 'appoġġ -f
, li jippermettilek tittrasferixxi fajl għas-sistema docker-compose.yml
.
Billi tuża l-kapaċitajiet ta 'din l-għażla, tista' tillimita l-interazzjoni mas-sistema biss għal dawk il-kontenituri li huma msemmija fil-fajl docker-compose.yml
.
Ejja nagħtu ħarsa lejn kif jidhru l-interazzjonijiet mal-kontenituri meta tuża kmandi docker-compose
. Jekk nimmaġinaw li għandna bżonn nidħlu fil-qoxra psql
, allura l-kmandi korrispondenti jistgħu jidhru bħal dan:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
L-istess kmand li ma jintużax biex tesegwixxi docker-compose
U docker
, jista' jidher bħal dan:
docker exec -it edp_timescale_1 psql -Upostgres
Jekk jogħġbok innota li f'każijiet bħal dawn huwa dejjem preferibbli li tuża l-kmand docker
, u l-kmand docker-compose
, peress li dan jelimina l-ħtieġa li tiftakar l-ismijiet tal-kontenituri.
Iż-żewġ kmandi ta 'hawn fuq mhumiex daqshekk diffiċli. Imma jekk użajna "wrapper" fil-forma Makefile
, li tagħtina interface fil-forma ta 'kmandi sempliċi u stess issejjaħ kmandi twal simili, allura l-istess riżultati jistgħu jinkisbu bħal dan:
make db-shell
Huwa pjuttost ovvju li l-użu Makefile
jagħmel ix-xogħol mal-kontenituri ħafna aktar faċli!
Eżempju ta' ħidma
Ibbażat fuq id-dijagramma tal-proġett ta 'hawn fuq, aħna se noħolqu l-fajl li ġej 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
Biex timmaniġġja l-konfigurazzjoni ta 'Docker Compose u jinteraġixxu mal-kontenituri li tiddeskrivi, aħna se noħolqu l-fajl li ġej 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
Ħafna mill-kmandi deskritti hawn japplikaw għall-kontenituri kollha, iżda bl-użu tal-għażla c=
jippermettilek tillimita l-ambitu ta 'kmand għal kontenitur wieħed.
Wara Makefile
lest, tista' tużah bħal dan:
make help
— ħruġ ta' lista tal-kmandi kollha disponibbli għalmake
.
Għajnuna dwar il-kmandi disponibbli
make build
- assemblaġġ ta 'immaġni minnDockerfile
. Fl-eżempju tagħna użajna immaġini eżistentitimescale
иping
. Iżda l-immaġniapi
irridu niġbru lokalment. Dan huwa eżattament dak li se jsir wara li tesegwixxi dan il-kmand.
Bini ta' kontenitur Docker
make start
— it-tnedija tal-kontejners kollha. Biex tniedi kontenitur wieħed biss, tista 'tuża kmand similimake start c=timescale
.
Tmexxi l-kontenitur tal-iskala taż-żmien
Tmexxi kontenitur ping
make login-timescale
— idħol fis-sessjoni bash tal-konteniturtimescale
.
Running bash f'kontenitur ta' żmien
make db-shell
- daħla għalpsql
f'konteniturtimescale
biex tesegwixxi mistoqsijiet SQL kontra d-database.
Tmexxi psql f'kontenitur timescadb
make stop
— kontenituri li jwaqqfu.
Waqfien ta' kontenitur ta' żmien
make down
— il-waqfien u t-tneħħija tal-kontenituri. Biex tneħħi kontenitur speċifiku, tista 'tuża dan il-kmand li tispeċifika l-kontenitur mixtieq. Pereżempju -make down c=timescale
jewmake down c=api
.
Twaqqaf u tħassar il-kontenituri kollha
Riżultati ta '
Għalkemm Docker Compose jagħtina sett għani ta 'kmandi għall-ġestjoni tal-kontenituri, xi drabi dawn il-kmandi jistgħu jsiru twal u diffiċli biex tiftakarhom.
Metodu ta' użu Makefile
għinna nistabbilixxu interazzjoni malajr u faċli ma 'kontenituri minn fajl docker-compose.yml
. Jiġifieri, qed nitkellmu dwar dan li ġej:
- L-iżviluppatur jinteraġixxi biss mal-kontenituri tal-proġett deskritti fi
docker-compose.yml
, ix-xogħol ma jiġix imfixkel minn kontenituri oħra li jaħdmu. - Fil-każ li ċertu kmand jintesa, tista 'tesegwixxi l-kmand
make help
u ikseb għajnuna dwar il-kmandi disponibbli. - M'għandekx għalfejn tiftakar listi twal ta' argumenti biex twettaq azzjonijiet bħal li tikseb l-aħħar entrati fil-log jew tidħol f'sistema. Per eżempju, kmand bħal
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
jinbidel fimake db-shell
. - fajl
Makefile
Tista' tadatta għaliha b'mod flessibbli hekk kif il-proġett jikber. Pereżempju, huwa faċli li żżid kmand biex toħloq backup tad-database jew twettaq kwalunkwe azzjoni oħra. - Jekk tim kbir ta 'żviluppaturi juża l-istess
Makefile
, dan jissimplifika l-kollaborazzjoni u jnaqqas l-iżbalji.
PS Fil-tagħna
Għeżież qarrejja! Kif tawtomatizza Docker Compose?
Sors: www.habr.com