Docker Compose: zure lana sinplifikatzea Makefiles erabiliz

Urte batzuetan, software garapenaren industriak paradigma aldaketa bat jasaten du. Fenomeno horietako bat mikrozerbitzuen kontzeptuarekiko gero eta interes handiagoa dela aitor daiteke. Mikrozerbitzuak teknologia berriena ez diren arren, duela gutxi bere ospea literalki gora egin du.

Zerbitzu monolitiko handiak mikrozerbitzu independente eta autonomoekin ordezkatzen ari dira. Mikrozerbitzu bat helburu bakarra eta oso zehatza betetzen duen aplikazio gisa pentsa daiteke. Adibidez, DBMS erlazional bat, Express aplikazio bat, Solr zerbitzu bat izan daiteke.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz

Egun, zaila da mikrozerbitzurik erabili gabe software-sistema berri bat garatzen imajinatzea. Eta egoera honek, Docker plataformara garamatza.

Docker

Plataforma Docker, mikrozerbitzuen garapenean eta hedapenean, ia industria estandarra bihurtu da. Proiektuaren webgunean jakin dezakezu Docker erakundeei edozein aplikazio esfortzurik gabe sortzeko aukera ematen dien edukiontzien plataforma independente bakarra dela, baita horiek edozein ingurunetan banatu eta exekutatu ere - hodei hibridoetatik hasi eta ertzeko sistemetaraino.

Docker Compose

ВСхнология Docker Compose Edukiontzi anitzeko aplikazioak konfiguratzeko diseinatua. Docker Compose proiektu batek proiektuaren sortzaileak behar adina Docker edukiontzi izan ditzake.

Docker Compose-rekin lan egiten duzunean, YAML fitxategi bat erabiltzen da aplikazio-zerbitzuak konfiguratzeko eta elkarren arteko elkarrekintza antolatzeko. Docker Compose, beraz, edukiontzi anitzeko Docker aplikazioak deskribatzeko eta exekutatzeko tresna bat da.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Ostalari sistema batean exekutatzen diren bi edukiontzi

GNU Make

Programa make, funtsean, iturburu-kodetik programak eta liburutegiak eraikitzea automatizatzeko tresna bat da. Oro har, hori esan dezakegu make Sarrerako material batzuk irteera forma batera eraldatzeko komando arbitrarioak exekutatzen dituen prozesu guztietan aplikatzen da, helburu batzuetara. Gure kasuan, komandoak docker-compose helburu abstraktu bihurtuko dira (Telefonoaren helburuak).

Programa kontatzeko make bertatik nahi dugunari buruz, fitxategi bat behar dugu Makefile.

Gure Makefile ohiko komandoak izango ditu docker ΠΈ docker-compose, arazo asko konpontzeko diseinatuta daudenak. Hots, edukiontzi bat muntatzeaz, abiarazteaz, geldituz, berrabiarazteaz, erabiltzaileen edukiontzian saioa antolatzeaz, edukiontzien erregistroekin lan egiteaz eta antzeko beste arazo batzuk konpontzeaz ari gara.

Docker Compose-ren ohiko erabilera kasuak

Imajina dezagun osagai hauek dituen web aplikazio arrunt bat:

  • TimescaleDB datu-basea (Postgres).
  • Express.js aplikazioa.
  • Ping (ontzi bat besterik ez, ez du ezer berezirik egiten).

Aplikazio honek 3 Docker edukiontzi eta fitxategi bat beharko ditu docker-compose, edukiontzi hauek kudeatzeko argibideak jasotzen dituena. Edukiontzi bakoitzak ukipen puntu desberdinak izango ditu. Adibidez, edukiontzi batekin timescale datu-baseekin lan egiten duten modu berean lan egin ahal izango da. Hain zuzen, ekintza hauek egiteko aukera ematen du:

  • Postgres shell-en saioa hasi.
  • Taulen inportazioa eta esportazioa.
  • sortzea pg_dump taulak edo datu-baseak.

Express.js aplikazioaren edukiontzia, expressjs, gaitasun hauek izan ditzake:

  • Sistemaren erregistroko datu berriak ematea.
  • Hasi saioa shell-ean zenbait komando exekutatzeko.

Edukiontziekin elkarrekintzan aritzea

Docker Compose erabiliz edukiontzien arteko komunikazioa konfiguratu ondoren, edukiontzi horiekin komunikatzeko garaia da. Docker Compose sistemaren barruan komando bat dago docker-compose, laguntza aukera -f, fitxategi bat sistemara transferitzeko aukera ematen duena docker-compose.yml.

Aukera honen gaitasunak erabiliz, sistemarekin elkarrekintza fitxategian aipatzen diren edukiontzietara muga dezakezu. docker-compose.yml.

Ikus dezagun komandoak erabiltzean edukiontziekiko elkarrekintzak nolakoak diren docker-compose. Oskolean saioa hasi behar dugula imajinatzen badugu psql, orduan dagozkien komandoak honelakoak izan daitezke:

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

Exekutatzeko erabiltzen ez den komando bera docker-composeEta docker, honelakoa izan daiteke:

docker exec -it  edp_timescale_1 psql -Upostgres

Kontuan izan horrelako kasuetan beti komeni dela komandoa erabiltzea docker, eta komandoa docker-compose, horrek edukiontzien izenak gogoratzeko beharra ezabatzen baitu.

Goiko bi komandoak ez dira hain zailak. Baina forman β€œbilgarri” bat erabili bagenu Makefile, komando sinpleen formako interfaze bat emango liguke eta berez antzeko komando luzeak deituko lituzke, orduan emaitza berdinak honela lor litezke:

make db-shell

Erabilera nahiko nabaria da Makefile ontziekin lan egitea askoz errazten du!

Lan adibidea

Goiko proiektuaren diagraman oinarrituta, ondorengo fitxategia sortuko dugu 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 konfigurazioa kudeatzeko eta deskribatzen dituen edukiontziekin elkarreragiteko, honako fitxategi hau sortuko dugu 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

Hemen deskribatutako komando gehienak edukiontzi guztiei aplikatzen zaizkie, baina aukera erabiliz c= komando baten esparrua edukiontzi batera mugatzeko aukera ematen du.

Ondoren Makefile prest, honela erabil dezakezu:

  • make help β€” eskuragarri dauden komando guztien zerrenda igortzea make.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Eskuragarri dauden komandoei buruzko laguntza

  • make build - irudi bat muntatzea Dockerfile. Gure adibidean lehendik dauden irudiak erabili ditugu timescale ΠΈ ping. Baina irudia api lokalean bildu nahi dugu. Hauxe da komando hau exekutatu ondoren egingo dena.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Docker edukiontzi bat eraikitzea

  • make start β€” Edukiontzi guztiak jaurtitzea. Edukiontzi bakarra abiarazteko, bezalako komando bat erabil dezakezu make start c=timescale.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Denbora-eskalan edukiontzia exekutatzen

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Ping edukiontzi bat exekutatzen

  • make login-timescale β€” hasi saioa edukiontziaren bash saioan timescale.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Bash exekutatzen denbora-eskalako edukiontzi batean

  • make db-shell - sarrera psql edukiontzi batean timescale datu-basearen aurkako SQL kontsultak exekutatzeko.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
psql exekutatzen timescaledb edukiontzi batean

  • make stop β€” ontziak gelditzea.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Denbora-eskalan edukiontzi bat geldiaraztea

  • make down β€” ontziak gelditzea eta kentzea. Edukiontzi zehatz bat kentzeko, komando hau erabil dezakezu nahi duzun edukiontzia zehaztuz. Adibidez - make down c=timescale edo make down c=api.

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz
Edukiontzi guztiak gelditzea eta ezabatzea

Emaitzak

Docker Compose-k edukiontziak kudeatzeko komando sorta aberatsa eskaintzen digun arren, batzuetan komando hauek luzeak eta zailak izan daitezke gogoratzeko.

Erabilera-metodoa Makefile fitxategi batetik edukiontziekin interakzio azkarra eta erraza ezartzen lagundu digu docker-compose.yml. Hain zuzen, honako hauetaz ari gara:

  • Garatzaileak atalean deskribatutako proiektu-edukiontziekin soilik elkarreragiten du docker-compose.yml, lanean ez dute oztoporik jartzen martxan dauden beste edukiontziek.
  • Komando jakin bat ahazten bada, komandoa exekutatu dezakezu make help eta lortu laguntza erabilgarri dauden komandoetan.
  • Ez duzu zertan argudio-zerrenda luzeak gogoratu behar ekintzak egiteko, esate baterako, azken erregistroko sarrerak lortzea edo sistema batean saioa hastea. Adibidez, bezalako komando bat docker-compose -f docker-compose.yml exec timescale psql -Upostgres txandaka sartu make db-shell.
  • fitxategia Makefile Proiektua hazten doan heinean malgutasunez molda zaitezke. Adibidez, erraza da komando bat gehitzea datu-basearen babeskopia sortzeko edo beste edozein ekintza egiteko.
  • Garatzaile talde handi batek bera erabiltzen badu Makefile, horrek lankidetza errazten du eta akatsak murrizten ditu.

PS Gure merkatua irudi bat dago Docker, klik bakarrean instalatu daitekeena. Edukiontzien funtzionamendua kontsulta dezakezu hemen VPS. Bezero berri guztiei 3 eguneko probak eskaintzen zaizkie doan.

Irakurle maitea! Nola automatizatzen duzu Docker Compose?

Docker Compose: zure lana sinplifikatzea Makefiles erabiliz

Iturria: www.habr.com

Gehitu iruzkin berria