Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla

Muutaman vuoden välein ohjelmistokehitysteollisuus käy läpi paradigman muutoksen. Yksi näistä ilmiöistä voidaan tunnistaa kasvavana kiinnostuksena mikropalvelujen käsitettä kohtaan. Vaikka mikropalvelut eivät ole uusin tekniikka, niiden suosio on noussut kirjaimellisesti pilviin vasta viime aikoina.

Suuret monoliittiset palvelut korvataan nyt itsenäisillä, itsenäisillä mikropalveluilla. Mikropalvelua voidaan pitää sovelluksena, joka palvelee yhtä ja hyvin erityistä tarkoitusta. Se voi olla esimerkiksi relaatiotietokantajärjestelmä, Express-sovellus tai Solr-palvelu.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla

Nykyään on vaikea kuvitella uuden ohjelmistojärjestelmän kehittämistä ilman mikropalveluita. Ja tämä tilanne puolestaan ​​johtaa meidät Docker-alustalle.

Satamatyöläinen

Foorumi Satamatyöläinen, mikropalvelujen kehittämisessä ja käyttöönotossa, on tullut melkein alan standardiksi. Projektin verkkosivustolta voit selvittää, että Docker on ainoa itsenäinen konttialusta, jonka avulla organisaatiot voivat vaivattomasti luoda mitä tahansa sovelluksia sekä jakaa ja käyttää niitä missä tahansa ympäristössä - hybridipilvistä reunajärjestelmiin.

Docker Compose

Технология Docker Compose suunniteltu monisäiliösovellusten määrittämiseen. Docker Compose -projekti voi sisältää niin monta Docker-konttia kuin projektin luoja tarvitsee.

Kun työskentelet Docker Composen kanssa, YAML-tiedostoa käytetään sovelluspalvelujen määrittämiseen ja niiden keskinäisen vuorovaikutuksen järjestämiseen. Docker Compose on siksi työkalu monisäilöisten Docker-sovellusten kuvaamiseen ja suorittamiseen.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Kaksi konttia käynnissä isäntäjärjestelmässä

GNU-merkki

Ohjelma make, on pohjimmiltaan työkalu ohjelmien ja kirjastojen rakentamisen automatisointiin lähdekoodista. Yleisesti ottaen voimme sanoa niin make koskee kaikkia prosesseja, joissa suoritetaan mielivaltaisia ​​komentoja joidenkin syöttömateriaalien muuntamiseksi johonkin tulostusmuotoon jotakin tarkoitusta varten. Meidän tapauksessamme komennot docker-compose muunnetaan abstrakteiksi tavoitteiksi (Puhelimen kohteet).

Kerro ohjelmalle make siitä, mitä haluamme siltä, ​​tarvitsemme tiedoston Makefile.

Meidän Makefile sisältää säännöllisiä komentoja docker и docker-compose, jotka on suunniteltu ratkaisemaan monia ongelmia. Puhumme nimittäin kontin kokoamisesta, käynnistämisestä, pysäyttämisestä, uudelleenkäynnistämisestä, käyttäjien kirjautumisen järjestämisestä konttiin, konttilokien kanssa työskentelystä ja muiden vastaavien ongelmien ratkaisemisesta.

Docker Composen tyypillisiä käyttötapauksia

Kuvitellaan tavallinen verkkosovellus, jossa on seuraavat komponentit:

  • TimescaleDB-tietokanta (Postgres).
  • Express.js-sovellus.
  • Ping (vain kontti, ei tee mitään erityistä).

Tämä sovellus tarvitsee 3 Docker-säiliötä ja tiedoston docker-compose, joka sisältää ohjeet näiden säilöjen hallintaan. Jokaisella säiliöllä on erilaiset kosketuspisteet. Esimerkiksi säiliöllä timescale on mahdollista työskennellä suunnilleen samalla tavalla kuin tietokantojen kanssa. Nimittäin sen avulla voit suorittaa seuraavat toiminnot:

  • Kirjautuminen Postgres-kuoreen.
  • Pöytien tuonti ja vienti.
  • luominen pg_dump taulukoita tai tietokantoja.

Express.js-sovellussäilö, expressjs, voi sisältää seuraavat ominaisuudet:

  • Tuoreiden tietojen toimittaminen järjestelmälokista.
  • Kirjaudu sisään komentotulkkiin suorittaaksesi tiettyjä komentoja.

Vuorovaikutus säilöjen kanssa

Kun olemme määrittäneet viestinnän säilöjen välillä Docker Composella, on aika kommunikoida näiden säiliöiden kanssa. Docker Compose -järjestelmässä on komento docker-compose, tukivaihtoehto -f, jonka avulla voit siirtää tiedoston järjestelmään docker-compose.yml.

Tämän vaihtoehdon ominaisuuksien avulla voit rajoittaa vuorovaikutusta järjestelmän kanssa vain tiedostossa mainittuihin säilöihin docker-compose.yml.

Katsotaanpa, miltä vuorovaikutus säilöjen kanssa näyttää komentoja käytettäessä docker-compose. Jos kuvittelemme, että meidän on kirjauduttava kuoreen psql, vastaavat komennot voivat näyttää tältä:

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

Sama komento, jota ei käytetä suorittamiseen docker-composeJa docker, saattaa näyttää tältä:

docker exec -it  edp_timescale_1 psql -Upostgres

Huomaa, että tällaisissa tapauksissa on aina parempi käyttää komentoa docker, ja komento docker-compose, koska tämä poistaa tarpeen muistaa säilöjen nimiä.

Molemmat yllä olevat komennot eivät ole niin vaikeita. Mutta jos käytimme "käärettä" muodossa Makefile, joka antaisi meille käyttöliittymän yksinkertaisten komentojen muodossa ja kutsuisi itse samanlaisia ​​pitkiä komentoja, niin samat tulokset voitaisiin saavuttaa näin:

make db-shell

On aivan selvää, että käyttö Makefile tekee konttien kanssa työskentelystä paljon helpompaa!

Toimiva esimerkki

Yllä olevan projektikaavion perusteella luomme seuraavan tiedoston 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

Luomme seuraavan tiedoston, jotta voimme hallita Docker Compose -kokoonpanoa ja olla vuorovaikutuksessa sen kuvaamien säilöjen kanssa 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

Suurin osa tässä kuvatuista komennoista koskee kaikkia säilöjä, mutta käyttämällä vaihtoehtoa c= voit rajoittaa komennon laajuuden yhteen säilöön.

Jälkeen Makefile valmis, voit käyttää sitä näin:

  • make help — antaa luettelon kaikista käytettävissä olevista komennoista make.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Ohje käytettävissä oleviin komentoihin

  • make build - kuvan kokoaminen Dockerfile. Esimerkissämme käytimme olemassa olevia kuvia timescale и ping. Mutta kuva api haluamme kerätä paikallisesti. Juuri näin tehdään tämän komennon suorittamisen jälkeen.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Docker-kontin rakentaminen

  • make start — kaikkien konttien laskeminen vesille. Jos haluat käynnistää vain yhden säilön, voit käyttää komentoa, kuten make start c=timescale.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Suoritetaan aikaskaalaussäilöä

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Ping-säiliön käyttäminen

  • make login-timescale — kirjaudu sisään säilön bash-istuntoon timescale.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Suoritetaan bashia aikaskaalaussäiliössä

  • make db-shell - sisäänkäynti psql säiliössä timescale suorittaa SQL-kyselyitä tietokantaa vastaan.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Psql:n suorittaminen timescaledb-säiliössä

  • make stop — konttien pysäyttäminen.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Aikataulukontin pysäyttäminen

  • make down — säiliöiden pysäyttäminen ja poistaminen. Voit poistaa tietyn säilön tällä komennolla määrittämällä haluamasi säilön. Esimerkiksi - make down c=timescale tai make down c=api.

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla
Kaikkien säilöjen pysäyttäminen ja poistaminen

Tulokset

Vaikka Docker Compose antaa meille runsaasti komentoja säilöjen hallintaan, näistä komennoista voi joskus tulla pitkiä ja vaikeita muistaa.

Käyttötapa Makefile auttoi meitä luomaan nopean ja helpon vuorovaikutuksen tiedostojen säilöjen kanssa docker-compose.yml. Puhumme nimittäin seuraavista:

  • Kehittäjä on vuorovaikutuksessa vain kohdassa kuvattujen projektisäilöjen kanssa docker-compose.yml, muut käynnissä olevat kontit eivät häiritse työtä.
  • Jos jokin komento unohtuu, voit suorittaa komennon make help ja saat apua käytettävissä oleviin komentoihin.
  • Sinun ei tarvitse muistaa pitkiä argumenttiluetteloita suorittaaksesi toimia, kuten uusimpien lokimerkintöjen hankkimista tai järjestelmään kirjautumista. Esimerkiksi komento kuten docker-compose -f docker-compose.yml exec timescale psql -Upostgres muuttuu make db-shell.
  • tiedosto Makefile Voit mukautua siihen joustavasti projektin kasvaessa. On esimerkiksi helppo lisätä komento tietokannan varmuuskopion luomiseksi tai minkä tahansa muun toiminnon suorittamiseksi.
  • Jos suuri joukko kehittäjiä käyttää samaa Makefile, tämä virtaviivaistaa yhteistyötä ja vähentää virheitä.

PS. Meidän markkinapaikka on kuva Satamatyöläinen, joka voidaan asentaa yhdellä napsautuksella. Voit tarkistaa konttien toiminnan osoitteessa VPS. Kaikille uusille asiakkaille annetaan 3 päivää maksutonta testausta.

Hyvä lukijat! Kuinka automatisoit Docker Composen?

Docker Compose: Työsi yksinkertaistaminen Makefile-tiedostojen avulla

Lähde: will.com

Lisää kommentti