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 shell:
  • Սեղանների ներմուծում և արտահանում։
  • ստեղծում pg_dump աղյուսակներ կամ տվյալների բազաներ:

Express.js հավելվածի կոնտեյներ, expressjs, կարող է ունենալ հետևյալ հնարավորությունները.

  • Համակարգի մատյանից թարմ տվյալների տրամադրում:
  • Մուտք գործեք shell՝ որոշակի հրամաններ կատարելու համար:

Փոխազդեցություն բեռնարկղերի հետ

Երբ մենք կարգավորենք կապը կոնտեյների միջև 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-ի միջոցով
Running 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

Добавить комментарий