Matag pipila ka tuig, ang industriya sa pagpalambo sa software moagi sa usa ka pagbag-o sa paradigm. Ang usa niini nga mga katingad-an mahimong mailhan ingon nga nagkadako nga interes sa konsepto sa microservices. Bisan kung ang mga microservice dili ang pinakabag-o nga teknolohiya, bag-o lang nga ang pagkapopular niini literal nga misaka.
Ang dagkong monolithic nga mga serbisyo gipulihan na karon sa independente, autonomous microservices. Ang usa ka microservice mahimong isipon nga usa ka aplikasyon nga nagsilbi sa usa ug piho nga katuyoan. Pananglitan, mahimo kini usa ka relational DBMS, usa ka Express nga aplikasyon, usa ka serbisyo sa Solr.
Karong mga adlawa, lisud mahanduraw ang paghimo og bag-ong sistema sa software nga wala gigamit ang mga microservice. Ug kini nga kahimtang, sa baylo, nagdala kanamo sa plataporma sa Docker.
Docker
Platform
Docker Compose
teknolohiya
Kung nagtrabaho kauban ang Docker Compose, usa ka YAML file ang gigamit aron ma-configure ang mga serbisyo sa aplikasyon ug maorganisar ang ilang interaksyon sa usag usa. Busa ang Docker Compose usa ka himan alang sa paghulagway ug pagpadagan sa multi-container nga mga aplikasyon sa Docker.
Duha ka sudlanan nga nagdagan sa usa ka host system
GNU Himua
Ang programa make
, usa ka himan alang sa pag-automate sa pagtukod sa mga programa ug mga librarya gikan sa source code. Sa kinatibuk-an, makaingon kita niana make
magamit sa bisan unsa nga proseso nga naglakip sa pagpatuman sa arbitraryong mga sugo aron sa pagbag-o sa pipila ka mga materyal nga input ngadto sa pipila ka porma sa output, ngadto sa pipila ka tumong. Sa among kaso, ang mga mando docker-compose
mausab ngadto sa abstract nga mga tumong (
Aron isulti ang programa make
bahin sa kung unsa ang gusto namon gikan niini, kinahanglan namon ang usa ka file Makefile
.
Sa among Makefile
maglangkob sa regular nga mga sugo docker
ΠΈ docker-compose
, nga gidisenyo sa pagsulbad sa daghang mga problema. Sa ato pa, naghisgot kami bahin sa pag-assemble sa usa ka sudlanan, bahin sa pagsugod niini, paghunong niini, pag-restart niini, bahin sa pag-organisar sa pag-login sa gumagamit sa sulud, bahin sa pagtrabaho sa mga log sa sulud, ug bahin sa pagsulbad sa uban pang parehas nga mga problema.
Kasagaran nga Mga Kaso sa Paggamit alang sa Docker Compose
Hunahunaa ang usa ka regular nga aplikasyon sa web nga adunay mga musunud nga sangkap:
- Database sa TimescaleDB (Postgres).
- Express.js nga aplikasyon.
- Ping (usa lang ka sudlanan, walaβy gihimo nga espesyal).
Kini nga aplikasyon nanginahanglan 3 nga mga sudlanan sa Docker ug usa ka file docker-compose
, nga adunay mga panudlo alang sa pagdumala niini nga mga sudlanan. Ang matag sudlanan adunay lain-laing mga touchpoints. Pananglitan, uban sa usa ka sudlanan timescale
kini mahimong posible sa pagtrabaho sa gibana-bana nga sama nga paagi sa ilang pagtrabaho uban sa mga database. Nga mao, kini nagtugot kaninyo sa pagbuhat sa mosunod nga mga aksyon:
- Pag-log in sa Postgres shell.
- Import ug export sa mga lamesa.
- paglalang
pg_dump
mga lamesa o mga database.
Express.js nga sudlanan sa aplikasyon, expressjs
, mahimong adunay mosunod nga mga kapabilidad:
- Paghatag bag-ong datos gikan sa log sa sistema.
- Pag-login sa kabhang aron ipatuman ang pipila ka mga sugo.
Pakig-uban sa mga Kontainer
Kung na-set up na namo ang komunikasyon tali sa mga sudlanan gamit ang Docker Compose, panahon na nga makigkomunikar sa mga sudlanan. Sulod sa sistema sa Docker Compose adunay usa ka sugo docker-compose
, pagsuporta nga kapilian -f
, nga nagtugot kanimo sa pagbalhin sa usa ka file sa sistema docker-compose.yml
.
Gamit ang mga kapabilidad niini nga kapilian, mahimo nimong limitahan ang interaksyon sa sistema sa mga sudlanan nga gihisgutan sa file. docker-compose.yml
.
Atong tan-awon kung unsa ang hitsura sa mga interaksyon sa mga sudlanan kung mogamit mga mando docker-compose
. Kung atong hunahunaon nga kita kinahanglan nga mag-log in sa kabhang psql
, unya ang katugbang nga mga sugo mahimong ingon niini:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Ang sama nga sugo nga wala gigamit sa pagpatuman docker-compose
ug docker
, mahimong ingon niini:
docker exec -it edp_timescale_1 psql -Upostgres
Palihug timan-i nga sa maong mga kaso mas maayo nga gamiton ang sugo docker
, ug ang sugo docker-compose
, tungod kay kini nagwagtang sa panginahanglan sa paghinumdom sa mga ngalan sa sudlanan.
Ang duha sa mga sugo sa ibabaw dili kaayo lisud. Apan kung gigamit namon ang usa ka "wrapper" sa porma Makefile
, nga maghatag kanato ug interface sa porma sa yanong mga sugo ug motawag mismo sa susamang tag-as nga mga sugo, unya ang samang resulta mahimong makab-ot sama niini:
make db-shell
Klaro kaayo nga ang paggamit Makefile
naghimo sa pagtrabaho uban sa mga sudlanan nga mas sayon!
Pananglitan sa pagtrabaho
Base sa diagram sa proyekto sa ibabaw, maghimo kami sa mosunod nga file 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
Aron madumala ang configuration sa Docker Compose ug makig-uban sa mga sudlanan nga gihulagway niini, maghimo kami sa mosunod nga file 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
Kadaghanan sa mga sugo nga gihulagway dinhi magamit sa tanan nga mga sudlanan, apan gamit ang kapilian c=
nagtugot kanimo nga limitahan ang sakup sa usa ka sugo sa usa ka sudlanan.
human sa Makefile
andam, mahimo nimo kini gamiton sama niini:
make help
β pag-isyu sa usa ka lista sa tanan nga mga sugo nga magamit alang samake
.
Tabang sa magamit nga mga sugo
make build
- pag-assemble sa usa ka imahe gikan saDockerfile
. Sa among panig-ingnan gigamit namon ang naglungtad nga mga imahetimescale
ΠΈping
. Apan ang imaheapi
gusto namon nga mangolekta sa lokal. Mao gyud kini ang buhaton pagkahuman ipatuman kini nga mando.
Paghimo usa ka sudlanan sa Docker
make start
- paglansad sa tanan nga mga sudlanan. Sa paglansad lang sa usa ka sudlanan, mahimo nimong gamiton ang usa ka command sama samake start c=timescale
.
Pagpadagan sa timescale nga sudlanan
Pagpadagan sa usa ka sudlanan sa ping
make login-timescale
β login sa bash session sa sudlanantimescale
.
Pagpadagan sa bash sa usa ka sudlanan sa timescale
make db-shell
- pagsulod sapsql
sa usa ka sudlanantimescale
aron ipatuman ang mga pangutana sa SQL batok sa database.
Pagdagan sa psql sa usa ka sudlanan nga timescaledb
make stop
- paghunong sa mga sudlanan.
Paghunong sa usa ka sudlanan sa timescale
make down
- paghunong ug pagtangtang sa mga sudlanan. Aron makuha ang usa ka piho nga sudlanan, mahimo nimong gamiton kini nga mando nga nagtino sa gusto nga sudlanan. Pananglitan -make down c=timescale
omake down c=api
.
Paghunong ug pagtangtang sa tanan nga mga sudlanan
Mga resulta
Bisan tuod ang Docker Compose naghatag kanato og daghang hugpong sa mga sugo alang sa pagdumala sa mga sudlanan, usahay kini nga mga sugo mahimong taas ug lisud hinumdoman.
Pamaagi sa paggamit Makefile
nakatabang kanamo sa pag-establisar og dali ug sayon ββnga interaksyon sa mga sudlanan gikan sa usa ka file docker-compose.yml
. Sa ato pa, naghisgot kami bahin sa mosunod:
- Ang developer nakig-interact lamang sa mga sudlanan sa proyekto nga gihulagway sa
docker-compose.yml
, ang trabaho dili mabalda sa uban nga nagdagan nga mga sudlanan. - Sa panghitabo nga ang usa ka sugo nakalimtan, mahimo nimong ipatuman ang sugo
make help
ug pagkuha og tabang sa mga magamit nga mga sugo. - Dili nimo kinahanglan nga hinumdoman ang taas nga mga lista sa mga argumento aron mahimo ang mga aksyon sama sa pagkuha sa labing bag-o nga mga entry sa log o pag-log in sa usa ka sistema. Pananglitan, usa ka sugo sama sa
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
mahimong usamake db-shell
. - file
Makefile
Mahimo nimo nga mapahiangay ang pagpahiangay niini samtang ang proyekto motubo. Pananglitan, dali ra ang pagdugang usa ka mando aron maghimo usa ka backup sa database o maghimo bisan unsang ubang aksyon. - Kung ang usa ka dako nga grupo sa mga developer naggamit sa parehas
Makefile
, kini nagpahapsay sa kolaborasyon ug nagpamenos sa mga sayop.
PS Sa among
Minahal nga magbabasa! Giunsa nimo pag-automate ang Docker Compose?
Source: www.habr.com