Docker Compose: Makefiles көмегімен жұмысыңызды жеңілдету

Бірнеше жыл сайын бағдарламалық жасақтаманы әзірлеу индустриясы парадигмалық өзгерістерге ұшырайды. Осы құбылыстардың бірі микросервис концепциясына қызығушылықтың артуы деп тануға болады. Микросервистер ең жаңа технология болмаса да, оның танымалдылығы жақында ғана өсті.

Ірі монолитті қызметтер қазір тәуелсіз, автономды микросервистермен ауыстырылады. Микросервисті бір және өте нақты мақсатқа қызмет ететін қолданба ретінде қарастыруға болады. Мысалы, бұл реляциялық ДҚБЖ, Express қосымшасы, Solr қызметі болуы мүмкін.

Docker Compose: Makefiles көмегімен жұмысыңызды жеңілдету

Бұл күндері микросервистерді қолданбай жаңа бағдарламалық жүйені әзірлеуді елестету қиын. Және бұл жағдай, өз кезегінде, бізді Docker платформасына әкеледі.

Докер

Платформа Докер, микросервистерді әзірлеуде және орналастыруда дерлік салалық стандартқа айналды. Жобаның веб-сайтында Docker ұйымдарға кез келген қосымшаны еш қиындықсыз жасауға, сондай-ақ оларды гибридті бұлттардан шеткі жүйелерге дейін кез келген ортада таратуға және іске қосуға мүмкіндік беретін жалғыз тәуелсіз контейнерлеу платформасы екенін біле аласыз.

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 көмегімен жұмысыңызды жеңілдету
Timescaledb контейнерінде psql іске қосу

  • 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 көмегімен жұмысыңызды жеңілдету

Ақпарат көзі: www.habr.com

пікір қалдыру