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.
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 Kuandika
Π’Π΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ
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.
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 (
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-compose
Na 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 zinazopatikanamake
.
Msaada juu ya amri zinazopatikana
make build
- kukusanyika picha kutokaDockerfile
. Katika mfano wetu tulitumia picha zilizopotimescale
ΠΈping
. Lakini pichaapi
tunataka kukusanya ndani. Hiki ndicho hasa kitafanywa baada ya kutekeleza amri hii.
Kuunda chombo cha Docker
make start
- kuzindua makontena yote. Ili kuzindua chombo kimoja tu, unaweza kutumia amri kamamake start c=timescale
.
Kuendesha chombo cha saa
Kuendesha chombo cha ping
make login-timescale
- ingia kwenye kikao cha bash cha chombotimescale
.
Kuendesha bash kwenye chombo cha wakati
make db-shell
- mlango wapsql
kwenye chombotimescale
kutekeleza maswali ya SQL dhidi ya hifadhidata.
Inaendesha psql kwenye chombo cha timescaledb
make stop
- kusimamisha vyombo.
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
aumake down c=api
.
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 katikamake 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
Ndugu wasomaji! Unabadilishaje Utunzi wa Docker?
Chanzo: mapenzi.com