Txhua txhua ob peb xyoos, kev lag luam kev tsim kho software tau dhau los ua qhov kev hloov pauv. Ib qho ntawm cov xwm txheej no tuaj yeem lees paub tias yog qhov kev txaus siab loj hlob hauv lub tswv yim ntawm microservices. Txawm hais tias microservices tsis yog cov thev naus laus zis tshiab tshaj plaws, tsuas yog tsis ntev los no tau muaj nws cov koob npe nrov tshaj plaws.
Cov kev pabcuam loj monolithic tam sim no tau hloov los ntawm kev ywj pheej, kev tswj hwm microservices. Lub microservice tuaj yeem xav tias yog ib daim ntawv thov uas ua haujlwm rau tib lub hom phiaj thiab tshwj xeeb heev. Piv txwv li, nws tuaj yeem yog DBMS kev sib raug zoo, daim ntawv thov Express, kev pabcuam Solr.
Niaj hnub no, nws nyuaj rau xav txog kev tsim kho software tshiab yam tsis siv microservices. Thiab qhov xwm txheej no, tig mus, coj peb mus rau Docker platform.
docker
Platform
Docker Compose
Tshuab
Thaum ua haujlwm nrog Docker Compose, cov ntaub ntawv YAML yog siv los teeb tsa cov kev pabcuam hauv daim ntawv thov thiab npaj lawv cov kev sib raug zoo nrog ib leeg. Docker Compose yog li ntawd ib qho cuab yeej los piav qhia thiab ua haujlwm ntau lub thawv Docker daim ntawv thov.
Ob lub thawv khiav ntawm ib lub host system
GNU Ua
Qhov kev pab cuam make
, yog qhov tseem ceeb ntawm cov cuab yeej rau automating lub tsev ntawm cov kev pab cuam thiab cov tsev qiv ntawv los ntawm qhov chaws. Feem ntau, peb tuaj yeem hais qhov ntawd make
siv rau txhua tus txheej txheem uas suav nrog kev ua raws li cov lus txib kom hloov qee cov ntaub ntawv nkag mus rau qee daim ntawv tso tawm, rau qee lub hom phiaj. Hauv peb qhov xwm txheej, cov lus txib docker-compose
yuav hloov mus rau hauv lub hom phiaj abstract (
Qhia rau qhov program make
txog yam peb xav tau los ntawm nws, peb xav tau ib daim ntawv Makefile
.
Ntawm peb Makefile
yuav muaj cov lus txib tsis tu ncua docker
ΠΈ docker-compose
, uas yog tsim los daws ntau yam teeb meem. Namely, peb tab tom tham txog kev sib sau ua ke ib lub thawv, txog kev pib, nres nws, rov pib dua, txog kev teeb tsa cov neeg siv nkag mus rau lub thawv, txog kev ua haujlwm nrog cov thawv ntim, thiab txog kev daws teeb meem lwm yam zoo sib xws.
Hom Kev Siv Case rau Docker Compose
Cia peb xav txog lub vev xaib tsis tu ncua uas muaj cov hauv qab no:
- TimescaleDB database (Postgres).
- Daim ntawv thov Express.js.
- Ping (tsuas yog lub thawv, tsis ua dab tsi tshwj xeeb).
Daim ntawv thov no yuav xav tau 3 Docker ntim thiab cov ntaub ntawv docker-compose
, uas muaj cov lus qhia rau kev tswj cov ntim khoom no. Txhua lub thawv yuav muaj qhov sib txawv. Piv txwv li, nrog lub thawv timescale
nws yuav muaj peev xwm ua hauj lwm kwv yees li ib yam li lawv ua hauj lwm nrog databases. Namely, nws tso cai rau koj ua cov haujlwm hauv qab no:
- Nkag mus rau hauv lub plhaub Postgres.
- Ntshuam thiab export ntawm rooj.
- creation
pg_dump
rooj los yog databases.
Express.js daim ntawv thov ntim, expressjs
, tej zaum yuav muaj peev xwm hauv qab no:
- Muab cov ntaub ntawv tshiab los ntawm qhov system log.
- Nkag mus rau lub plhaub kom ua tiav qee cov lus txib.
Kev sib tham nrog Containers
Thaum peb tau teeb tsa kev sib txuas lus ntawm cov ntim khoom siv Docker Compose, nws yog lub sijhawm los sib txuas lus nrog cov ntim khoom. Hauv Docker Compose system muaj ib qho lus txib docker-compose
, txhawb kev xaiv -f
, uas tso cai rau koj hloov cov ntaub ntawv mus rau qhov system docker-compose.yml
.
Siv lub peev xwm ntawm qhov kev xaiv no, koj tuaj yeem txwv kev cuam tshuam nrog lub kaw lus tsuas yog rau cov thawv uas tau hais hauv cov ntaub ntawv docker-compose.yml
.
Cia peb saib seb qhov kev sib cuam tshuam nrog cov thawv zoo li cas thaum siv cov lus txib docker-compose
. Yog tias peb xav tias peb yuav tsum tau nkag mus rau hauv lub plhaub psql
, ces cov lus txib yuav zoo li no:
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
Tib lo lus txib uas tsis siv los ua docker-compose
thiab docker
, tej zaum yuav zoo li no:
docker exec -it edp_timescale_1 psql -Upostgres
Thov nco ntsoov tias nyob rau hauv cov ntaub ntawv no nws yog ib txwm nyiam siv cov lus txib docker
, thiab cov lus txib docker-compose
, raws li qhov no tshem tawm qhov xav tau kom nco qab cov npe ntim.
Ob qho ntawm cov lus txib saum toj no tsis yog qhov nyuaj. Tab sis yog tias peb siv "wrapper" hauv daim ntawv Makefile
, uas yuav muab rau peb ib tug interface nyob rau hauv daim ntawv ntawm cov lus txib yooj yim thiab nws tus kheej yuav hu zoo xws li cov lus txib ntev, ces tib cov txiaj ntsig tuaj yeem ua tiav zoo li no:
make db-shell
Nws yog qhov pom tseeb tias kev siv Makefile
ua haujlwm nrog cov ntim khoom yooj yim dua!
Piv txwv ua haujlwm
Raws li cov duab kos duab saum toj no, peb yuav tsim cov ntaub ntawv hauv qab no 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
Txhawm rau tswj hwm Docker Compose configuration thiab cuam tshuam nrog cov thawv uas nws piav qhia, peb yuav tsim cov ntaub ntawv hauv qab no 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
Feem ntau ntawm cov lus txib tau piav qhia ntawm no siv rau txhua lub thawv, tab sis siv qhov kev xaiv c=
tso cai rau koj txwv qhov kev txwv ntawm ib qho kev hais kom ua rau ib lub thawv.
Tom qab Makefile
npaj txhij, koj tuaj yeem siv nws zoo li no:
make help
- tshaj tawm cov npe ntawm tag nrho cov lus txib muaj raumake
.
Pab ntawm cov lus txib muaj
make build
- assembling ib daim duab los ntawmDockerfile
. Hauv peb qhov piv txwv peb siv cov duab uas twb muaj lawmtimescale
ΠΈping
. Tab sis daim duabapi
peb xav sau hauv zos. Qhov no yog qhov yuav ua tiav tom qab ua tiav cov lus txib no.
Tsim ib lub thawv Docker
make start
- tso tawm tag nrho cov ntim. Txhawm rau tso ib lub thawv xwb, koj tuaj yeem siv cov lus txib zoo limake start c=timescale
.
Khiav lub sijhawm ntsuas lub thawv
Khiav lub thawv ping
make login-timescale
- nkag mus rau qhov kev sib tham bash ntawm lub thawvtimescale
.
Kev khiav bash nyob rau hauv lub thawv ntim sijhawm
make db-shell
- nkag muspsql
hauv ib lub thawvtimescale
los ua SQL queries tawm tsam database.
Khiav psql hauv lub thawv timescaledb
make stop
- nres ntim.
Nres lub thawv ntim sijhawm
make down
- nres thiab tshem cov thawv. Txhawm rau tshem tawm ib lub thawv tshwj xeeb, koj tuaj yeem siv cov lus txib no qhia txog lub thawv uas xav tau. Piv txwv li -make down c=timescale
los yogmake down c=api
.
Nres thiab tshem tawm tag nrho cov ntim khoom
Cov txiaj ntsim tau los
Txawm hais tias Docker Compose muab cov lus txib nplua nuj rau kev tswj cov thawv, qee zaum cov lus txib no tuaj yeem ua ntev thiab nyuaj rau nco ntsoov.
Txoj kev siv Makefile
pab peb tsim kom muaj kev sib cuam tshuam sai thiab yooj yim nrog ntim ntawm cov ntaub ntawv docker-compose.yml
. Namely, peb tab tom tham txog cov hauv qab no:
- Tus tsim tawm tsuas cuam tshuam nrog cov thawv ntim khoom tau piav qhia hauv
docker-compose.yml
, kev ua haujlwm tsis cuam tshuam nrog lwm cov ntim khoom. - Nyob rau hauv cov kev tshwm sim uas ib tug tej yam hais kom ua tsis nco qab lawm, koj muaj peev xwm ua kom tiav cov lus txib
make help
thiab tau txais kev pab ntawm cov lus txib uas muaj. - Koj tsis tas yuav nco ntsoov cov npe ntev ntawm cov lus sib cav los ua cov haujlwm xws li tau txais cov ntawv teev npe tshiab lossis nkag mus rau hauv lub kaw lus. Piv txwv li, ib qho lus txib zoo li
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
dhau musmake db-shell
. - cov ntaub ntawv
Makefile
Koj tuaj yeem hloov kho kom haum rau nws thaum qhov project loj tuaj. Piv txwv li, nws yog ib qho yooj yim mus ntxiv ib qho lus txib los tsim cov ntaub ntawv thaub qab lossis ua lwm yam haujlwm. - Yog ib pab neeg loj ntawm cov neeg tsim khoom siv tib yam
Makefile
, qhov no txhawb kev sib koom tes thiab txo qhov yuam kev.
PS Ntawm peb
Nyob zoo nyeem! Yuav ua li cas koj automate Docker Compose?
Tau qhov twg los: www.hab.com