„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.

Kas kelerius metus programinės įrangos kūrimo pramonė patiria paradigmos pasikeitimą. Vienas iš šių reiškinių gali būti pripažintas didėjančiu susidomėjimu mikropaslaugų koncepcija. Nors mikropaslaugos nėra pati naujausia technologija, tik pastaruoju metu jos populiarumas tiesiogine prasme išaugo.

Didelės monolitinės paslaugos dabar pakeičiamos nepriklausomomis, autonomiškomis mikropaslaugomis. Mikropaslauga gali būti laikoma programa, kuri tarnauja vienam ir labai konkrečiam tikslui. Pavyzdžiui, tai gali būti reliacinė DBVS, „Express“ programa, „Solr“ paslauga.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.

Šiais laikais sunku įsivaizduoti naujos programinės įrangos kūrimą nenaudojant mikro paslaugų. Ir ši situacija savo ruožtu veda mus į Docker platformą.

dokininkas

Platforma dokininkas, kuriant ir diegiant mikropaslaugas, tapo beveik pramonės standartu. Projekto svetainėje galite sužinoti, kad „Docker“ yra vienintelė nepriklausoma konteinerizavimo platforma, leidžianti organizacijoms be vargo kurti bet kokias programas, taip pat platinti ir paleisti jas bet kurioje aplinkoje – nuo ​​hibridinių debesų iki krašto sistemų.

"Docker Compose"

Технология "Docker Compose" skirtas konfigūruoti kelių konteinerių programas. Docker Compose projekte gali būti tiek Docker konteinerių, kiek reikia projekto kūrėjui.

Dirbant su Docker Compose, YAML failas naudojamas konfigūruoti taikomųjų programų paslaugas ir organizuoti jų sąveiką tarpusavyje. Todėl „Docker Compose“ yra kelių konteinerių „Docker“ programų apibūdinimo ir vykdymo įrankis.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Du konteineriai, veikiantys pagrindinėje sistemoje

GNU gamintojas

Programa make, iš esmės yra įrankis, skirtas automatizuoti programų ir bibliotekų kūrimą iš šaltinio kodo. Apskritai galime pasakyti, kad make taikoma bet kokiam procesui, apimančiam savavališkų komandų vykdymą, kad kai kurios įvesties medžiagos būtų paverčiamos tam tikra išvesties forma, tam tikru tikslu. Mūsų atveju komandos docker-compose bus paversti abstrakčiais tikslais (Telefono taikiniai).

Papasakoti programai make apie tai, ko norime iš jo, mums reikia failo Makefile.

Mumyse Makefile bus įprastos komandos docker и docker-compose, kurios yra skirtos daugeliui problemų išspręsti. Būtent, mes kalbame apie konteinerio surinkimą, apie jo paleidimą, sustabdymą, paleidimą iš naujo, apie vartotojo prisijungimo prie konteinerio organizavimą, apie darbą su konteinerių žurnalais ir apie kitų panašių problemų sprendimą.

Įprasti „Docker Compose“ naudojimo atvejai

Įsivaizduokime įprastą žiniatinklio programą, kurią sudaro šie komponentai:

  • TimescaleDB duomenų bazė (Postgres).
  • Express.js programa.
  • Ping (tik konteineris, nieko ypatingo nedaro).

Šiai programai reikės 3 Docker konteinerių ir failo docker-compose, kuriame pateikiamos šių konteinerių tvarkymo instrukcijos. Kiekvienas konteineris turės skirtingus kontaktinius taškus. Pavyzdžiui, su konteineriu timescale bus galima dirbti maždaug taip pat, kaip jie dirba su duomenų bazėmis. Būtent ji leidžia atlikti šiuos veiksmus:

  • Prisijungimas prie Postgres apvalkalo.
  • Lentelių importas ir eksportas.
  • kūrimas pg_dump lenteles ar duomenų bazes.

Express.js programos konteineris, expressjs, gali turėti šias galimybes:

  • Naujų duomenų pateikimas iš sistemos žurnalo.
  • Prisijunkite prie apvalkalo, kad vykdytumėte tam tikras komandas.

Sąveika su konteineriais

Kai nustatysime ryšį tarp konteinerių naudodami „Docker Compose“, laikas susisiekti su tais konteineriais. „Docker Compose“ sistemoje yra komanda docker-compose, atraminis variantas -f, kuri leidžia perkelti failą į sistemą docker-compose.yml.

Naudodamiesi šios parinkties galimybėmis, galite apriboti sąveiką su sistema tik tais konteineriais, kurie yra paminėti faile docker-compose.yml.

Pažiūrėkime, kaip sąveika su konteineriais atrodo naudojant komandas docker-compose. Jei įsivaizduosime, kad turime prisijungti prie apvalkalo psql, tada atitinkamos komandos gali atrodyti taip:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

Ta pati komanda, kuri nenaudojama vykdyti docker-composeIr docker, gali atrodyti taip:

docker exec -it  edp_timescale_1 psql -Upostgres

Atkreipkite dėmesį, kad tokiais atvejais visada geriau naudoti komandą docker, ir komanda docker-compose, nes taip nebereikia atsiminti konteinerių pavadinimų.

Abi aukščiau pateiktos komandos nėra tokios sudėtingos. Bet jei formoje naudotume „įvyniojimą“. Makefile, kuri suteiktų mums sąsają paprastų komandų pavidalu ir pati vadintų panašias ilgas komandas, tada tuos pačius rezultatus būtų galima pasiekti taip:

make db-shell

Visiškai akivaizdu, kad naudojimas Makefile labai palengvina darbą su konteineriais!

Darbo pavyzdys

Remdamiesi aukščiau pateikta projekto schema, sukursime šį failą 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

Norėdami valdyti „Docker Compose“ konfigūraciją ir sąveikauti su joje aprašytais konteineriais, sukursime šį failą 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

Dauguma čia aprašytų komandų taikomos visiems konteineriams, tačiau naudojant parinktį c= leidžia apriboti komandos apimtį iki vieno konteinerio.

Po Makefile paruošta, galite naudoti taip:

  • make help — visų galimų komandų sąrašo išdavimas make.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Pagalba apie galimas komandas

  • make build - surinkti vaizdą iš Dockerfile. Mūsų pavyzdyje naudojome esamus vaizdus timescale и ping. Bet vaizdas api norime surinkti vietoje. Būtent tai bus daroma įvykdžius šią komandą.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
„Docker“ konteinerio kūrimas

  • make start — visų konteinerių paleidimas. Norėdami paleisti tik vieną konteinerį, galite naudoti tokią komandą kaip make start c=timescale.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Paleidžiamas laiko skalės sudėtinis rodinys

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Ping konteinerio paleidimas

  • make login-timescale - prisijunkite prie konteinerio bash sesijos timescale.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Paleidžiamas bash laiko skalės konteineryje

  • make db-shell - įėjimas į psql konteineryje timescale vykdyti SQL užklausas duomenų bazėje.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Psql paleidimas laiko skalės b konteineryje

  • make stop — konteinerių sustabdymas.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Sustabdomas laiko skalės konteineris

  • make down — konteinerių sustabdymas ir išėmimas. Norėdami pašalinti konkretų konteinerį, galite naudoti šią komandą, nurodydami norimą konteinerį. Pavyzdžiui - make down c=timescale arba make down c=api.

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.
Visų konteinerių stabdymas ir ištrynimas

rezultatai

Nors „Docker Compose“ suteikia daug komandų, skirtų konteineriams tvarkyti, kartais šios komandos gali tapti ilgos ir sunkiai įsimenamos.

Naudojimo būdas Makefile padėjo mums greitai ir lengvai sąveikauti su konteineriais iš failo docker-compose.yml. Būtent, mes kalbame apie šiuos dalykus:

  • Kūrėjas sąveikauja tik su projekto konteineriais, aprašytais docker-compose.yml, darbui netrukdo kiti veikiantys konteineriai.
  • Jei tam tikra komanda pamirštama, galite ją vykdyti make help ir gauti pagalbos dėl galimų komandų.
  • Norint atlikti tokius veiksmus, kaip gauti naujausius žurnalo įrašus arba prisijungti prie sistemos, nereikia prisiminti ilgų argumentų sąrašų. Pavyzdžiui, tokia komanda kaip docker-compose -f docker-compose.yml exec timescale psql -Upostgres virsta make db-shell.
  • byla Makefile Galite lanksčiai prie jo prisitaikyti projektui augant. Pavyzdžiui, nesunku pridėti komandą duomenų bazės atsarginei kopijai sukurti arba bet kokiam kitam veiksmui atlikti.
  • Jei didelė kūrėjų komanda naudoja tą patį Makefile, tai supaprastina bendradarbiavimą ir sumažina klaidų skaičių.

PS Mumyse turgavietėje yra vaizdas dokininkas, kurį galima įdiegti vienu paspaudimu. Konteinerių veikimą galite patikrinti adresu VPS. Visiems naujiems klientams suteikiamos 3 dienos nemokamai.

Mieli skaitytojai! Kaip automatizuojate „Docker Compose“?

„Docker Compose“: supaprastinkite darbą naudodami „Makefiles“.

Šaltinis: www.habr.com

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