Docker Compose: Makefiles аркылуу жумушуңузду жөнөкөйлөтүү

Бир нече жыл сайын программалык камсыздоону иштеп чыгуу индустриясы парадигмалардын өзгөрүшүнө дуушар болот. Бул көрүнүштөрдүн бири микросервис концепциясына кызыгуунун өсүшү катары таанылышы мүмкүн. Микросервис эң жаңы технология болбосо да, анын популярдуулугу жакында эле кескин өстү.

Чоң монолиттик кызматтар азыр көз карандысыз, автономдуу микросервистерге алмаштырылууда. Микросервисти бир жана абдан белгилүү бир максатты аткарган тиркеме катары кароого болот. Мисалы, бул реляциялык DBMS, Express application, Solr кызматы болушу мүмкүн.

Docker Compose: Makefiles аркылуу жумушуңузду жөнөкөйлөтүү

Ушул күндөрү микросервистерди колдонбостон жаңы программалык камсыздоо системасын иштеп чыгууну элестетүү кыйын. Жана бул жагдай, өз кезегинде, бизди Docker платформасына алып барат.

ютуб

платформа ютуб, микросервистерди иштеп чыгууда жана жайылтууда дээрлик тармактык стандарт болуп калды. Долбоордун веб-сайтында Docker бул уюмдарга эч кандай кыйынчылыксыз каалаган тиркемени түзүүгө, ошондой эле аларды ар кандай чөйрөдө - гибриддик булуттардан четки системаларга чейин жайылтууга жана иштетүүгө мүмкүндүк берген жалгыз көз карандысыз контейнерлөө платформасы экенин биле аласыз.

ютуб жазуу

технология ютуб жазуу көп контейнердик тиркемелерди конфигурациялоо үчүн иштелип чыккан. Docker Compose долбоору долбоордун жаратуучусу канчалык көп Docker контейнерлерин камтышы мүмкүн.

Docker Compose менен иштөөдө YAML файлы колдонмо кызматтарын конфигурациялоо жана алардын бири-бири менен өз ара аракеттенүүсүн уюштуруу үчүн колдонулат. Ошондуктан Docker Compose көп контейнердик Docker тиркемелерин сыпаттоо жана иштетүү үчүн курал.

Docker Compose: Makefiles аркылуу жумушуңузду жөнөкөйлөтүү
Хост тутумунда иштеген эки контейнер

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.

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 аркылуу жумушуңузду жөнөкөйлөтүү

Source: www.habr.com

Комментарий кошуу