Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles

Her çend sal carekê, pîşesaziya pêşkeftina nermalavê berbi guheztinek paradîgmayê ve diçe. Yek ji van diyardeyan dikare wekî eleqeya mezin a li ser têgeha mîkroservisan were nas kirin. Her çend mîkroxizmet ne teknolojiya herî nû ne jî, tenê di van demên dawî de populerbûna wê bi rastî zêde bûye.

Karûbarên yekparêz ên mezin naha bi mîkroxizmetên serbixwe û xweser têne guheztin. Microservice dikare wekî serîlêdanek ku ji armancek yekane û pir taybetî re xizmet dike were fikirîn. Mînakî, ew dikare DBMS-ek têkilî, serîlêdanek Express, karûbarek Solr be.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles

Van rojan, dijwar e ku meriv xeyal bike ku pergalek nermalava nû bêyî karanîna mîkroservisan pêşve bibe. Û ev rewş, di encamê de, me berbi platforma Docker ve dibe.

Docker

Platforma Docker, di pêşkeftin û belavkirina mîkroxizmetan de, hema hema bûye standardek pîşesaziyê. Li ser malpera projeyê hûn dikarin fêr bibin ku Docker yekane platforma konteynerê serbixwe ye ku rê dide rêxistinan ku bêyî hewildan her serîlêdanê biafirînin, û her weha wan li her hawîrdorê belav bikin û bimeşînin - ji ewrên hybrid heya pergalên peravê.

Docker Compose

Teknolojiyê Docker Compose ji bo mîhengkirina sepanên pir-konteyner hatî çêkirin. Projeyek Docker Compose dikare bi qasî ku hewcedarê afirînerê projeyê hewce dike gelek konteynerên Docker-ê bigire.

Dema ku bi Docker Compose re dixebitin, pelek YAML tê bikar anîn da ku karûbarên serîlêdanê mîheng bike û danûstendina wan bi hev re organîze bike. Ji ber vê yekê Docker Compose amûrek e ji bo ravekirin û xebitandina sepanên Docker-a pir-konteyner.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Du konteynir li ser pergalek mêvandar dixebitin

GNU Bike

Bername make, di esasê xwe de amûrek e ji bo otomatîkkirina avakirina bername û pirtûkxaneyan ji koda çavkaniyê. Bi gelemperî, em dikarin bêjin make ji bo her pêvajoyek ku pêkanîna fermanên keyfî vedihewîne ji bo veguheztina hin materyalên têketinê li hin formên derketinê, ji hin armancê re derbas dibe. Di rewşa me de, ferman docker-compose dê veguhere armancên razber (Armancên telefonê).

Ji bo bernameyê bêje make li ser tiştên ku em jê dixwazin, em pelek hewce ne Makefile.

Vîdeo Makefile dê fermanên birêkûpêk hebin docker и docker-compose, ku ji bo çareserkirina gelek pirsgirêkan hatine çêkirin. Ango, em li ser berhevkirina konteynerek, li ser destpêkirina wê, rawestandina wê, ji nû ve destpêkirina wê, li ser organîzekirina têketina bikarhêner a konteynerê, li ser xebata bi têketinên konteynerê û li ser çareserkirina pirsgirêkên din ên bi vî rengî diaxivin.

Bûyerên Bikaranîna Tîpîkî ji bo Docker Compose

Ka em serîlêdanek webê ya birêkûpêk bifikirin ku pêkhateyên jêrîn hene:

  • DatascaleDB (Postgres).
  • sepana Express.js.
  • Ping (tenê konteynerek, tiştek taybetî nake).

Vê serîlêdanê dê 3 konteynerên Docker û pelek hewce bike docker-compose, ku talîmatên ji bo birêvebirina van konteyneran vedihewîne. Her konteynir dê xwediyê nuqteyên cûda yên têkiliyê be. Ji bo nimûne, bi konteynir timescale dê mimkun be ku bi qasî ku ew bi databasan re bixebitin bi heman awayî bixebitin. Ango, ew dihêle hûn kiryarên jêrîn bikin:

  • Têkeve nav şêlê Postgres.
  • Import û hinardekirina tabloyan.
  • creation pg_dump tablo an databases.

konteynir serîlêdana Express.js, expressjs, dibe ku xwedî kapasîteyên jêrîn be:

  • Daneyên nû ji têketina pergalê peyda dikin.
  • Têkeve şêlê da ku hin fermanan bicîh bîne.

Têkiliya bi konteyniran re

Gava ku me di navbera konteyneran de bi karanîna Docker Compose re danûstendinê saz kir, ew dem e ku em bi wan konteyneran re têkilî daynin. Di nav pergala Docker Compose de fermanek heye docker-compose, vebijarka piştgirî -f, ku destûrê dide te ku pelek pergalê veguhezîne docker-compose.yml.

Bi karanîna kapasîteyên vê vebijarkê, hûn dikarin danûstendina bi pergalê re tenê bi wan konteynerên ku di pelê de têne destnîşan kirin sînordar bikin. docker-compose.yml.

Ka em mêze bikin ka têkiliyên bi konteyneran re dema ku emrê bikar tînin çawa xuya dikin docker-compose. Ger em xeyal bikin ku pêdivî ye ku em têkevin şêlê psql, wê hingê dibe ku emrên têkildar bi vî rengî xuya bikin:

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

Heman fermana ku ji bo bicîhkirinê nayê bikar anîn docker-composeû docker, dibe ku bi vî rengî xuya bike:

docker exec -it  edp_timescale_1 psql -Upostgres

Ji kerema xwe bala xwe bidin ku di rewşên weha de her gav çêtir e ku meriv fermanê bikar bîne docker, û tîmê docker-compose, ji ber ku ev hewcedariya bîranîna navên konteyneran ji holê radike.

Her du fermanên jorîn ne ew çend dijwar in. Lê heke me di formê de "wrapper" bikar bîne Makefile, ku dê di forma fermanên hêsan de navbeynkariyek bide me û bixwe dê fermanên dirêj ên mîna hev binav bike, wê hingê heman encam dikarin bi vî rengî werin bidestxistin:

make db-shell

Pir eşkere ye ku karanîna wê Makefile xebata bi konteyneran re pir hêsantir dike!

Mînaka xebatê

Li ser bingeha diyagrama projeya jorîn, em ê pelê jêrîn biafirînin 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

Ji bo birêvebirina veavakirina Docker Compose û têkilî bi konteynerên ku ew diyar dike, em ê pelê jêrîn biafirînin 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

Piraniya fermanên ku li vir têne diyar kirin li hemî konteyneran têne sepandin, lê vebijarkê bikar tînin c= destûrê dide te ku çarçoweya fermanek bi yek konteynir re sînordar bike.

Piştî Makefile amade ye, hûn dikarin vî rengî bikar bînin:

  • make help - weşandina navnîşek hemî fermanên ku ji bo wan hene make.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Alîkarî li ser fermanên berdest

  • make build - berhevkirina wêneyek ji Dockerfile. Di mînaka xwe de me wêneyên heyî bikar anîn timescale и ping. Lê wêne api em dixwazin li herêmê kom bikin. Tiştê ku dê piştî pêkanîna vê fermanê were kirin tam ev e.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Avakirina konteynerek Docker

  • make start - avêtina hemî konteyneran. Ji bo destpêkirina tenê yek konteynir, hûn dikarin fermanek mîna bikar bînin make start c=timescale.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Rêvekirina konteynera demjimêrê

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Running konteynir ping

  • make login-timescale - têkevin danişîna bash ya konteynerê timescale.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Bash di konteynirek demkî de diherike

  • make db-shell - ketina nav psql di konteynir de timescale ji bo pêkanîna pirsên SQL li hember databasê.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
psql di konteynirek timescaledb de dimeşîne

  • make stop - konteynerên rawestandin.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Rawestandina konteynirek demkî

  • make down - rawestandin û rakirina konteyneran. Ji bo rakirina konteynirek taybetî, hûn dikarin vê fermanê bikar bînin ku konteynera xwestî diyar bike. Bo nimûne - make down c=timescale an make down c=api.

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles
Rawestandin û jêbirina hemî konteyneran

Encam

Her çend Docker Compose ji bo birêvebirina konteyneran komek fermanên zengîn dide me, carinan ev ferman dikarin bîranîna dirêj û dijwar bibin.

Rêbaza bikaranînê Makefile alîkariya me kir ku bi konteyneran re ji pelek pêwendiyek bilez û hêsan saz bikin docker-compose.yml. Ango em behsa van tiştan dikin:

  • Pêşvebir tenê bi konteynerên projeyê yên ku di nav de hatine destnîşan kirin re têkilî dike docker-compose.yml, kar ji hêla konteynerên din ên xebitandinê ve nayê asteng kirin.
  • Di bûyera ku fermanek diyarkirî ji bîr kirin, hûn dikarin fermanê bicîh bikin make help û li ser fermanên berdest alîkariyê bistînin.
  • Ne hewce ye ku hûn navnîşên dirêj ên argumanan bi bîr bînin da ku hûn çalakiyên wekî wergirtina têketinên herî paşîn an têketina pergalê bikin. Mînakî, fermanek mîna docker-compose -f docker-compose.yml exec timescale psql -Upostgres vediguhere make db-shell.
  • file Makefile Her ku proje mezin dibe hûn dikarin bi nermî pê re biguncînin. Mînakî, hêsan e ku meriv fermanek lê zêde bike da ku paşvekêşek databasê biafirîne an çalakiyek din bike.
  • Ger tîmek mezin a pêşdebiran heman yekê bikar tîne Makefile, ev hevkariyê xweş dike û xeletiyan kêm dike.

PS Vîdeo marketplace wêneyek heye Docker, ku dikare bi yek klîk were saz kirin. Hûn dikarin li ser operasyona konteynir kontrol bikin VPS. Hemî xerîdarên nû 3 rojên ceribandinê belaş têne dayîn.

Xwendevanên delal! Hûn çawa Docker Compose otomatîk dikin?

Docker Compose: Hêsankirina Karê Xwe Bi Bikaranîna Makefiles

Source: www.habr.com

Add a comment