Бир нече жыл сайын программалык камсыздоону иштеп чыгуу индустриясы парадигмалардын өзгөрүшүнө дуушар болот. Бул көрүнүштөрдүн бири микросервис концепциясына кызыгуунун өсүшү катары таанылышы мүмкүн. Микросервис эң жаңы технология болбосо да, анын популярдуулугу жакында эле кескин өстү.
Чоң монолиттик кызматтар азыр көз карандысыз, автономдуу микросервистерге алмаштырылууда. Микросервисти бир жана абдан белгилүү бир максатты аткарган тиркеме катары кароого болот. Мисалы, бул реляциялык DBMS, Express application, Solr кызматы болушу мүмкүн.
Ушул күндөрү микросервистерди колдонбостон жаңы программалык камсыздоо системасын иштеп чыгууну элестетүү кыйын. Жана бул жагдай, өз кезегинде, бизди Docker платформасына алып барат.
ютуб
платформа
ютуб жазуу
технология
Docker Compose менен иштөөдө YAML файлы колдонмо кызматтарын конфигурациялоо жана алардын бири-бири менен өз ара аракеттенүүсүн уюштуруу үчүн колдонулат. Ошондуктан Docker Compose көп контейнердик Docker тиркемелерин сыпаттоо жана иштетүү үчүн курал.
Хост тутумунда иштеген эки контейнер
GNU Make
программа make
, негизи булак кодунан программаларды жана китепканаларды курууну автоматташтыруу куралы болуп саналат. Жалпысынан мындай деп айта алабыз make
кандайдыр бир максатта кээ бир кириш материалдарын кандайдыр бир чыгуу формасына айландыруу үчүн ыктыярдуу буйруктарды аткарууну камтыган ар кандай процесске колдонулат. Биздин учурда, буйруктар docker-compose
абстракттуу максаттарга айланат (
Программаны айтып берүү make
биз андан эмнени каалайбыз, бизге файл керек Makefile
.
Биздин Makefile
үзгүлтүксүз буйруктарды камтыйт docker
и docker-compose
, алар көптөгөн маселелерди чечүү үчүн иштелип чыккан. Тактап айтканда, биз контейнерди чогултуу, аны ишке киргизүү, токтотуу, кайра иштетүү, контейнерге колдонуучунун логинди уюштуруу, контейнер журналдары менен иштөө жана башка ушул сыяктуу көйгөйлөрдү чечүү жөнүндө сөз болуп жатат.
Docker Compose үчүн типтүү колдонуу учурлары
Төмөнкү компоненттерден турган кадимки веб-тиркемени элестетелик:
- TimescaleDB базасы (Postgres).
- Express.js колдонмосу.
- Пинг (жөн эле контейнер, өзгөчө эч нерсе кылбайт).
Бул колдонмого 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 сурамдарын аткаруу үчүн.
Psqlди timescaledb контейнеринде иштетүү
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 кантип автоматташтырасыз?
Source: www.habr.com