Docker Compose: содда кардани кори шумо бо истифода аз Makefiles

Ҳар чанд сол, саноати таҳияи нармафзор ба тағирёбии парадигма дучор мешавад. Яке аз ин падидаҳоро метавон ҳамчун таваҷҷуҳи афзоянда ба консепсияи хидматрасонии хурд эътироф кард. Гарчанде ки микросервисҳо технологияи навтарин нестанд, танҳо ба наздикӣ маъруфияти он ба таври аслӣ баланд шуд.

Ҳоло хидматҳои калони монолитиро бо микросервисҳои мустақил ва автономӣ иваз мекунанд. Микросервисро метавон ҳамчун барномае баррасӣ кард, ки ба як ҳадафи ягона ва хеле мушаххас хидмат мекунад. Масалан, он метавонад як DBMS-и релятсионӣ, барномаи Express, хидмати Solr бошад.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles

Дар ин рӯзҳо, тасаввур кардан душвор аст, ки системаи нави нармафзорро бидуни истифодаи микросервисҳо тасаввур кунед. Ва ин вазъият, дар навбати худ, моро ба платформаи Docker мебарад.

Доктор

Платформа Доктор, дар таҳия ва ҷобаҷогузории микросервисҳо тақрибан ба стандарти саноатӣ табдил ёфтааст. Дар вебсайти лоиҳа шумо метавонед фаҳмед, ки Docker ягона платформаи мустақили контейнерсозӣ мебошад, ки ба созмонҳо имкон медиҳад, ки ҳар гуна замимаро бемаънӣ эҷод кунанд, инчунин онҳоро дар ҳама муҳит паҳн ва идора кунанд - аз абрҳои гибридӣ то системаҳои канорӣ.

Ҷӯркунӣ

Технология Ҷӯркунӣ барои конфигуратсияи барномаҳои бисёрконтейнер пешбинӣ шудааст. Лоиҳаи Docker Compose метавонад миқдори зиёди контейнерҳои Docker дошта бошад, ки ба созандаи лоиҳа ниёз дорад.

Ҳангоми кор бо Docker Compose файли YAML барои танзими хидматҳои барномавӣ ва ташкили ҳамкории онҳо бо ҳамдигар истифода мешавад. Аз ин рӯ, Docker Compose абзорест барои тавсиф ва иҷро кардани замимаҳои бисёрконтейнерии Docker.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Ду контейнер, ки дар системаи ҳост кор мекунанд

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.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Кӯмак дар бораи фармонҳои дастрас

  • make build - ҷамъ кардани тасвир аз Dockerfile. Дар мисоли мо мо тасвирҳои мавҷударо истифода мебарем timescale и ping. Аммо тасвир api дар махалхо чамъ кардан мехохем. Ин маҳз ҳамон чизест, ки пас аз иҷрои ин фармон анҷом дода мешавад.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Сохтани контейнери Docker

  • make start — ба кор андохтани хамаи контейнерхо. Барои оғози танҳо як контейнер, шумо метавонед фармони монандиро истифода баред make start c=timescale.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Иҷро кардани контейнери ҷадвали вақт

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Иҷро кардани контейнери пинг

  • make login-timescale — ворид шудан ба сессияи bash аз контейнер timescale.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Иҷрои bash дар контейнери ҷадвали вақт

  • make db-shell - даромадгоҳ ба psql дар як контейнер timescale барои иҷро кардани дархостҳои SQL бар зидди пойгоҳи додаҳо.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Иҷрои psql дар контейнери timescaledb

  • make stop — боздоштани контейнерҳо.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Қатъи контейнери ҷадвали вақт

  • make down — боздоштан ва баровардани контейнер. Барои хориҷ кардани як контейнери мушаххас, шумо метавонед ин фармонро бо муайян кардани контейнери дилхоҳ истифода баред. Барои намуна - make down c=timescale ё make down c=api.

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles
Қатъ кардан ва нест кардани ҳама контейнерҳо

Натиҷаҳо

Гарчанде ки 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 Дар мо бозор тасвир вуҷуд дорад Доктор, ки онро бо як клик насб кардан мумкин аст. Шумо метавонед кори контейнерҳоро дар VPS. Ба ҳама муштариёни нав 3 рӯзи санҷиш ройгон дода мешавад.

Хонандагони азиз! Чӣ тавр шумо Docker Compose-ро автоматӣ мекунед?

Docker Compose: содда кардани кори шумо бо истифода аз Makefiles

Манбаъ: will.com

Илова Эзоҳ