Docker Compose: Simpligi Vian Laboron Uzante Makefiles

Ĉiujn malmultajn jarojn, la industrio pri programaro spertas paradigmoŝanĝon. Unu el ĉi tiuj fenomenoj povas esti rekonita kiel la kreskanta intereso en la koncepto de mikroservoj. Kvankam mikroservoj ne estas la plej nova teknologio, nur lastatempe ĝia populareco laŭvorte eksplodis.

Grandaj monolitaj servoj nun estas anstataŭigitaj per sendependaj, aŭtonomaj mikroservoj. Mikroservo povas esti konsiderata kiel aplikaĵo, kiu servas unuopan kaj tre specifan celon. Ekzemple, ĝi povus esti interrilata DBMS, Express-aplikaĵo, Solr-servo.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles

Nuntempe, estas malfacile imagi disvolvi novan programaran sistemon sen uzi mikroservojn. Kaj ĉi tiu situacio, siavice, kondukas nin al la platformo Docker.

Docker

Platformo Docker, en la evoluo kaj deplojo de mikroservoj, fariĝis preskaŭ industria normo. En la retejo de la projekto vi povas ekscii, ke Docker estas la sola sendependa konteniga platformo, kiu permesas al organizoj senpene krei ajnan aplikaĵon, kaj ankaŭ distribui kaj funkciigi ilin en ajna medio - de hibridaj nuboj ĝis randaj sistemoj.

Docker Komponi

Teknologio Docker Komponi desegnita por agordi plurkontenajn aplikojn. Docker Compose-projekto povas enhavi tiom da Docker-ujoj kiom bezonas la kreinto de la projekto.

Kiam vi laboras kun Docker Compose, YAML-dosiero estas uzata por agordi aplikajn servojn kaj organizi ilian interagadon inter si. Docker Compose estas do ilo por priskribi kaj ruli plurkontenajn Docker-aplikaĵojn.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Du ujoj funkcias per gastiga sistemo

GNU Make

La programo make, estas esence ilo por aŭtomatigi la konstruadon de programoj kaj bibliotekoj el fontkodo. Ĝenerale, ni povas diri tion make validas por ajna procezo kiu implikas plenumi arbitrajn komandojn por transformi iujn enigmaterialojn al iu eligformo, al iu celo. En nia kazo, la komandoj docker-compose estos transformitaj en abstraktajn celojn (Telefonceloj).

Por rakonti la programon make pri tio, kion ni volas de ĝi, ni bezonas dosieron Makefile.

En nia Makefile enhavos regulajn komandojn docker и docker-compose, kiuj estas dizajnitaj por solvi multajn problemojn. Nome, ni parolas pri muntado de ujo, pri ekfunkciigo, haltigo, restartigo de ĝi, pri organizado de uzanta ensaluto al la ujo, pri laboro kun ujprogramoj kaj pri solvado de aliaj similaj problemoj.

Tipaj Uzkazoj por Docker Compose

Ni imagu regulan TTT-aplikaĵon kiu havas la jenajn komponentojn:

  • TimescaleDB-datumbazo (Postgres).
  • Express.js aplikaĵo.
  • Ping (nur ujo, faras nenion specialan).

Ĉi tiu aplikaĵo bezonos 3 Docker-ujojn kaj dosieron docker-compose, kiu enhavas instrukciojn por administri ĉi tiujn ujojn. Ĉiu ujo havos malsamajn tuŝpunktojn. Ekzemple, kun ujo timescale eblos labori proksimume same kiel ili funkcias kun datumbazoj. Nome, ĝi permesas vin plenumi la jenajn agojn:

  • Ensalutu en la Postgres-ŝelon.
  • Importo kaj eksportado de tabeloj.
  • kreaĵo pg_dump tabeloj aŭ datumbazoj.

Express.js aplika ujo, expressjs, povas havi la jenajn kapablojn:

  • Provizante freŝajn datumojn de la sistema protokolo.
  • Ensalutu al la ŝelo por ekzekuti iujn komandojn.

Interagado kun Ujoj

Post kiam ni starigis komunikadon inter ujoj uzante Docker Compose, estas tempo komuniki kun tiuj ujoj. Ene de la sistemo Docker Compose estas komando docker-compose, subtenanta opcion -f, kiu permesas vin translokigi dosieron al la sistemo docker-compose.yml.

Uzante la kapablojn de ĉi tiu opcio, vi povas limigi interagadon kun la sistemo nur al tiuj ujoj kiuj estas menciitaj en la dosiero. docker-compose.yml.

Ni rigardu kiel aspektas interagoj kun ujoj kiam vi uzas komandojn docker-compose. Se ni imagas, ke ni devas ensaluti en la ŝelon psql, tiam la respondaj komandoj povus aspekti jene:

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

La sama komando, kiu ne estas uzata por ekzekuti docker-composekaj docker, povus aspekti jene:

docker exec -it  edp_timescale_1 psql -Upostgres

Bonvolu noti, ke en tiaj kazoj estas ĉiam preferinde uzi la komandon docker, kaj la teamo docker-compose, ĉar tio forigas la bezonon memori ujajn nomojn.

Ambaŭ ĉi-supraj komandoj ne estas tiom malfacilaj. Sed se ni uzis "envolvaĵon" en la formo Makefile, kiu donus al ni interfacon en la formo de simplaj komandoj kaj mem nomus similajn longajn komandojn, tiam la samaj rezultoj povus esti atingitaj jene:

make db-shell

Estas sufiĉe evidente, ke la uzo Makefile multe pli facilas labori kun ujoj!

Labora ekzemplo

Surbaze de la supra projekto-diagramo, ni kreos la sekvan dosieron 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

Por administri la agordon de Docker Compose kaj interagi kun la ujoj, kiujn ĝi priskribas, ni kreos la sekvan dosieron 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

La plej multaj el la komandoj priskribitaj ĉi tie validas por ĉiuj ujoj, sed uzante la opcion c= permesas vin limigi la amplekson de komando al unu ujo.

post la Makefile preta, vi povas uzi ĝin tiel:

  • make help — eldonante liston de ĉiuj disponeblaj komandoj por make.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Helpo pri disponeblaj komandoj

  • make build - kunmeti bildon el Dockerfile. En nia ekzemplo ni uzis ekzistantajn bildojn timescale и ping. Sed la bildo api ni volas kolekti loke. Ĉi tio estas ĝuste kio estos farita post ekzekuto de ĉi tiu komando.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Konstruante Docker-ujon

  • make start — lanĉante ĉiujn ujojn. Por lanĉi nur unu ujon, vi povas uzi komandon kiel make start c=timescale.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Kurante la tempskalan ujon

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Rulado de ping-ujo

  • make login-timescale — ensalutu al la bash-sesio de la ujo timescale.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Kuranta bash en temposkala ujo

  • make db-shell - enirejo al psql en ujo timescale por efektivigi SQL-demandojn kontraŭ la datumbazo.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Rulante psql en timescaledb-ujo

  • make stop — haltigi ujojn.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Maldaŭrigante tempskalan ujon

  • make down — haltigi kaj forigi ujojn. Por forigi specifan ujon, vi povas uzi ĉi tiun komandon specifante la deziratan ujon. Ekzemple - make down c=timescalemake down c=api.

Docker Compose: Simpligi Vian Laboron Uzante Makefiles
Ĉesigi kaj forigi ĉiujn ujojn

Rezultoj

Kvankam Docker Compose donas al ni riĉan aron da komandoj por administri ujojn, foje ĉi tiuj komandoj povas fariĝi longaj kaj malfacile memoreblaj.

Metodo de uzo Makefile helpis nin establi rapidan kaj facilan interagadon kun ujoj de dosiero docker-compose.yml. Nome, ni parolas pri la jenaj:

  • La programisto interagas nur kun la projektujoj priskribitaj en docker-compose.yml, laboro ne estas malhelpita de aliaj kurantaj ujoj.
  • En la okazo, ke certa komando estas forgesita, vi povas plenumi la komandon make help kaj ricevu helpon pri disponeblaj komandoj.
  • Vi ne devas memori longajn listojn de argumentoj por plenumi agojn kiel ricevi la plej novajn protokolojn aŭ ensaluti en sistemon. Ekzemple, komando kiel docker-compose -f docker-compose.yml exec timescale psql -Upostgres iĝas make db-shell.
  • dosiero Makefile Vi povas flekseble adaptiĝi al ĝi dum la projekto kreskas. Ekzemple, estas facile aldoni komandon por krei datumbazan sekurkopion aŭ fari ajnan alian agon.
  • Se granda teamo de programistoj uzas la saman Makefile, ĉi tio fluliniigas kunlaboron kaj reduktas erarojn.

PS En nia foirejo estas bildo Docker, kiu estas instalita per unu klako. Vi povas kontroli, ke la ujoj funkcias VPS. Ĉiuj novaj klientoj ricevas 3 tagojn da testado senpage.

Karaj legantoj! Kiel vi aŭtomatigas Docker Compose?

Docker Compose: Simpligi Vian Laboron Uzante Makefiles

fonto: www.habr.com

Aldoni komenton