Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa

Svakih nekoliko godina industrija razvoja softvera prolazi kroz promjenu paradigme. Jedan od tih fenomena može se prepoznati kao sve veći interes za koncept mikrousluga. Iako mikroservisi nisu najnovija tehnologija, tek u posljednje vrijeme njihova je popularnost doslovno skočila u nebo.

Velike monolitne usluge sada se zamjenjuju nezavisnim, autonomnim mikrouslugama. Mikroservis se može smatrati aplikacijom koja služi jednoj i vrlo specifičnoj svrsi. Na primjer, to može biti relacijski DBMS, Express aplikacija, Solr usluga.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa

Danas je teško zamisliti razvoj novog softverskog sustava bez korištenja mikroservisa. A ova situacija nas pak vodi do Docker platforme.

Lučki radnik

platforma Lučki radnik, u razvoju i implementaciji mikroservisa, postao je gotovo industrijski standard. Na web stranici projekta možete saznati da je Docker jedina neovisna platforma za kontejnerizaciju koja organizacijama omogućuje stvaranje bilo koje aplikacije bez napora, kao i njihovu distribuciju i pokretanje u bilo kojem okruženju – od hibridnih oblaka do rubnih sustava.

Docker Sastaviti

Технология Docker Sastaviti dizajniran za konfiguriranje aplikacija s više spremnika. Projekt Docker Compose može sadržavati onoliko Docker spremnika koliko kreatoru projekta treba.

Kada radite s Docker Compose, YAML datoteka se koristi za konfiguriranje aplikacijskih usluga i organiziranje njihove međusobne interakcije. Docker Compose je stoga alat za opisivanje i pokretanje Docker aplikacija s više spremnika.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Dva spremnika koji rade na glavnom sustavu

GNU Make

Program make, u biti je alat za automatizaciju izgradnje programa i biblioteka iz izvornog koda. Općenito, možemo to reći make odnosi se na bilo koji proces koji uključuje izvršavanje proizvoljnih naredbi za transformaciju nekih ulaznih materijala u neki izlazni oblik, u neki cilj. U našem slučaju, naredbe docker-compose će se transformirati u apstraktne ciljeve (Telefonske mete).

Da kažem program make o tome što želimo od toga, trebamo datoteku Makefile.

U našem Makefile sadržavat će redovite naredbe docker и docker-compose, koji su dizajnirani za rješavanje mnogih problema. Naime, govorimo o sastavljanju kontejnera, njegovom pokretanju, zaustavljanju, ponovnom pokretanju, organizaciji prijave korisnika na kontejner, radu sa zapisnicima kontejnera i rješavanju drugih sličnih problema.

Tipični slučajevi upotrebe za Docker Compose

Zamislimo običnu web aplikaciju koja ima sljedeće komponente:

  • TimescaleDB baza podataka (Postgres).
  • Express.js aplikacija.
  • Ping (samo spremnik, ne radi ništa posebno).

Ova aplikacija će trebati 3 Docker spremnika i datoteku docker-compose, koji sadrži upute za upravljanje ovim spremnicima. Svaki će spremnik imati različite dodirne točke. Na primjer, s kontejnerom timescale moći će se raditi približno na isti način kao što rade s bazama podataka. Naime, omogućuje vam izvođenje sljedećih radnji:

  • Prijava u Postgres shell.
  • Uvoz i izvoz tablica.
  • stvaranje pg_dump tablice ili baze podataka.

Spremnik aplikacije Express.js, expressjs, može imati sljedeće mogućnosti:

  • Pružanje svježih podataka iz dnevnika sustava.
  • Prijavite se u ljusku kako biste izvršili određene naredbe.

Interakcija sa spremnicima

Nakon što smo postavili komunikaciju između spremnika pomoću Docker Composea, vrijeme je za komunikaciju s tim spremnicima. Unutar Docker Compose sustava postoji naredba docker-compose, opcija podrške -f, koji vam omogućuje prijenos datoteke u sustav docker-compose.yml.

Koristeći mogućnosti ove opcije, možete ograničiti interakciju sa sustavom samo na one spremnike koji su spomenuti u datoteci docker-compose.yml.

Pogledajmo kako izgledaju interakcije sa spremnicima kada se koriste naredbe docker-compose. Ako zamislimo da se trebamo prijaviti u ljusku psql, onda bi odgovarajuće naredbe mogle izgledati ovako:

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

Ista naredba koja se ne koristi za izvršenje docker-composeI docker, može izgledati ovako:

docker exec -it  edp_timescale_1 psql -Upostgres

Imajte na umu da je u takvim slučajevima uvijek bolje koristiti naredbu docker, i tim docker-compose, budući da to eliminira potrebu za pamćenjem naziva spremnika.

Obje gore navedene naredbe nisu tako teške. Ali ako smo koristili "omot" u obrascu Makefile, koji bi nam dao sučelje u obliku jednostavnih naredbi i sam bi pozivao slične duge naredbe, onda bi se isti rezultati mogli postići ovako:

make db-shell

Sasvim je očito da korištenje Makefile znatno olakšava rad s kontejnerima!

Radni primjer

Na temelju gornjeg dijagrama projekta izradit ćemo sljedeću datoteku 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 konfiguracijom Docker Compose i interakciju sa spremnicima koje ona opisuje, izradit ćemo sljedeću datoteku 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 ovdje opisanih naredbi odnosi se na sve spremnike, ali uz korištenje opcije c= omogućuje vam da ograničite opseg naredbe na jedan spremnik.

Nakon Makefile spreman, možete ga koristiti ovako:

  • make help — izdavanje popisa svih dostupnih naredbi za make.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Pomoć o dostupnim naredbama

  • make build - sklapanje slike iz Dockerfile. U našem smo primjeru koristili postojeće slike timescale и ping. Ali slika api želimo prikupljati lokalno. To je upravo ono što će biti učinjeno nakon izvršenja ove naredbe.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Izgradnja Docker spremnika

  • make start — porinuće svih kontejnera. Za pokretanje samo jednog spremnika, možete koristiti naredbu poput make start c=timescale.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Pokretanje spremnika vremenske skale

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Pokretanje ping spremnika

  • make login-timescale — prijavite se na bash sesiju spremnika timescale.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Pokretanje basha u spremniku vremenske skale

  • make db-shell - ulaz u psql u kontejneru timescale za izvršavanje SQL upita prema bazi podataka.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Pokretanje psql-a u spremniku timescaledb

  • make stop — zaustavljanje kontejnera.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Zaustavljanje spremnika vremenske skale

  • make down — zaustavljanje i uklanjanje spremnika. Za uklanjanje određenog spremnika, možete koristiti ovu naredbu specificirajući željeni spremnik. Na primjer - make down c=timescale ili make down c=api.

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa
Zaustavljanje i brisanje svih spremnika

Rezultati

Iako nam Docker Compose daje bogat skup naredbi za upravljanje spremnicima, ponekad te naredbe mogu postati duge i teške za pamćenje.

Način upotrebe Makefile pomogao nam je uspostaviti brzu i jednostavnu interakciju sa spremnicima iz datoteke docker-compose.yml. Naime, riječ je o sljedećem:

  • Programer komunicira samo s projektnim spremnicima opisanim u docker-compose.yml, rad ne ometaju drugi pokretni kontejneri.
  • U slučaju da je određena naredba zaboravljena, možete je izvršiti make help i dobiti pomoć za dostupne naredbe.
  • Ne morate pamtiti dugačke popise argumenata da biste izvršili radnje kao što su dobivanje najnovijih unosa u dnevnik ili prijava u sustav. Na primjer, naredba poput docker-compose -f docker-compose.yml exec timescale psql -Upostgres pretvara u make db-shell.
  • datoteka Makefile Možete mu se fleksibilno prilagoditi kako projekt raste. Na primjer, lako je dodati naredbu za izradu sigurnosne kopije baze podataka ili izvođenje bilo koje druge radnje.
  • Ako veliki tim programera koristi isti Makefile, to pojednostavljuje suradnju i smanjuje pogreške.

PS U našem tržnica postoji slika Lučki radnik, koji se može instalirati jednim klikom. Rad kontejnera možete provjeriti na VPS. Svi novi klijenti dobivaju 3 dana besplatnog testiranja.

Dragi čitatelji! Kako automatizirati Docker Compose?

Docker Compose: Pojednostavljivanje vašeg rada pomoću Makefilesa

Izvor: www.habr.com

Dodajte komentar