Docker Compose: töö lihtsustamine Makefile'i kasutamisega

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.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega

Tänapäeval on raske ette kujutada uue tarkvarasüsteemi arendamist ilma mikroteenuste kasutamiseta. See olukord viib meid Docker platvormini.

Docker

Platvorm Docker, 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 Docker Compose 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.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
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 (Phony targets).

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_dump tabelite 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äsud tee.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Saadaval olevate käskude abi

  • make build — pildi koostamine Dockerfile. Meie näites kasutasime olemasolevaid pilte timescale ja ping. Kuid pilt api mida soovime kohapeal kokku panna. Just seda tehakse pärast selle käsu täitmist.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Docker konteineri koostamine

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

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Timescale konteineri käivitamine

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
Ping konteineri käivitamine

  • make login-timescale — sisenemine konteineri bash-seanssi timescale.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
sisenemine Timescale konteinerisse

  • make db-shell — sisenemine psql konteineris timescale andmebaasiga SQL-päringute teostamiseks.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
psql käivitamine Timescaledb konteineris

  • make stop — konteinerite peatamine.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
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=timescale või make down c=api.

Docker Compose: töö lihtsustamine Makefile'i kasutamisega
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 help ja 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 -Upostgres muutub make db-shell.
  • Fail Makefile saab 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 turul on olemas pilt Docker, mis installitakse ühe klikiga. Saate kontrollida konteinerite toimimist VPS. Kõigile uutele klientidele antakse tasuta 3 päeva testimise jaoks.

Lugupeetud lugejad! Kuidas automatiseerite töö Docker Compose'iga?

Docker Compose: töö lihtsustamine Makefile'i kasutamisega

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster