Iga mitu aastat toimub tarkvaraarenduse valdkonnas paradigmade vahetus. Üheks selliseks nähtuseks on mikroteenuste kontseptsiooni kasvav huvi. Kuigi mikroteenused ei ole uus tehnoloogia, on nende populaarsus viimastel aastatel tõusnud lakke.
Suurte monoliitsete teenuste asemel asendatakse need nüüd sõltumatute autonoomsete mikroteenustega. Mikroteenust saab vaadata kui rakendust, mis teenib ühte ainsat ja väga spetsiifilist eesmärki. Näiteks võib see olla relatsiooniline andmebaas, Express-rakendus või Solr-teenus.
Tänapäeval on raske ette kujutada uue tarkvarasüsteemi arendamist ilma mikroteenuste kasutamiseta. See olukord viib meid Docker platvormini.
Docker
Platvorm , mikroteenuste arendamise ja juurutamise osas on saanud praktiliselt tööstusstandardi. Projekti veebisaidilt saab teada, et Docker on ainus sõltumatu konteineriseerimise platvorm, mis võimaldab organisatsioonidel vaevata luua igasuguseid rakendusi ning neid levitada ja käivitada igas keskkonnas — alates hübriidpilvedest kuni servasüsteemideni.
Docker Compose
Tehnoloogia on ette nähtud mitmekonteinerlike rakenduste konfigureerimiseks. Docker Compose'i projekti võib kuuluda nii palju Docker konteinerite, kui projekti looja soovib.
Docker Compose'i kasutamisel rakenduse teenuste seadistamiseks ja nende omavaheliseks koostööks kasutatakse YAML-faili. Nii et Docker Compose on tööriist mitmekonteinerlike Docker rakenduste kirjeldamiseks ja käivitamiseks.

Kaks konteinerit, mis töötavad host-süsteemis
GNU Make
Programm tee, on sisuliselt tööriist, mis automatiseerib programmide ja teekide koostamise lähtekoodist. Üldiselt võib öelda, et tee rakendatakse igasuguste protsesside suhtes, mis hõlmavad suvaliste käskude täitmist, et muuta mingid toormaterjalid teatud lõpptulemuseni, teatud eesmärgini. Meie puhul käsud version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge muudetakse abstraktseteks eesmärkideks ().
Et teada anda programmile tee mida me temalt soovime, vajame me faili Makefile.
Meie Makefile sisaldavad tavalisi käske docker ja version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge, mis on mõeldud mitmete ülesannete lahendamiseks. Nimelt räägime konteineri koostamisest, selle käivitamisest, peatamisest, taaskäivitamisest, kasutaja sisselogimise korraldamisest konteinerisse, konteineri logide haldamisest ja muude sarnaste ülesannete lahendamisest.
Tüüpilised kasutusvariandid Docker Compose'i jaoks
Kujutame ette tavalist veebi rakendust, milles on järgmised komponendid:
- Andmebaas TimescaleDB (Postgres).
- Express.js rakendus.
- Ping (lihtsalt konteiner, mis ei tee midagi erilist).
Selle rakenduse jaoks on vaja 3 Docker konteinerit ja faili version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge, mis sisaldab juhiseid nende konteinerite haldamiseks. Igal konteineril on erinevad suhtluspunktid. Näiteks konteineriga timescale saab suhelda ligikaudu nagu andmebaasidega. Nimelt võimaldab see teatud toimingute sooritamist:
- Sisenemine Postgresi käsureale.
- Tabelite impordi ja ekspordi teostamine.
- Meetodi loomine
pg_dumptabelite või andmebaaside jaoks.
Express.js rakenduse konteiner, expressjs, võib omada järgmisi võimalusi:
- Uute andmete väljastamine süsteemi logifailist.
- Sisenemine käsureale teatud käskude täitmiseks.
Konteineritega suhtlemine
Pärast konteinerite vaheliste ühenduste seadistamist Docker Compose'i abil on aeg hakata nendega suhtlema. Docker Compose'i süsteemis on käsk version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge, mis toetab valikut -f, mis võimaldab süsteemile edastada faili docker-compose.yml.
Kasutades selle valiku võimalusi, saab piirata suhtlemist süsteemiga ainult nende konteineritega, mis on mainitud failis docker-compose.yml.
Vaadakem, kuidas näevad välja suhted konteineritega, kasutades käsklusi version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge. Kui kujutame, et peame sisenema käsureale psql, siis vastavad käsud võivad välja näha nii:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres Sama käsk, milleks kasutatakse mitte version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge, vaid docker, võib välja näha selliselt:
docker exec -it edp_timescale_1 psql -Upostgres Pange tähele, et sellistes olukordades on alati eelistatud kasutada mitte käsku docker, vaid käsku version: '1' services: simplesample-sonar: image: sonarqube:lts ports: - 9001:9000 - 9092:9092 network_mode: bridge, kuna see vabastab vajadusest meeles pidada konteinerite nimesid.
Mõlemad eespool toodud käsklused pole sugugi keerulised. Kuid kui me kasutaksime "ümbrist". Makefile, mis annaks meile liidese lihtsate käskude näol, mis ise kutsuks esile sarnaseid pikki käske, siis samu tulemusi võiks saavutada nii:
make db-shell On täiesti ilmne, et Makefile oluline tööde lihtsustamine konteinerite haldamisel!
Töönäide
Loome järgmise faili, tuginedes eelnevalt vaadatud projekti skeemile 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'i konfiguratsiooni haldamiseks ja konteineritega suhtlemiseks loome järgmise faili 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 Enamik siin kirjeldatud käske rakendatakse kõigile konteineritele, kuid valiku kasutamine c= lubab käsu ulatust piirata ühe konteineriga.
Pärast seda, kui Makefile valmis, selle kasutamiseks tuleb teha nii:
make help— kuvab kõik saadaval olevad käsudtee.

Saadaval olevate käskude abi
make build— pildi koostamineDockerfile. Meie näites kasutasime olemasolevaid piltetimescalejaping. Kuid piltapimida soovime kohapeal kokku panna. Just seda tehakse pärast selle käsu täitmist.

Docker konteineri koostamine
make start— kõigi konteinerite käivitamine. Ühe konteineri käivitamiseks saab kasutada käsku, mis on järgmist laadimake start c=timescale.

Timescale konteineri käivitamine

Ping konteineri käivitamine
make login-timescale— sisenemine konteineri bash-seanssitimescale.

sisenemine Timescale konteinerisse
make db-shell— siseneminepsqlkonteineristimescaleandmebaasiga SQL-päringute teostamiseks.

psql käivitamine Timescaledb konteineris
make stop— konteinerite peatamine.
![]()
Timescale konteineri peatamine
make down— konteinerite peatamine ja eemaldamine. Konkreetse konteineri eemaldamiseks saab kasutada seda käsku koos vajaliku konteineri määratlemisega. Näiteks —make down c=timescalevõimake down c=api.

Konteinerite peatamine ja eemaldamine
Summary
Hoolimata sellest, et Docker Compose süsteem pakub meile laia valikut käske konteinerite haldamiseks, võivad need käsud mõnikord muutuda pikkadeks, mistõttu on keeruline neid meeles pidada.
Kasutusmeetod Makefile aitas meil luua kiire ja lihtsa suhtlemise konteineritega, mis on kirjeldatud failis docker-compose.yml. Nimelt on jutt järgnevast:
- Arendaja suhtleb ainult projekti konteineritega, mis on kirjeldatud
docker-compose.yml, teised käivitatud konteinerid ei sega tööd. - Kui mõni käsk on unustatud, saab käivitada käsu
make helpja saada abi saadaval olevate käskude kohta. - Ei ole vaja meeles pidada pikka argumentide nimekirja selliste toimingute tegemiseks nagu värskete logikirjete saamine või süsteemi sisenemine. Näiteks, käsk, mis on järgmist laadi
docker-compose -f docker-compose.yml exec timescale psql -Upostgresmuutubmake db-shell. - Fail
Makefilesaab projekti kasvades paindlikult selle järgi kohandada. Näiteks on lihtne lisada käsk andmebaasi varukoopia tegemiseks või muu tegevuse teostamiseks. - Kui suur arendajate meeskond kasutab sama
Makefile, siis korrastab see koostööd ja vähendab vigu.
P.S. Meie on olemas pilt , mis installitakse ühe klikiga. Saate kontrollida konteinerite toimimist . Kõigile uutele klientidele antakse tasuta 3 päeva testimise jaoks.
Lugupeetud lugejad! Kuidas automatiseerite töö Docker Compose'iga?
Allikas: habr.com
