Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles

Kila baada ya miaka michache, tasnia ya ukuzaji wa programu hupitia mabadiliko ya dhana. Moja ya matukio haya yanaweza kutambuliwa kama nia inayokua katika dhana ya huduma ndogo ndogo. Ingawa huduma ndogo ndogo sio teknolojia mpya zaidi, ni hivi majuzi tu umaarufu wake umepanda sana.

Huduma kubwa za monolithic sasa zinabadilishwa na huduma ndogo za kujitegemea, zinazojitegemea. Huduma ndogo inaweza kuzingatiwa kama programu ambayo hutumikia kusudi moja na maalum sana. Kwa mfano, inaweza kuwa DBMS ya uhusiano, programu ya Express, huduma ya Solr.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles

Siku hizi, ni ngumu kufikiria kuunda mfumo mpya wa programu bila kutumia huduma ndogo. Na hali hii, kwa upande wake, inatuongoza kwenye jukwaa la Docker.

Docker

Jukwaa Docker, katika ukuzaji na usambazaji wa huduma ndogo, imekuwa karibu kiwango cha tasnia. Kwenye wavuti ya mradi unaweza kujua kuwa Docker ndio jukwaa huru la uwekaji vyombo ambalo huruhusu mashirika kuunda programu yoyote bila shida, na pia kusambaza na kuziendesha katika mazingira yoyote - kutoka kwa mawingu mseto hadi mifumo ya ukingo.

Docker Kuandika

ВСхнология Docker Kuandika iliyoundwa kwa ajili ya kusanidi programu za vyombo vingi. Mradi wa Kutunga Docker unaweza kuwa na vyombo vingi vya Docker kama vile muundaji wa mradi anavyohitaji.

Unapofanya kazi na Docker Compose, faili ya YAML hutumiwa kusanidi huduma za programu na kupanga mwingiliano wao. Kwa hivyo, Docker Compose ni zana ya kuelezea na kuendesha programu za Docker zenye vyombo vingi.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Vyombo viwili vinavyoendesha kwenye mfumo wa mwenyeji

Tengeneza GNU

Programu ya make, kimsingi ni zana ya kugeuza kiotomatiki ujenzi wa programu na maktaba kutoka kwa msimbo wa chanzo. Kwa ujumla, tunaweza kusema hivyo make inatumika kwa mchakato wowote unaojumuisha kutekeleza amri kiholela ili kubadilisha nyenzo za ingizo kuwa aina fulani ya pato, hadi lengo fulani. Kwa upande wetu, amri docker-compose itabadilishwa kuwa malengo ya kufikirika (Malengo ya simu).

Ili kuwaambia programu make kuhusu kile tunachotaka kutoka kwake, tunahitaji faili Makefile.

Katika yetu Makefile itakuwa na amri za kawaida docker ΠΈ docker-compose, ambayo imeundwa kutatua matatizo mengi. Yaani, tunazungumza juu ya kukusanya kontena, juu ya kuianzisha, kuisimamisha, kuianzisha tena, juu ya kupanga kuingia kwa mtumiaji kwenye kontena, juu ya kufanya kazi na magogo ya chombo, na juu ya kutatua shida zingine zinazofanana.

Kesi za Kawaida za Utumiaji kwa Utunzi wa Docker

Wacha tufikirie programu ya kawaida ya wavuti ambayo ina vifaa vifuatavyo:

  • Hifadhidata ya TimescaleDB (Postgres).
  • Programu ya Express.js.
  • Ping (chombo tu, haifanyi chochote maalum).

Programu tumizi itahitaji vyombo 3 vya Docker na faili docker-compose, ambayo ina maelekezo ya kusimamia vyombo hivi. Kila chombo kitakuwa na sehemu tofauti za kugusa. Kwa mfano, na chombo timescale itawezekana kufanya kazi takriban sawa na wanavyofanya kazi na hifadhidata. Yaani, hukuruhusu kufanya vitendo vifuatavyo:

  • Kuingia kwenye ganda la Postgres.
  • Kuagiza na kuuza nje ya meza.
  • viumbe pg_dump meza au hifadhidata.

Chombo cha maombi cha Express.js, expressjs, inaweza kuwa na uwezo ufuatao:

  • Inatoa data mpya kutoka kwa kumbukumbu ya mfumo.
  • Ingia kwenye ganda ili kutekeleza amri fulani.

Kuingiliana na Kontena

Mara tu tumeweka mawasiliano kati ya vyombo kwa kutumia Docker Compose, ni wakati wa kuwasiliana na vyombo hivyo. Ndani ya mfumo wa Kutunga Docker kuna amri docker-compose, chaguo la kuunga mkono -f, ambayo inakuwezesha kuhamisha faili kwenye mfumo docker-compose.yml.

Kwa kutumia uwezo wa chaguo hili, unaweza kupunguza mwingiliano na mfumo kwa vyombo ambavyo vimetajwa kwenye faili. docker-compose.yml.

Wacha tuangalie jinsi mwingiliano na vyombo unavyoonekana wakati wa kutumia amri docker-compose. Ikiwa tunafikiria kwamba tunahitaji kuingia kwenye ganda psql, basi amri zinazolingana zinaweza kuonekana kama hii:

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

Amri sawa ambayo haitumiki kutekeleza docker-composeNa docker, inaweza kuonekana kama hii:

docker exec -it  edp_timescale_1 psql -Upostgres

Tafadhali kumbuka kuwa katika hali kama hizi ni vyema kutumia amri docker, na amri docker-compose, kwani hii inaondoa hitaji la kukumbuka majina ya vyombo.

Amri zote mbili hapo juu sio ngumu sana. Lakini ikiwa tulitumia "wrapper" katika fomu Makefile, ambayo ingetupa kiolesura katika mfumo wa amri rahisi na yenyewe ingeita amri ndefu sawa, basi matokeo sawa yanaweza kupatikana kama hii:

make db-shell

Ni dhahiri kabisa kwamba matumizi Makefile hufanya kazi na vyombo kuwa rahisi zaidi!

Mfano wa kufanya kazi

Kulingana na mchoro wa mradi hapo juu, tutaunda faili ifuatayo 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

Ili kudhibiti usanidi wa Kutunga Docker na kuingiliana na vyombo inavyoelezea, tutaunda faili ifuatayo 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

Amri nyingi zilizoelezewa hapa zinatumika kwa vyombo vyote, lakini kwa kutumia chaguo c= hukuruhusu kuweka kikomo cha wigo wa amri kwenye kontena moja.

Baada Makefile tayari, unaweza kuitumia kama hii:

  • make help β€” kutoa orodha ya amri zote zinazopatikana make.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Msaada juu ya amri zinazopatikana

  • make build - kukusanyika picha kutoka Dockerfile. Katika mfano wetu tulitumia picha zilizopo timescale ΠΈ ping. Lakini picha api tunataka kukusanya ndani. Hiki ndicho hasa kitafanywa baada ya kutekeleza amri hii.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kuunda chombo cha Docker

  • make start - kuzindua makontena yote. Ili kuzindua chombo kimoja tu, unaweza kutumia amri kama make start c=timescale.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kuendesha chombo cha saa

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kuendesha chombo cha ping

  • make login-timescale - ingia kwenye kikao cha bash cha chombo timescale.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kuendesha bash kwenye chombo cha wakati

  • make db-shell - mlango wa psql kwenye chombo timescale kutekeleza maswali ya SQL dhidi ya hifadhidata.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Inaendesha psql kwenye chombo cha timescaledb

  • make stop - kusimamisha vyombo.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kusimamisha chombo cha kipimo cha wakati

  • make down β€” kusimamisha na kuondoa vyombo. Ili kuondoa chombo maalum, unaweza kutumia amri hii kubainisha chombo unachotaka. Kwa mfano - make down c=timescale au make down c=api.

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles
Kusimamisha na kufuta vyombo vyote

Matokeo ya

Ingawa Docker Compose hutupatia seti nyingi za amri za kudhibiti vyombo, wakati mwingine amri hizi zinaweza kuwa ndefu na ngumu kukumbuka.

Mbinu ya matumizi Makefile ilitusaidia kuanzisha mwingiliano wa haraka na rahisi na vyombo kutoka kwa faili docker-compose.yml. Yaani, tunazungumza juu ya yafuatayo:

  • Msanidi programu huingiliana tu na kontena za mradi zilizoelezewa ndani docker-compose.yml, kazi haiingiliwi na vyombo vingine vinavyoendesha.
  • Katika tukio ambalo amri fulani imesahau, unaweza kutekeleza amri make help na upate usaidizi juu ya amri zinazopatikana.
  • Sio lazima kukumbuka orodha ndefu za hoja ili kutekeleza vitendo kama vile kupata maingizo ya hivi punde ya kumbukumbu au kuingia kwenye mfumo. Kwa mfano, amri kama docker-compose -f docker-compose.yml exec timescale psql -Upostgres anarudi katika make db-shell.
  • file Makefile Unaweza kukabiliana nayo kwa urahisi kadri mradi unavyokua. Kwa mfano, ni rahisi kuongeza amri ili kuunda chelezo ya hifadhidata au kufanya kitendo kingine chochote.
  • Ikiwa timu kubwa ya watengenezaji hutumia sawa Makefile, hii hurahisisha ushirikiano na kupunguza makosa.

PS Katika yetu sokoni kuna picha Docker, ambayo inaweza kusakinishwa kwa mbofyo mmoja. Unaweza kuangalia uendeshaji wa vyombo katika VPS. Wateja wote wapya wanapewa siku 3 za majaribio bila malipo.

Ndugu wasomaji! Unabadilishaje Utunzi wa Docker?

Utunzi wa Docker: Kurahisisha Kazi Yako Kwa Kutumia Makefiles

Chanzo: mapenzi.com

Kuongeza maoni