Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles

Kull ftit snin, l-industrija tal-iżvilupp tas-softwer tgħaddi minn bidla fil-paradigma. Wieħed minn dawn il-fenomeni jista 'jiġi rikonoxxut bħala l-interess dejjem jikber fil-kunċett ta' mikroservizzi. Għalkemm il-mikroservizzi mhumiex l-aktar teknoloġija ġdida, dan l-aħħar biss il-popolarità tagħha żdiedet litteralment.

Servizzi monolitiċi kbar issa qed jiġu sostitwiti minn mikroservizzi indipendenti u awtonomi. Mikroservizz jista' jitqies bħala applikazzjoni li sservi għan wieħed u speċifiku ħafna. Per eżempju, jista 'jkun DBMS relazzjonali, applikazzjoni Express, servizz Solr.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles

Dawn il-ġranet, huwa diffiċli li wieħed jimmaġina li qed tiżviluppa sistema ta 'softwer ġdida mingħajr ma tuża mikroservizzi. U din is-sitwazzjoni, min-naħa tagħha, twassalna għall-pjattaforma Docker.

Docker

Pjattaforma Docker, fl-iżvilupp u l-iskjerament ta 'mikroservizzi, saret kważi standard tal-industrija. Fuq il-websajt tal-proġett tista 'ssir taf li Docker hija l-unika pjattaforma ta' kontejners indipendenti li tippermetti lill-organizzazzjonijiet joħolqu mingħajr sforz kwalunkwe applikazzjoni, kif ukoll iqassmu u jmexxuhom fi kwalunkwe ambjent - minn sħab ibridi għal sistemi edge.

Docker Ikteb

Технология Docker Ikteb iddisinjat għall-konfigurazzjoni ta' applikazzjonijiet b'ħafna kontenituri. Proġett Docker Compose jista' jkun fih kontenituri Docker daqs kemm jeħtieġ il-kreatur tal-proġett.

Meta taħdem ma 'Docker Compose, fajl YAML jintuża biex jiġi kkonfigurat is-servizzi tal-applikazzjoni u jorganizzaw l-interazzjoni tagħhom ma' xulxin. Docker Compose huwa għalhekk għodda biex tiddeskrivi u tħaddem applikazzjonijiet Docker b'ħafna kontenituri.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Żewġ kontenituri li jaħdmu fuq sistema ospitanti

GNU Make

Program make, hija essenzjalment għodda għall-awtomatizzazzjoni tal-bini ta 'programmi u libreriji mill-kodiċi tas-sors. B'mod ġenerali, nistgħu ngħidu li make japplika għal kwalunkwe proċess li jinvolvi l-eżekuzzjoni ta 'kmandi arbitrarji biex jittrasforma xi materjali ta' input għal xi forma ta 'output, għal xi għan. Fil-każ tagħna, il-kmandi docker-compose se jinbidel f'miri astratti (Miri tat-telefon).

Biex tgħid il-programm make dwar dak li rridu minnu, għandna bżonn fajl Makefile.

Fil-tagħna Makefile se jkun fih kmandi regolari docker и docker-compose, li huma mfassla biex isolvu ħafna problemi. Jiġifieri, qed nitkellmu dwar l-assemblaġġ ta 'kontenitur, dwar il-bidu tiegħu, it-twaqqif, il-bidu mill-ġdid, dwar l-organizzazzjoni tal-login tal-utent fil-kontenitur, dwar il-ħidma ma' zkuk tal-kontenituri, u dwar is-soluzzjoni ta 'problemi oħra simili.

Każijiet ta' Użu Tipiċi għal Docker Compose

Ejja nimmaġinaw applikazzjoni tal-web regolari li għandha l-komponenti li ġejjin:

  • Database TimescaleDB (Postgres).
  • Applikazzjoni Express.js.
  • Ping (sempliċement kontenitur, ma jagħmel xejn speċjali).

Din l-applikazzjoni se teħtieġ 3 kontenituri Docker u fajl docker-compose, li fih struzzjonijiet għall-ġestjoni ta' dawn il-kontenituri. Kull kontenitur se jkollu touchpoints differenti. Per eżempju, b'kontenitur timescale ikun possibbli li taħdem bejn wieħed u ieħor bl-istess mod kif jaħdmu mad-databases. Jiġifieri, jippermettilek twettaq l-azzjonijiet li ġejjin:

  • Logging fil-qoxra Postgres.
  • Importazzjoni u esportazzjoni ta' tabelli.
  • ħolqien pg_dump tabelli jew databases.

Kontenitur tal-applikazzjoni Express.js, expressjs, jista' jkollu l-kapaċitajiet li ġejjin:

  • Tipprovdi dejta friska mir-reġistru tas-sistema.
  • Idħol fil-qoxra biex tesegwixxi ċerti kmandi.

Interazzjoni mal-Kontenituri

Ladarba waqqafna komunikazzjoni bejn il-kontenituri bl-użu ta' Docker Compose, wasal iż-żmien li nikkomunikaw ma' dawk il-kontenituri. Fi ħdan is-sistema Docker Compose hemm kmand docker-compose, għażla ta 'appoġġ -f, li jippermettilek tittrasferixxi fajl għas-sistema docker-compose.yml.

Billi tuża l-kapaċitajiet ta 'din l-għażla, tista' tillimita l-interazzjoni mas-sistema biss għal dawk il-kontenituri li huma msemmija fil-fajl docker-compose.yml.

Ejja nagħtu ħarsa lejn kif jidhru l-interazzjonijiet mal-kontenituri meta tuża kmandi docker-compose. Jekk nimmaġinaw li għandna bżonn nidħlu fil-qoxra psql, allura l-kmandi korrispondenti jistgħu jidhru bħal dan:

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

L-istess kmand li ma jintużax biex tesegwixxi docker-composeU docker, jista' jidher bħal dan:

docker exec -it  edp_timescale_1 psql -Upostgres

Jekk jogħġbok innota li f'każijiet bħal dawn huwa dejjem preferibbli li tuża l-kmand docker, u l-kmand docker-compose, peress li dan jelimina l-ħtieġa li tiftakar l-ismijiet tal-kontenituri.

Iż-żewġ kmandi ta 'hawn fuq mhumiex daqshekk diffiċli. Imma jekk użajna "wrapper" fil-forma Makefile, li tagħtina interface fil-forma ta 'kmandi sempliċi u stess issejjaħ kmandi twal simili, allura l-istess riżultati jistgħu jinkisbu bħal dan:

make db-shell

Huwa pjuttost ovvju li l-użu Makefile jagħmel ix-xogħol mal-kontenituri ħafna aktar faċli!

Eżempju ta' ħidma

Ibbażat fuq id-dijagramma tal-proġett ta 'hawn fuq, aħna se noħolqu l-fajl li ġej 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

Biex timmaniġġja l-konfigurazzjoni ta 'Docker Compose u jinteraġixxu mal-kontenituri li tiddeskrivi, aħna se noħolqu l-fajl li ġej 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

Ħafna mill-kmandi deskritti hawn japplikaw għall-kontenituri kollha, iżda bl-użu tal-għażla c= jippermettilek tillimita l-ambitu ta 'kmand għal kontenitur wieħed.

Wara Makefile lest, tista' tużah bħal dan:

  • make help — ħruġ ta' lista tal-kmandi kollha disponibbli għal make.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Għajnuna dwar il-kmandi disponibbli

  • make build - assemblaġġ ta 'immaġni minn Dockerfile. Fl-eżempju tagħna użajna immaġini eżistenti timescale и ping. Iżda l-immaġni api irridu niġbru lokalment. Dan huwa eżattament dak li se jsir wara li tesegwixxi dan il-kmand.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Bini ta' kontenitur Docker

  • make start — it-tnedija tal-kontejners kollha. Biex tniedi kontenitur wieħed biss, tista 'tuża kmand simili make start c=timescale.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Tmexxi l-kontenitur tal-iskala taż-żmien

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Tmexxi kontenitur ping

  • make login-timescale — idħol fis-sessjoni bash tal-kontenitur timescale.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Running bash f'kontenitur ta' żmien

  • make db-shell - daħla għal psql f'kontenitur timescale biex tesegwixxi mistoqsijiet SQL kontra d-database.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Tmexxi psql f'kontenitur timescadb

  • make stop — kontenituri li jwaqqfu.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Waqfien ta' kontenitur ta' żmien

  • make down — il-waqfien u t-tneħħija tal-kontenituri. Biex tneħħi kontenitur speċifiku, tista 'tuża dan il-kmand li tispeċifika l-kontenitur mixtieq. Pereżempju - make down c=timescale jew make down c=api.

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles
Twaqqaf u tħassar il-kontenituri kollha

Riżultati ta '

Għalkemm Docker Compose jagħtina sett għani ta 'kmandi għall-ġestjoni tal-kontenituri, xi drabi dawn il-kmandi jistgħu jsiru twal u diffiċli biex tiftakarhom.

Metodu ta' użu Makefile għinna nistabbilixxu interazzjoni malajr u faċli ma 'kontenituri minn fajl docker-compose.yml. Jiġifieri, qed nitkellmu dwar dan li ġej:

  • L-iżviluppatur jinteraġixxi biss mal-kontenituri tal-proġett deskritti fi docker-compose.yml, ix-xogħol ma jiġix imfixkel minn kontenituri oħra li jaħdmu.
  • Fil-każ li ċertu kmand jintesa, tista 'tesegwixxi l-kmand make help u ikseb għajnuna dwar il-kmandi disponibbli.
  • M'għandekx għalfejn tiftakar listi twal ta' argumenti biex twettaq azzjonijiet bħal li tikseb l-aħħar entrati fil-log jew tidħol f'sistema. Per eżempju, kmand bħal docker-compose -f docker-compose.yml exec timescale psql -Upostgres jinbidel fi make db-shell.
  • fajl Makefile Tista' tadatta għaliha b'mod flessibbli hekk kif il-proġett jikber. Pereżempju, huwa faċli li żżid kmand biex toħloq backup tad-database jew twettaq kwalunkwe azzjoni oħra.
  • Jekk tim kbir ta 'żviluppaturi juża l-istess Makefile, dan jissimplifika l-kollaborazzjoni u jnaqqas l-iżbalji.

PS Fil-tagħna suq hemm immaġini Docker, li jistgħu jiġu installati fi klikk waħda. Tista' tiċċekkja l-operat tal-kontenituri fuq VPS. Il-klijenti l-ġodda kollha jingħataw 3 ijiem ta 'ttestjar mingħajr ħlas.

Għeżież qarrejja! Kif tawtomatizza Docker Compose?

Docker Compose: Is-Simplifikazzjoni tax-Xogħol Tiegħek billi tuża Makefiles

Sors: www.habr.com

Żid kumment