Ҳар чанд сол, саноати таҳияи нармафзор ба тағирёбии парадигма дучор мешавад. Яке аз ин падидаҳоро метавон ҳамчун таваҷҷуҳи афзоянда ба консепсияи хидматрасонии хурд эътироф кард. Гарчанде ки микросервисҳо технологияи навтарин нестанд, танҳо ба наздикӣ маъруфияти он ба таври аслӣ баланд шуд.
Ҳоло хидматҳои калони монолитиро бо микросервисҳои мустақил ва автономӣ иваз мекунанд. Микросервисро метавон ҳамчун барномае баррасӣ кард, ки ба як ҳадафи ягона ва хеле мушаххас хидмат мекунад. Масалан, он метавонад як DBMS-и релятсионӣ, барномаи Express, хидмати Solr бошад.
Дар ин рӯзҳо, тасаввур кардан душвор аст, ки системаи нави нармафзорро бидуни истифодаи микросервисҳо тасаввур кунед. Ва ин вазъият, дар навбати худ, моро ба платформаи 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 бар зидди пойгоҳи додаҳо.
Иҷрои 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-ро автоматӣ мекунед?
Манбаъ: will.com