Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles

Chak kèk ane, endistri devlopman lojisyèl sibi yon chanjman paradigm. Youn nan fenomèn sa yo ka rekonèt kòm enterè k ap grandi nan konsèp mikwosèvis yo. Malgre ke mikwosèvis yo pa dernye teknoloji a, sèlman dènyèman gen popilarite li literalman monte.

Gwo sèvis monolitik yo kounye a ap ranplase pa mikwosèvis endepandan, otonòm. Yon mikwosèvis ka konsidere kòm yon aplikasyon ki sèvi yon sèl ak yon objektif trè espesifik. Pou egzanp, li ta ka yon DBMS relasyon, yon aplikasyon Express, yon sèvis Solr.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles

Jou sa yo, li difisil pou imajine devlope yon nouvo sistèm lojisyèl san yo pa itilize mikwosèvis. Ak sitiyasyon sa a, nan vire, mennen nou nan platfòm la Docker.

Koupre

Platfòm Koupre, nan devlopman ak deplwaman microservices, te vin prèske yon estanda endistri. Sou sit entènèt pwojè a ou ka konnen Docker se sèl platfòm kontenèr endepandan ki pèmèt òganizasyon yo kreye nenpòt aplikasyon san efò, epi tou distribye ak kouri yo nan nenpòt anviwònman - soti nan nwaj ibrid rive nan sistèm kwen.

Docker Konpoze

Технология Docker Konpoze fèt pou konfigirasyon aplikasyon pou plizyè veso. Yon pwojè Docker Compose ka genyen otan kontenè Docker jan kreyatè pwojè a bezwen.

Lè w ap travay ak Docker Compose, yo itilize yon dosye YAML pou konfigirasyon sèvis aplikasyon yo epi òganize entèraksyon yo youn ak lòt. Se poutèt sa, Docker Compose se yon zouti pou dekri ak kouri aplikasyon pou plizyè veso Docker.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
De resipyan kouri sou yon sistèm lame

GNU Fè

Pwogram make, se esansyèlman yon zouti pou otomatize bilding nan pwogram ak bibliyotèk soti nan kòd sous. An jeneral, nou ka di sa make aplike nan nenpòt pwosesis ki enplike nan egzekite kòmandman abitrè transfòme kèk materyèl antre nan kèk fòm pwodiksyon, nan kèk objektif. Nan ka nou an, kòmandman yo docker-compose pral transfòme an objektif abstrè (Telefòn objektif).

Pou di pwogram nan make sou sa nou vle soti nan li, nou bezwen yon dosye Makefile.

Nan nou an Makefile pral gen kòmandman regilye docker и docker-compose, ki fèt pou rezoud anpil pwoblèm. Savwa, nou ap pale sou rasanble yon veso, sou kòmanse li, sispann li, rekòmanse li, sou òganize itilizatè login nan veso a, sou travay ak mòso bwa veso, ak sou rezoud lòt pwoblèm ki sanble.

Ka itilizasyon tipik pou Docker Compose

Ann imajine yon aplikasyon entènèt regilye ki gen eleman sa yo:

  • baz done TimescaleDB (Postgres).
  • Aplikasyon Express.js.
  • Ping (jis yon veso, pa fè anyen espesyal).

Aplikasyon sa a pral bezwen 3 resipyan Docker ak yon dosye docker-compose, ki gen enstriksyon pou jere resipyan sa yo. Chak veso pral gen diferan touchpoints. Pou egzanp, ak yon veso timescale li pral posib pou travay apeprè menm jan yo travay ak baz done. Savwa, li pèmèt ou fè aksyon sa yo:

  • Antre nan koki Postgres la.
  • Enpòte ak ekspòtasyon tab yo.
  • kreyasyon pg_dump tab oswa baz done.

veso aplikasyon Express.js, expressjs, ka gen kapasite sa yo:

  • Bay done fre nan boutèy demi lit sistèm lan.
  • Konekte nan koki a pou egzekite sèten kòmandman.

Entèaksyon ak Containers

Yon fwa nou te etabli kominikasyon ant resipyan lè l sèvi avèk Docker Compose, li lè pou kominike ak resipyan sa yo. Nan sistèm Docker Compose gen yon lòd docker-compose, opsyon sipò -f, ki pèmèt ou transfere yon dosye nan sistèm nan docker-compose.yml.

Sèvi ak kapasite opsyon sa a, ou ka limite entèraksyon ak sistèm nan sèlman nan resipyan sa yo ki mansyone nan dosye a. docker-compose.yml.

Ann pran yon gade nan ki entèraksyon ak resipyan sanble lè w ap itilize kòmandman docker-compose. Si nou imajine ke nou bezwen konekte nan koki a psql, Lè sa a, kòmandman korespondan yo ta ka sanble sa a:

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

Kòmandman an menm ki pa itilize pou egzekite docker-composeAk docker, ta ka sanble sa a:

docker exec -it  edp_timescale_1 psql -Upostgres

Tanpri sonje ke nan ka sa yo li toujou pi preferab pou itilize kòmandman an docker, ak kòmandman an docker-compose, kòm sa elimine nesesite pou sonje non veso yo.

Tou de kòmandman ki anwo yo pa difisil. Men, si nou te itilize yon "wrapper" nan fòm lan Makefile, ki ta ba nou yon koòdone nan fòm kòmandman senp epi li ta menm rele kòmandman long ki sanble, Lè sa a, menm rezilta yo ta ka reyalize tankou sa a:

make db-shell

Li se byen evidan ke itilizasyon an Makefile fè travay ak resipyan pi fasil!

Travay egzanp

Dapre dyagram pwojè ki anwo a, nou pral kreye dosye sa a 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

Pou jere konfigirasyon Docker Compose ak kominike avèk resipyan li dekri yo, nou pral kreye dosye sa a 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

Pifò nan kòmandman ki dekri isit la aplike nan tout resipyan, men lè l sèvi avèk opsyon an c= pèmèt ou limite sijè ki abòde yon kòmandman nan yon sèl veso.

Apre Makefile pare, ou ka itilize li tankou sa a:

  • make help — bay yon lis tout kòmandman ki disponib pou make.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Èd sou kòmandman ki disponib

  • make build - rasanble yon imaj de Dockerfile. Nan egzanp nou an nou itilize imaj ki egziste deja timescale и ping. Men, imaj la api nou vle kolekte lokalman. Sa a se egzakteman sa yo pral fè apre egzekite lòd sa a.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Bati yon veso Docker

  • make start — lanse tout veso yo. Pou lanse yon sèl veso, ou ka itilize yon kòmand tankou make start c=timescale.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Kouri veso a tan

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Kouri yon veso ping

  • make login-timescale — konekte nan sesyon bash veso a timescale.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Kouri bach nan yon veso echèl

  • make db-shell - antre nan psql nan yon veso timescale pou egzekite demann SQL kont baz done a.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Kouri psql nan yon veso timescaledb

  • make stop - kanpe veso yo.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Sispann yon veso echèl

  • make down — kanpe epi retire veso yo. Pou retire yon veso espesifik, ou ka itilize kòmandman sa a ki espesifye veso a vle. Pa egzanp - make down c=timescale oswa make down c=api.

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles
Sispann ak efase tout resipyan yo

Rezilta

Malgre ke Docker Compose ban nou yon seri kòmandman rich pou jere resipyan, pafwa kòmandman sa yo ka vin long epi difisil pou sonje.

Metòd pou itilize Makefile te ede nou etabli entèraksyon rapid ak fasil ak resipyan ki soti nan yon dosye docker-compose.yml. Savwa, nou ap pale de bagay sa yo:

  • Pwomotè a reyaji sèlman ak resipyan pwojè yo dekri nan docker-compose.yml, travay pa entèfere ak lòt kontenè kouri.
  • Nan evènman an ke yo bliye yon lòd sèten, ou ka egzekite lòd la make help epi jwenn èd sou kòmandman ki disponib.
  • Ou pa bezwen sonje lis long agiman pou fè aksyon tankou jwenn dènye antre yo oswa antre nan yon sistèm. Pou egzanp, yon lòd tankou docker-compose -f docker-compose.yml exec timescale psql -Upostgres vire nan make db-shell.
  • dosye Makefile Ou ka adapte yo avèk li pandan pwojè a ap grandi. Pou egzanp, li fasil pou ajoute yon lòd pou kreye yon backup baz done oswa fè nenpòt lòt aksyon.
  • Si yon gwo ekip devlopè itilize menm bagay la Makefile, sa rasyonalize kolaborasyon ak diminye erè.

PS Nan nou an mache gen yon imaj Koupre, ki ka enstale nan yon sèl klike sou. Ou ka tcheke operasyon an nan resipyan nan VPS. Tout nouvo kliyan yo bay 3 jou tès gratis.

Chè lektè! Ki jan ou otomatize Docker Compose?

Docker Compose: Senplifye travay ou lè l sèvi avèk Makefiles

Sous: www.habr.com

Add nouvo kòmantè