Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles

Vsakih nekaj let se industrija razvoja programske opreme spremeni. Enega od teh pojavov lahko prepoznamo kot naraščajoče zanimanje za koncept mikrostoritev. Čeprav mikrostoritve niso najnovejša tehnologija, je šele v zadnjem času njihova priljubljenost dobesedno poskočila.

Velike monolitne storitve zdaj nadomeščajo neodvisne, avtonomne mikrostoritve. Mikrostoritev si lahko predstavljamo kot aplikacijo, ki služi enemu samemu in zelo specifičnemu namenu. Lahko je na primer relacijska DBMS, aplikacija Express, storitev Solr.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles

Te dni si je težko predstavljati razvoj novega programskega sistema brez uporabe mikrostoritev. In ta situacija nas posledično pripelje do platforme Docker.

Lučki delavec

platforma Lučki delavec, pri razvoju in uvajanju mikrostoritev, je postalo skoraj industrijski standard. Na spletni strani projekta lahko izveste, da je Docker edina neodvisna kontejnerska platforma, ki organizacijam omogoča enostavno ustvarjanje katere koli aplikacije ter njihovo distribucijo in izvajanje v katerem koli okolju – od hibridnih oblakov do robnih sistemov.

Docker Compose

Технология Docker Compose zasnovan za konfiguriranje aplikacij z več vsebniki. Projekt Docker Compose lahko vsebuje toliko vsebnikov Docker, kot jih potrebuje ustvarjalec projekta.

Pri delu z Docker Compose se datoteka YAML uporablja za konfiguracijo aplikacijskih storitev in organiziranje njihove medsebojne interakcije. Docker Compose je torej orodje za opisovanje in izvajanje aplikacij Docker z več vsebniki.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Dva vsebnika, ki se izvajata v gostiteljskem sistemu

Ustvari GNU

Program make, je v bistvu orodje za avtomatizacijo gradnje programov in knjižnic iz izvorne kode. Na splošno lahko rečemo, da make velja za vsak postopek, ki vključuje izvajanje poljubnih ukazov za pretvorbo nekaterih vhodnih materialov v neko izhodno obliko za določen namen. V našem primeru ukazi docker-compose bodo preoblikovani v abstraktne cilje (Telefonski cilji).

Povedati programu make o tem, kaj želimo od tega, potrebujemo datoteko Makefile.

V našem Makefile bo vseboval običajne ukaze docker и docker-compose, ki so namenjeni reševanju številnih težav. Govorimo namreč o sestavljanju kontejnerja, o njegovem zagonu, zaustavitvi, ponovnem zagonu, o organizaciji prijave uporabnikov v kontejner, o delu s kontejnerskimi dnevniki in o reševanju drugih podobnih problemov.

Tipični primeri uporabe za Docker Compose

Predstavljajmo si običajno spletno aplikacijo, ki ima naslednje komponente:

  • Baza podatkov TimescaleDB (Postgres).
  • Aplikacija Express.js.
  • Ping (samo vsebnik, ne dela nič posebnega).

Ta aplikacija potrebuje 3 vsebnike Docker in datoteko docker-compose, ki vsebuje navodila za upravljanje teh zabojnikov. Vsak vsebnik bo imel različne stične točke. Na primer s posodo timescale bo mogoče delati približno tako, kot delajo z bazami podatkov. Omogoča vam namreč izvajanje naslednjih dejanj:

  • Prijava v lupino Postgres.
  • Uvoz in izvoz tabel.
  • ustvarjanje pg_dump tabel ali baz podatkov.

Vsebnik aplikacij Express.js, expressjs, ima lahko naslednje zmožnosti:

  • Zagotavljanje svežih podatkov iz sistemskega dnevnika.
  • Za izvajanje določenih ukazov se prijavite v lupino.

Interakcija z vsebniki

Ko smo vzpostavili komunikacijo med vsebniki z uporabo Docker Compose, je čas za komunikacijo s temi vsebniki. V sistemu Docker Compose obstaja ukaz docker-compose, podporna možnost -f, ki omogoča prenos datoteke v sistem docker-compose.yml.

Z zmožnostmi te možnosti lahko omejite interakcijo s sistemom samo na tiste vsebnike, ki so omenjeni v datoteki docker-compose.yml.

Oglejmo si, kako so videti interakcije z vsebniki pri uporabi ukazov docker-compose. Če si predstavljamo, da se moramo prijaviti v lupino psql, bi lahko ustrezni ukazi izgledali takole:

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

Isti ukaz, ki se ne uporablja za izvedbo docker-composeIn docker, lahko izgleda takole:

docker exec -it  edp_timescale_1 psql -Upostgres

Upoštevajte, da je v takih primerih vedno bolje uporabiti ukaz docker, in ekipa docker-compose, saj s tem ni več potrebe po zapomnitvi imen vsebnikov.

Oba zgornja ukaza nista tako težka. Če pa smo v obrazcu uporabili »ovitek«. Makefile, ki bi nam dal vmesnik v obliki preprostih ukazov in bi sam klical podobne dolge ukaze, potem bi lahko enake rezultate dosegli takole:

make db-shell

Povsem očitno je, da uporaba Makefile olajša delo s kontejnerji!

Delovni primer

Na podlagi zgornjega projektnega diagrama bomo ustvarili naslednjo datoteko 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

Za upravljanje konfiguracije Docker Compose in interakcijo z vsebniki, ki jih opisuje, bomo ustvarili naslednjo datoteko 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

Večina tukaj opisanih ukazov velja za vse vsebnike, vendar z uporabo možnosti c= omogoča omejitev obsega ukaza na en vsebnik.

Po Makefile pripravljen, lahko ga uporabite takole:

  • make help — izdaja seznama vseh ukazov, ki so na voljo za make.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Pomoč pri razpoložljivih ukazih

  • make build - sestavljanje slike iz Dockerfile. V našem primeru smo uporabili obstoječe slike timescale и ping. Ampak slika api želimo zbirati lokalno. Točno to bo storjeno po izvedbi tega ukaza.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Gradnja vsebnika Docker

  • make start — izstrelitev vseh kontejnerjev. Če želite zagnati samo en vsebnik, lahko uporabite ukaz, kot je make start c=timescale.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Izvajanje vsebnika časovne lestvice

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Izvajanje vsebnika ping

  • make login-timescale — prijava v bash sejo vsebnika timescale.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Izvajanje bash v vsebniku časovne lestvice

  • make db-shell - vhod v psql v posodi timescale za izvajanje poizvedb SQL proti bazi podatkov.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Izvajanje psql v vsebniku timescaledb

  • make stop — ustavljanje kontejnerjev.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Zaustavitev vsebnika časovne lestvice

  • make down — ustavljanje in odstranjevanje zabojnikov. Če želite odstraniti določen vsebnik, lahko uporabite ta ukaz, ki določa želeni vsebnik. Na primer - make down c=timescale ali make down c=api.

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles
Zaustavitev in brisanje vseh vsebnikov

Rezultati

Čeprav nam Docker Compose ponuja bogat nabor ukazov za upravljanje vsebnikov, lahko ti ukazi včasih postanejo dolgi in si jih je težko zapomniti.

Način uporabe Makefile nam je pomagal vzpostaviti hitro in enostavno interakcijo z vsebniki iz datoteke docker-compose.yml. Govorimo namreč o naslednjem:

  • Razvijalec komunicira samo s projektnimi vsebniki, opisanimi v docker-compose.yml, dela ne motijo ​​drugi tekoči kontejnerji.
  • V primeru, da je določen ukaz pozabljen, lahko ukaz izvedete make help in poiščite pomoč pri razpoložljivih ukazih.
  • Za izvajanje dejanj, kot je pridobivanje najnovejših vnosov v dnevnik ali prijava v sistem, si ni treba zapomniti dolgih seznamov argumentov. Na primer, ukaz kot je docker-compose -f docker-compose.yml exec timescale psql -Upostgres spremeni v make db-shell.
  • datoteka Makefile Lahko se mu prilagodljivo prilagajate, ko projekt raste. Enostavno je na primer dodati ukaz za ustvarjanje varnostne kopije baze podatkov ali izvedbo katerega koli drugega dejanja.
  • Če velika ekipa razvijalcev uporablja isto Makefile, to poenostavi sodelovanje in zmanjša število napak.

PS V našem tržnica obstaja slika Lučki delavec, ki se namesti z enim klikom. Delovanje zabojnikov lahko preverite na VPS. Vse nove stranke dobijo 3 dni brezplačnega testiranja.

Drage bralke in bralci! Kako avtomatizirate Docker Compose?

Docker Compose: poenostavitev vašega dela z uporabo datotek Makefiles

Vir: www.habr.com

Dodaj komentar