Бірнеше жыл сайын бағдарламалық жасақтаманы әзірлеу индустриясы парадигмалық өзгерістерге ұшырайды. Осы құбылыстардың бірі микросервис концепциясына қызығушылықтың артуы деп тануға болады. Микросервистер ең жаңа технология болмаса да, оның танымалдылығы жақында ғана өсті.
Ірі монолитті қызметтер қазір тәуелсіз, автономды микросервистермен ауыстырылады. Микросервисті бір және өте нақты мақсатқа қызмет ететін қолданба ретінде қарастыруға болады. Мысалы, бұл реляциялық ДҚБЖ, Express қосымшасы, Solr қызметі болуы мүмкін.
Бұл күндері микросервистерді қолданбай жаңа бағдарламалық жүйені әзірлеуді елестету қиын. Және бұл жағдай, өз кезегінде, бізді Docker платформасына әкеледі.
Докер
Платформа
Docker құрастырыңыз
Технология
Docker Compose бағдарламасымен жұмыс істегенде YAML файлы қолданбалы қызметтерді конфигурациялау және олардың бір-бірімен әрекеттесуін ұйымдастыру үшін пайдаланылады. Сондықтан Docker Compose көп контейнерлік Docker қолданбаларын сипаттауға және іске қосуға арналған құрал болып табылады.
Хост жүйесінде жұмыс істейтін екі контейнер
GNU жасау
бағдарлама make
, шын мәнінде бастапқы кодтан бағдарламалар мен кітапханаларды құруды автоматтандыру құралы болып табылады. Жалпы, біз мұны айта аламыз make
кейбір кіріс материалдарын қандай да бір шығыс пішініне, қандай да бір мақсатқа түрлендіру үшін ерікті командаларды орындауды қамтитын кез келген процеске қолданылады. Біздің жағдайда командалар docker-compose
дерексіз мақсаттарға айналады (
Бағдарламаны айту үшін make
одан не қалайтынымыз туралы бізге файл қажет Makefile
.
Біздің Makefile
тұрақты командалардан тұрады docker
и docker-compose
, олар көптеген мәселелерді шешуге арналған. Атап айтқанда, біз контейнерді құрастыру, оны іске қосу, тоқтату, қайта іске қосу, пайдаланушының контейнерге кіруін ұйымдастыру, контейнер журналдарымен жұмыс істеу және басқа ұқсас мәселелерді шешу туралы айтып отырмыз.
Docker Compose үшін әдеттегі пайдалану жағдайлары
Келесі компоненттері бар кәдімгі веб-қосымшаны елестетейік:
- TimescaleDB дерекқоры (Postgres).
- Express.js қолданбасы.
- Ping (тек контейнер, ерекше ештеңе жасамайды).
Бұл қолданбаға 3 Docker контейнері және файл қажет болады docker-compose
, онда осы контейнерлерді басқару нұсқаулары бар. Әрбір контейнерде әртүрлі жанасу нүктелері болады. Мысалы, контейнермен timescale
деректер базасымен жұмыс істейтіндей шамамен бірдей жұмыс істеуге болады. Атап айтқанда, ол келесі әрекеттерді орындауға мүмкіндік береді:
- Postgres қабығына кіру.
- Кестелерді импорттау және экспорттау.
- жаратылыс
pg_dump
кестелер немесе деректер қоры.
Express.js қолданбасы контейнері, expressjs
, келесі мүмкіндіктерге ие болуы мүмкін:
- Жүйе журналынан жаңа деректерді беру.
- Белгілі бір пәрмендерді орындау үшін қабықшаға кіріңіз.
Контейнерлермен әрекеттесу
Docker Compose көмегімен контейнерлер арасындағы байланысты орнатқаннан кейін, сол контейнерлермен байланысу уақыты келді. Docker Compose жүйесінде команда бар docker-compose
, қолдау опциясы -f
, бұл файлды жүйеге тасымалдауға мүмкіндік береді docker-compose.yml
.
Бұл опцияның мүмкіндіктерін пайдалана отырып, жүйемен өзара әрекеттесуді файлда көрсетілген контейнерлермен ғана шектей аласыз docker-compose.yml
.
Командаларды пайдалану кезінде контейнерлермен өзара әрекеттесу қандай болатынын қарастырайық docker-compose
. Егер біз қабықшаға кіруіміз керек деп елестетсек psql
, онда сәйкес командалар келесідей болуы мүмкін:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Орындау үшін пайдаланылмайтын бірдей пәрмен docker-compose
мен docker
, келесідей көрінуі мүмкін:
docker exec -it edp_timescale_1 psql -Upostgres
Мұндай жағдайларда пәрменді пайдалану әрқашан қолайлы екенін ескеріңіз docker
, және пәрмен docker-compose
, өйткені бұл контейнер атауларын есте сақтау қажеттілігін жояды.
Жоғарыда аталған командалардың екеуі де соншалықты қиын емес. Бірақ егер біз пішінде «ораманы» қолдансақ Makefile
, ол бізге қарапайым пәрмендер түріндегі интерфейсті береді және өзі ұқсас ұзын командаларды шақырады, сонда бірдей нәтижелерге келесідей қол жеткізуге болады:
make db-shell
пайдаланғаны анық Makefile
контейнерлермен жұмыс істеуді әлдеқайда жеңілдетеді!
Жұмыс үлгісі
Жоғарыдағы жоба диаграммасына сүйене отырып, біз келесі файлды жасаймыз 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 конфигурациясын басқару және ол сипаттайтын контейнерлермен әрекеттесу үшін келесі файлды жасаймыз 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
Мұнда сипатталған пәрмендердің көпшілігі барлық контейнерлерге қолданылады, бірақ опцияны пайдаланады c=
пәрмен ауқымын бір контейнерге шектеуге мүмкіндік береді.
Кейін Makefile
дайын, сіз оны келесідей пайдалана аласыз:
make help
— қол жетімді барлық командалардың тізімін шығаруmake
.
Қол жетімді пәрмендер бойынша анықтама
make build
- суретті құрастыруDockerfile
. Біздің мысалда біз бар суреттерді қолдандықtimescale
иping
. Бірақ суретapi
біз жергілікті жерден жинағымыз келеді. Бұл пәрменді орындағаннан кейін дәл осылай жасалады.
Docker контейнерін құру
make start
— барлық контейнерлерді іске қосу. Бір ғана контейнерді іске қосу үшін сияқты пәрменді пайдалануға боладыmake start c=timescale
.
Уақыт шкаласы контейнерін іске қосу
Пинг контейнерін іске қосу
make login-timescale
— контейнердің bash сеансына кіруtimescale
.
Уақыт шкаласы контейнерінде bash іске қосылады
make db-shell
- кіруpsql
контейнердеtimescale
дерекқорға қарсы SQL сұрауларын орындау.
Timescaledb контейнерінде psql іске қосу
make stop
- контейнерлерді тоқтату.
Уақыт шкаласы контейнерін тоқтату
make down
— ыдыстарды тоқтату және алу. Белгілі бір контейнерді жою үшін қажетті контейнерді көрсете отырып, осы пәрменді пайдалануға болады. Мысалы -make down c=timescale
немесеmake down c=api
.
Барлық контейнерлерді тоқтату және жою
Нәтижелері
Docker Compose бізге контейнерлерді басқаруға арналған пәрмендердің бай жиынтығын бергенімен, кейде бұл пәрмендер ұзақ және есте сақтау қиын болуы мүмкін.
Қолдану әдісі Makefile
файлдағы контейнерлермен жылдам және оңай әрекеттесу орнатуға көмектесті docker-compose.yml
. Атап айтқанда, біз мыналар туралы айтып отырмыз:
- Әзірлеуші тек бөлімде сипатталған жоба контейнерлерімен әрекеттеседі
docker-compose.yml
, жұмысқа басқа жұмыс істейтін контейнерлер кедергі жасамайды. - Белгілі бір пәрмен ұмытылған жағдайда, пәрменді орындауға болады
make help
және қол жетімді пәрмендер бойынша көмек алыңыз. - Соңғы журнал жазбаларын алу немесе жүйеге кіру сияқты әрекеттерді орындау үшін дәлелдердің ұзын тізімдерін есте сақтаудың қажеті жоқ. Мысалы, пәрмен сияқты
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
айналадыmake db-shell
. - файл
Makefile
Жоба өскен сайын оған икемді түрде бейімделуге болады. Мысалы, дерекқордың сақтық көшірмесін жасау немесе кез келген басқа әрекетті орындау пәрменін қосу оңай. - Егер әзірлеушілердің үлкен тобы бірдей қолданса
Makefile
, бұл ынтымақтастықты жеңілдетеді және қателерді азайтады.
PS Біздің
Құрметті оқырмандар! Docker Compose қалай автоматтандырылады?
Ақпарат көзі: www.habr.com