αααααΆααααΈαααΈααααΆααααα α§ααααΆα ααααα’αα·αααααααααααα·ααΈααΆαααααααΆααααΆαααααΆααααααΌαααααΌα ααΆαα»ααΌααα½ααααα»αα ααααααΆαα»ααΌαααΆαααααα’αΆα ααααΌαααΆαααα½αααααΆααααΆααΆα αααΆααα’αΆααααααααααααα»αααΎαα‘αΎααα αααα»ααααα·αααααααΆααααααΈααααΌα ααααΈαααα·αααααααΆααΈααααΌαα·ααααααΆαα αα αααα·ααααΆααααΈαααα»αααααα ααααΎαααααααΈααααααα ααααααααΆαααα·αααΆαααααααΆααΆαααΎαα‘αΎααααΆαααααΆααα
ααααΆ monolithic ααααα₯α‘αΌααααααααΌαααΆααααα½ααααααααΆααααααΈααααΌααααααα―αααΆαααα ααααΆααΈααααΌα’αΆα ααααΌαααΆααααα·αααΆααΆαααααα·ααΈααααααααΎααααααααααα½α αα·αααΆααααΆαααααα»αα α§ααΆα ααα ααΆα’αΆα ααΆ DBMS ααααΆαααααα αααααα·ααΈ Express ααααΆ Solr α
ααααααααααα ααΆαα·ααΆααααα»αααΆααααααααΆααΉααααααΎαααααααααααΌα αααααααααΈααααα·αααααΎααααΆααΈααααΌα α αΎαααααΆαααΆααααααΆαααΎααα
ααΆαααααα·ααΆ Docker α
Dockers
αααα·ααΆ
ααααα Docker
αα
αα
αααα·ααααΆ
αα αααααααΎααΆαααΆαα½α Docker Compose α―αααΆα YAML ααααΌαααΆαααααΎααΎααααΈααααααα ααΆααααααααααααΆαααααααααα·ααΈ αα·ααααα αα’αααααααααααααα½αααααΆαα½αααααΆα ααΌα αααα Docker Compose ααΊααΆα§ααααααααααΆαααα·αααααΆ αα·αααααΎαααΆααααααα·ααΈ Docker α αααΎααα»αααΊαααα
αα»αααΈαααααΎαααΆαααΎαααααααααααΆαααΈα
αααα»αα αα»α GNU Make
αααααα·ααΈααα make
ααΆα§αααααααααΆαααααααΆαααααααΎααααααα·ααΈ αα·ααααααΆααααααααααααααααααα·ααΈαααααααΌαα ααΆααΌαα
ααΎαα’αΆα
αα·ααΆαααΆαα make
α’αα»ααααα
ααααααααΎαααΆαααΆαα½ααααααΆαααααααααΉαααΆαααααα·ααααα·ααΆααααααααΆααΆαα’αααΎα
α·ααα ααΎααααΈααααααααααααΆαααααα
αΌααα½αα
ααα½ααα
ααΆαααααααααααααα½αα
ααα½α αα
ααΆααααααα
αα½αα
ααα½αα αααα»αααααΈααααααΎαααΆααααααααΆ docker-compose
ααΉαααααΌαααΆαααααααααα
ααΆααααα
α’ααΌααΈ (
ααΎααααΈααααΆαααααααα·ααΈ make
α’αααΈα’αααΈαααααΎαα
ααααΆαααΈααΆ ααΎαααααΌαααΆαα―αααΆα Makefile
.
αα
αααα»αααααααΎα Makefile
ααΉαααΆαααΆααααααααΆααααααΆα docker
ΠΈ docker-compose
αααααααΌαααΆααα
ααΆα‘αΎαααΎααααΈαααααααΆααααα αΆααΆα
αααΎαα ααΆααααααΆ ααΎααααα»ααα·ααΆαα’αααΈααΆααααα»ααα»αααΊααα α’αααΈααΆαα
αΆααααααΎαααΆ ααααααααΆ α
αΆααααααΎαααΆα‘αΎααα·α α’αααΈααΆααααα
αααΆαα
αΌαααααα’αααααααΎααααΆαααα
ααΆαααα»αααΊααα α’αααΈααΆαααααΎααΆαααΆαα½ααααααα ααα»αα»αααΊααα αα·αα’αααΈααΆααααααααΆααααα αΆααααααααααΆααααααααα
ααααΈααααΎααααΆααααααααΆαααααΆαα Docker Compose
ααααααααααΎααααααα·ααΈααα αααααααααααΆαααααΆαααΆαα»ααααααΌα ααΆααααααα
- ααΌαααααΆααα·αααααα TimescaleDB (Postgres) α
- αααααα·ααΈ Express.js α
- ααΈα (ααααΆααααααΆαα»ααα½ααα·αααααΎα’αααΈαα·ααααα) α
αααααα·ααΈαααααΉαααααΌαααΆααα»α Docker α
ααα½α 3 αα·αα―αααΆααα½αα docker-compose
αααααΆαααΆαααααΆααααααΆααααΆαααααααααααα»αααΆαααααα αα»αααΈαα½ααααΉαααΆαα
ααα»α
ααααα»ααααααΆα α§ααΆα αααααΆαα½ααα»ααα½αα timescale
ααΆβααΉαβα’αΆα
βααααΎβααΆαβαααα ααβααΌα
βααααΆβααΉαβααΆαβααααΎβααΆαβααΆαα½αβααΌαααααΆαβαα·ααααααα αααααΊααΆα’αα»ααααΆαα±ααα’αααα’αα»αααααααααααΆαααΌα
ααΆααααααα
- ααΆαα αΌααα αααα»αααα Postgres α
- ααΆαα αΌααα·αααΆαα ααααΆααΆαα
- ααΆααααααΎα
pg_dump
ααΆααΆα α¬ααΌαααααΆααα·ααααααα
αα»ααααααα·ααΈ Express.js, expressjs
α’αΆα
ααΆααααααααΆαααΌα
ααΆααααααα
- ααΆαααααααα·ααααααααααΈααΈαααααα ααα»ααααααααα
- α αΌααα ααα ααΎααααΈααααα·ααααα·ααΆααααααααΆααΆααααΆααα
α’ααααααααααΆαα½ααα»αααΊααα
αα
ααααααααΎααααα
αααααΆαααααααααΆααα»αααΊααααααααααΎ Docker Compose ααΆαααααααααααααΌαααΆααααααΆαα½ααα»αααΊαααααΆαααααα αα
αααα»ααααααααα Docker Compose ααΆαααΆααααααααΆαα½αα docker-compose
, αααααΎαααΆαααα -f
αααα’αα»ααααΆαα±ααα’ααααααααα―αααΆααα
αααααααα docker-compose.yml
.
αααααααΎαααααααΆααααααααΎαααα α’αααα’αΆα
αααααα’ααααααααααΆαα½αααααααααα
αααααααα»αααΊαααααΆααααααααααααΌαααΆαααΎαα‘αΎααα
αααα»αα―αααΆαααα»αααααα docker-compose.yml
.
ααΌααααα‘ααααΎαααΆααΎα’ααααααααααΆαα½ααα»ααααααΎααα
ααΌα
α’αααΈαα
αααααααΎααΆααααααααΆ docker-compose
. ααααα·αααΎααΎααααααααΆααΎαααααΌαα
αΌααα
αααα»αααα psql
αααααΆααααααΆααααααααΆαααααααΌαααααΆα’αΆα
ααΎααα
ααΌα
αααα
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
ααΆααααααααΆααΌα
ααααΆααααα·αααααΌαααΆαααααΎααΎααααΈααααα·ααααα· docker-compose
αα·α docker
, α’αΆα
ααΎααα
ααΌα
ααα:
docker exec -it edp_timescale_1 psql -Upostgres
ααΌαα
αααΆαααΆαααα»αααααΈααααααααΆαααααα
αΌαα
α·αααααααΎααΆααααααααΆ docker
αα·ααααααΆ docker-compose
αααααααΆαα»αααααΆαααααααΌαααΆααααα»αααΆαα
αα
αΆαααααααα»αα
ααΆααααααααΆααΆααααΈαααΆαααΎαα·ααα·ααΆαααα ααα»ααααααααα·αααΎααΎαααααΎ "αα»α" αα
αααα»ααααααα Makefile
αααααΉααααααα±ααααΎαααΌαα
ααα»α
αααααΆαααα½ααα
αααα»αααααααααααΆααααααααΆααΆαααα α αΎααααα½αααΆααααΆααααΉαα α
ααΆααααααααΆαααααααααααααΆ αααααΆααααααααααααΌα
ααααΆα’αΆα
ααααΌαααΆααααααα
ααΌα
αααα
make db-shell
ααΆα
αααΆααααΆααααΆααΆαααααΎααααΆαα Makefile
ααααΎα±ααααΆαααααΎααΆαααΆαα½ααα»αααΆααααααΆααααα½α!
α§ααΆα αααααΆαααΆα
αααααα’ααααΎααααΆααααΆαααααααααΆαααΎ ααΎαααΉααααααΎαα―αααΆαααΌα
ααΆαααααα 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
ααΎααααΈαααααααααααΆαααααααα
ααΆαααααααα Docker Compose αα·αααααΎα’ααααααααααΆαα½ααα»ααααααΆαα·αααααΆ ααΎαααΉααααααΎαα―αααΆαααΌα
ααΆαααααα 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
ααΆααααααααΆααΆαα
αααΎααααααΆααα·αααααΆαα
ααΈαααα’αα»ααααα
αααααα»αααΊαααααΆααα’αα ααα»αααααααααααΎαααααΎα c=
α’αα»ααααΆαα±ααα’αααααααααα·ααΆαααΆαααααΆααααααααΆαα
αα»αααΊααααα½αα
αααααΆααααΈ Makefile
αα½α
ααΆααα αΎα α’αααα’αΆα
ααααΎααΆααΌα
αααα
make help
- α αααααααΈααΆααααααααΆααΆααα’αααααααΆααααααΆααmake
.
αααα½αααΎααΆααααααααΆαααααΆα
make build
- ααΆααααααΌααααα»αααΌαααΆαααΈDockerfile
. αααα»αα§ααΆα αααααααααΎα ααΎαααΆαααααΎααΌαααΆααααααΆαααααΆααtimescale
ΠΈping
. ααα»ααααααΌαααΆαapi
ααΎαα αααααααΌααααα»ααααα»αα αααααΊααΆα’αααΈαααααΉαααααΌαααααΎαααααΆααααΈααααα·ααααα·ααΆααααααααΆαααα
ααΆαααΆαααααα»α Docker
make start
- ααΎαααααΎαααΆααα»αααΊαααααΆααα’ααα ααΎααααΈααΎαααααΎαααΆααα»αααΊααααααα½α α’αααα’αΆα ααααΎααΆααααααααΆααΌα ααΆmake start c=timescale
.
αααα»αααααΎαααΆααα»αααΊαααααααααααααααΆ
αααα»αααααΎαααΆααα»αααΊααα ping
make login-timescale
- α αΌααα ααΆαααααα bash αααα»αααΊαααtimescale
.
αααα»αααααΎαααΆα bash αα
αααα»ααα»ααααααααΆ
make db-shell
- α αααα αΌαpsql
αα αααα»ααα»ααα½ααtimescale
ααΎααααΈααααα·ααααα·αααα½α SQL αααααΆααααΉαααΌαααααΆααα·ααααααα
αααα»αααααΎαααΆα psql αα
αααα»ααα»α timescaledb
make stop
- ααΆααααααααα»αα
ααΆααααααααα»αααΊαααααααααααααααΆ
make down
- αααααα αα·ααααα»αα ααα ααΎααααΈαα»ααα»αααΊαααααΆααααΆαααα½α α’αααα’αΆα ααααΎααΆααααααααΆαααααααααααΆαααα»αααΊααααααα ααααΆαα α§ααΆα ααα -make down c=timescale
α¬make down c=api
.
ααΆααααααα αα·ααα»ααα»αααΊαααααΆααα’ααα
αααααα
αααααΈααΆ Docker Compose αααααα±ααααΎαααΌααααα»αααααΆααααααααΆααααααΌαααααααααΆααααΆαααααααααααα»αααΊαααααααα αααααααααΆααααααααΆααΆαααααα’αΆα ααααΆααα ααΆααα αα·ααα·ααΆαα αα αΆαα
αα·ααΈααΆαααααααααΆαααααΎααααΆαα Makefile
ααΆααα½αααΎααααααΎαα’αααααααααα αα αα·αααΆααααα½αααΆαα½ααα»αααΊαααααΈα―αααΆααα½αα docker-compose.yml
. αααβααΊβααΎαβαααα»αβαα·ααΆαβα’αααΈβααΏαβααΆαβαααααα
- α’αααα’αα·ααααααααααΎα’ααααααααααααΆαα½ααα»ααααααααααααΆααα·αααααΆαα
αααα»α
docker-compose.yml
, ααΆαααΆααα·αααααΌαααΆαααααΆαααααα»αααααααα»αααααΎαααΆαααααααααα - αααα»αααααΈαααααΆααααααααΆααΆααααΆαααα½αααααΌαααΆαααααααα
α’αααα’αΆα
ααααα·ααααα·ααΆααααααααΆ
make help
αα·αααα½αααΆααααα½αααΎααΆααααααααΆαααααΆαα - α’ααααα·αα
αΆαααΆα
αα
αΆααααααΈα’αΆαα»αααααααΌαααΎααααΈα’αα»αααααααααααΆαααΌα
ααΆααΆαααα½αααΆαααΆαα»αααααα ααα»α
α»αααααααααα»α α¬α
αΌααα
αααα»ααααααααααα½αα α§ααΆα αααααΆααααααααΆααΌα
ααΆ
docker-compose -f docker-compose.yml exec timescale psql -Upostgres
αααααα ααΆmake db-shell
. - α―αααΆα
Makefile
α’αααβα’αΆα βαααααβααΆαβααΆβαααβααΆαβααααααβαα αααβααααααβααΈαα ααααΎαα α§ααΆα ααα ααΆααΆααααα½ααααα»αααΆαααααααααΆααααααααΆααΎααααΈαααααΎαααΆαααααα»ααα»αααΌαααααΆααα·αααααα α¬ααααΎαααααααΆαααααααααα - ααααα·αααΎαααα»αα’αααα’αα·ααααααααααααΎααΌα
ααααΆα
Makefile
ααααα½αααααα½αααααα·α αα αα ααΆα αα·αααΆαααααααααα α»αα
PS αα
αααα»αααααααΎα
α’αααα’αΆαααΆααΈαααα‘αΆαα! ααΎα’αααααααΎααααααααααααα·αααα Docker Compose αααααααααΆ?
ααααα: www.habr.com