Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles

Ik pēc dažiem gadiem programmatūras izstrādes nozarē notiek paradigmas maiņa. Par vienu no šīm parādībām var atpazīt pieaugošo interesi par mikropakalpojumu koncepciju. Lai gan mikropakalpojumi nav jaunākā tehnoloģija, tikai nesen to popularitāte burtiski pieauga debesīs.

Lieli monolīti pakalpojumi tagad tiek aizstāti ar neatkarīgiem, autonomiem mikropakalpojumiem. Mikropakalpojumu var uzskatīt par lietojumprogrammu, kas kalpo vienam un ļoti specifiskam mērķim. Piemēram, tā varētu būt relāciju DBVS, Express lietojumprogramma, Solr pakalpojums.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles

Mūsdienās ir grūti iedomāties jaunas programmatūras sistēmas izstrādi, neizmantojot mikropakalpojumus. Un šī situācija, savukārt, noved mūs pie Docker platformas.

dokers

Platforma dokers, izstrādājot un ieviešot mikropakalpojumus, ir kļuvis gandrīz par nozares standartu. Projekta mājaslapā var uzzināt, ka Docker ir vienīgā neatkarīgā konteinerizācijas platforma, kas ļauj organizācijām bez piepūles izveidot jebkuru aplikāciju, kā arī izplatīt un palaist tās jebkurā vidē – no hibrīdmākoņiem līdz malu sistēmām.

Docker sastopas

Технология Docker sastopas paredzēts vairāku konteineru lietojumprogrammu konfigurēšanai. Docker Compose projektā var būt tik daudz Docker konteineru, cik nepieciešams projekta izveidotājam.

Strādājot ar Docker Compose, YAML fails tiek izmantots, lai konfigurētu lietojumprogrammu pakalpojumus un organizētu to mijiedarbību savā starpā. Tāpēc Docker Compose ir rīks vairāku konteineru Docker lietojumprogrammu aprakstīšanai un palaišanai.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Divi konteineri, kas darbojas resursdatora sistēmā

GNU Marka

Programma make, būtībā ir rīks programmu un bibliotēku veidošanas automatizēšanai no pirmkoda. Kopumā mēs tā varam teikt make attiecas uz jebkuru procesu, kas ietver patvaļīgu komandu izpildi, lai pārveidotu dažus ievades materiālus uz kādu izvades formu, uz kādu mērķi. Mūsu gadījumā komandas docker-compose tiks pārveidoti par abstraktiem mērķiem (Tālruņa mērķi).

Lai pastāstītu programmai make par to, ko mēs no tā vēlamies, mums ir nepieciešams fails Makefile.

Mūsos Makefile saturēs regulāras komandas docker и docker-compose, kas paredzēti daudzu problēmu risināšanai. Proti, runa ir par konteinera komplektēšanu, par tā iedarbināšanu, apturēšanu, restartēšanu, par lietotāja pieteikšanās organizēšanu konteinerā, par darbu ar konteineru žurnāliem un par citu līdzīgu problēmu risināšanu.

Tipiski Docker Compose lietošanas gadījumi

Iedomāsimies parastu tīmekļa lietojumprogrammu, kurai ir šādi komponenti:

  • TimescaleDB datu bāze (Postgres).
  • Lietojumprogramma Express.js.
  • Ping (tikai konteiners, neko īpašu nedara).

Šai lietojumprogrammai būs nepieciešami 3 Docker konteineri un fails docker-compose, kurā ir norādījumi par šo konteineru pārvaldību. Katram konteineram būs dažādi saskares punkti. Piemēram, ar konteineru timescale būs iespējams strādāt aptuveni tāpat kā viņi strādā ar datu bāzēm. Proti, tas ļauj veikt šādas darbības:

  • Pieteikšanās Postgres apvalkā.
  • Galdu imports un eksports.
  • radīšana pg_dump tabulas vai datu bāzes.

Express.js lietojumprogrammu konteiners, expressjs, var būt šādas iespējas:

  • Jaunu datu nodrošināšana no sistēmas žurnāla.
  • Piesakieties čaulā, lai izpildītu noteiktas komandas.

Mijiedarbība ar konteineriem

Kad esam iestatījuši saziņu starp konteineriem, izmantojot Docker Compose, ir pienācis laiks sazināties ar šiem konteineriem. Docker Compose sistēmā ir komanda docker-compose, atbalsta iespēja -f, kas ļauj pārsūtīt failu uz sistēmu docker-compose.yml.

Izmantojot šīs opcijas iespējas, jūs varat ierobežot mijiedarbību ar sistēmu tikai tiem konteineriem, kas ir minēti failā docker-compose.yml.

Apskatīsim, kā mijiedarbība ar konteineriem izskatās, izmantojot komandas docker-compose. Ja iedomājamies, ka mums jāpiesakās čaulā psql, tad atbilstošās komandas varētu izskatīties šādi:

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

Tā pati komanda, kas netiek izmantota izpildei docker-composeUn docker, varētu izskatīties šādi:

docker exec -it  edp_timescale_1 psql -Upostgres

Lūdzu, ņemiet vērā, ka šādos gadījumos vienmēr ir vēlams izmantot komandu dockerun komandu docker-compose, jo tas novērš nepieciešamību atcerēties konteineru nosaukumus.

Abas iepriekš minētās komandas nav tik sarežģītas. Bet, ja formā izmantotu “iesaiņojumu”. Makefile, kas dotu mums saskarni vienkāršu komandu veidā un pats izsauktu līdzīgas garas komandas, tad tos pašus rezultātus varētu sasniegt šādi:

make db-shell

Ir pilnīgi skaidrs, ka izmantošana Makefile ievērojami atvieglo darbu ar konteineriem!

Darba piemērs

Pamatojoties uz iepriekš minēto projekta diagrammu, mēs izveidosim šādu failu 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

Lai pārvaldītu Docker Compose konfigurāciju un mijiedarbotos ar tajā aprakstītajiem konteineriem, mēs izveidosim šādu failu 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

Lielākā daļa šeit aprakstīto komandu attiecas uz visiem konteineriem, bet izmantojot opciju c= ļauj ierobežot komandas darbības jomu līdz vienam konteineram.

Pēc Makefile gatavs, varat to izmantot šādi:

  • make help — visu pieejamo komandu saraksta izdošana make.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Palīdzība par pieejamajām komandām

  • make build - attēla salikšana no Dockerfile. Mūsu piemērā mēs izmantojām esošos attēlus timescale и ping. Bet attēls api mēs vēlamies savākt uz vietas. Tieši tas tiks darīts pēc šīs komandas izpildes.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Docker konteinera izveidošana

  • make start — visu konteineru palaišana. Lai palaistu tikai vienu konteineru, varat izmantot komandu, piemēram make start c=timescale.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Tiek palaists laika skalas konteiners

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Palaižot ping konteineru

  • make login-timescale — piesakieties konteinera bash sesijā timescale.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Tiek palaists bash laika skalas konteinerā

  • make db-shell - ieeja uz psql konteinerā timescale lai izpildītu SQL vaicājumus datu bāzē.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Palaiž psql timescaledb konteinerā

  • make stop — konteineru apturēšana.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Laika skalas konteinera apturēšana

  • make down — konteineru apturēšana un izņemšana. Lai noņemtu noteiktu konteineru, varat izmantot šo komandu, norādot vajadzīgo konteineru. Piemēram - make down c=timescale vai make down c=api.

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles
Visu konteineru apturēšana un dzēšana

Rezultāti

Lai gan Docker Compose sniedz mums bagātīgu komandu kopu konteineru pārvaldībai, dažreiz šīs komandas var kļūt garas un grūti atcerēties.

Lietošanas metode Makefile palīdzēja mums izveidot ātru un vienkāršu mijiedarbību ar konteineriem no faila docker-compose.yml. Proti, mēs runājam par sekojošo:

  • Izstrādātājs mijiedarbojas tikai ar projekta konteineriem, kas aprakstīti docker-compose.yml, darbu netraucē citi darbojošie konteineri.
  • Gadījumā, ja noteikta komanda tiek aizmirsta, varat to izpildīt make help un saņemiet palīdzību par pieejamajām komandām.
  • Jums nav jāatceras gari argumentu saraksti, lai veiktu darbības, piemēram, iegūtu jaunākos žurnāla ierakstus vai pieteiktos sistēmā. Piemēram, komanda, piemēram, docker-compose -f docker-compose.yml exec timescale psql -Upostgres pārvēršas make db-shell.
  • fails Makefile Projektam augot, varat tam elastīgi pielāgoties. Piemēram, ir viegli pievienot komandu, lai izveidotu datu bāzes dublējumu vai veiktu jebkuru citu darbību.
  • Ja liela izstrādātāju komanda izmanto to pašu Makefile, tas racionalizē sadarbību un samazina kļūdu skaitu.

PS Mūsos tirgus laukums ir attēls dokers, kuru var instalēt ar vienu klikšķi. Konteineru darbību varat pārbaudīt plkst VPS. Visiem jaunajiem klientiem tiek dota 3 dienu pārbaude bez maksas.

Cienījamie lasītāji! Kā jūs automatizējat Docker Compose?

Docker Compose: vienkāršojiet savu darbu, izmantojot Makefiles

Avots: www.habr.com

Pievieno komentāru