ืืขืืขืจ ืืืกื ืืึธืจื, ืื ืืืืืืืืืจื ืึทื ืืืืืงืืื ื ืืื ืืืกืืจืืข ืึทื ืืขืจืืึธื ืึท ืคึผืึทืจืึทืืืื ืืืขืจืจืืง. ืืืื ืขืจ ืคืื ืื ืืขืจืฉืืื ืื ืืขื ืงืขื ืขื ืืืื ืื ืขืจืงืขื ื ืืื ืื ืืจืึธืืื ื ืืื ืืขืจืขืก ืืื ืืขืจ ืืึทืืจืืฃ ืคืื ืืืงืจืึธ ืืึทืืื ืื ืืก. ืืึธืืฉ ืืืงืจืึธืกืขืจืืืืกืขืก ืืขื ืขื ื ืืฉื ืื ื ืืึทืกื ืืขืื ืึธืืึธืืืข, ื ืึธืจ ืืขืฆืื ืก ืืื ืืืื ืคึผืึธืคึผืืืึทืจืืืขื ืืืฉ ืกืงืืืจืึทืงืึทืืื.
ืืจืืืก ืืึทื ืึทืืืืืง ืืึทืืื ืื ืืก ืืขื ืขื ืืืฆื ืจืืคึผืืืืกื ืืืจื ืคืจืืึท, ืึธืืึทื ืึทืืึทืก ืืืงืจืึธ ืืึทืืื ืื ืืก. ื ืืืงืจืึธ ืกืขืจืืืืก ืงืขื ืขื ืืืื ืืขืืึทื ืง ืคืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ืืืึธืก ืกืขืจืืืขืก ืึท ืืืื ืืื ืืืืขืจ ืกืคึผืขืฆืืคืืฉ ืฆืื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืขืก ืงืขื ืืืื ืึท ืจืืืืืฉืึทื ืึทื DBMS, ืึทื ืขืงืกืคึผืจืขืกืก ืึทืคึผืืึทืงืืืฉืึทื, ืึท ืกืึธืืจ ืืื ืกื.
ืื ืืขื, ืขืก ืืื ืฉืืืขืจ ืฆื ืืืึทืืืฉืึทื ืืขืืืขืืึธืคึผืื ื ืึท ื ืืึทืข ืืืืืืืืืจื ืกืืกืืขื ืึธื ื ืืฆื ืืืงืจืึธ ืืึทืืื ืื ืืก. ืืื ืืขื ืกืืืืึทืฆืืข, ืืื ืงืขืจ, ืคืืจื ืืื ืื ืฆื ืื ืืึธืงืขืจ ืคึผืืึทืืคืึธืจืืข.
ืืึธืงืงืขืจ
ืคึผืืึทืืคืึธืจืืข
ืืึธืงืืขืจ ืงืึทืืคึผืึธืื
ะขะตั
ะฝะพะปะพะณะธั
ืืืขื ืืจืืขืื ืืื Docker Compose, ืึท YAML ืืขืงืข ืืื ืืขื ืืฆื ืฆื ืงืึทื ืคืืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืืึทืืื ืื ืืก ืืื ืึธืจืืึทื ืืืืจื ืืืืขืจ ืื ืืขืจืึทืงืฉืึทื ืืื ืืขืืขืจ ืื ืืขืจืขืจ. Docker Compose ืืื ืืขืจืืืขืจ ืึท ืืขืฆืืึทื ืคึฟืึทืจ ืืืกืงืจืืืืื ื ืืื ืืืืคื ืืึทืืื-ืงืึธื ืืึทืื ืขืจ ืืึธืงืงืขืจ ืึทืคึผืืึทืงืืืฉืึทื ื.
ืฆืืืื ืงืึทื ืืืื ืขืจื ืคืืืกื ืืืง ืืืืฃ ืึท ืืึทืืขืืึธืก ืกืืกืืขื
GNU ืืึทืื
ืคึผืจืึธืืจืึทื make
, ืืื ืืกืขื ืฉืึทืื ืึท ืืขืฆืืึทื ืคึฟืึทืจ ืึธืืึทืืืืืื ื ืื ืื ืื ืคืื ืืืืื ืืื ืืืืืจืขืจืื ืคึฟืื ืืงืืจ ืงืึธื. ืืื ืึทืืืขืืืื, ืืืจ ืงืขื ืขื ืืึธืื ืึทื make
ืึทืคึผืืืื ืฆื ืงืืื ืคึผืจืึธืฆืขืก ืืืึธืก ืื ืืืึทืืืื ืขืงืกืึทืงืืืืื ื ืึทืจืืืืจืึทืจืืฉ ืงืึทืืึทื ืื ืฆื ืืืขืจืืึทืื ืขืืืขืืข ืึทืจืืึทื ืฉืจืืึทื ืืึทืืขืจืืึทืืก ืฆื ืขืืืขืืข ืจืขืืืืืึทื ืคืึธืจืขื, ืฆื ืขืืืขืืข ืฆืื. ืืื ืืื ืืืขืจ ืคืึทื, ืื ืงืึทืืึทื ืื docker-compose
ืืืขื ืืืื ืคืืจืืืื ืืืขื ืืื ืึทืืกืืจืึทืงื ืฆืืื (
ืฆื ืืึธืื ืื ืคึผืจืึธืืจืึทื make
ืืืขืื ืืืึธืก ืืืจ ืืืืื ืคืื ืขืก, ืืืจ ืืึทืจืคึฟื ืึท ืืขืงืข Makefile
.
ืืื ืืื ืืืขืจ Makefile
ืืืขื ืึทื ืืืึทืืื ืจืขืืืืขืจ ืงืึทืืึทื ืื docker
ะธ docker-compose
, ืืืึธืก ืืขื ืขื ืืืืืื ื ืฆื ืกืึธืืืืข ืคืืืข ืคึผืจืึธืืืขืืก. ื ืึทืืขืื, ืืืจ ืจืขืื ืืืขืื ืึทืกืขืืืึทืืื ื ืึท ืงืึทื ืืืื ืขืจ, ืึธื ืืืืื ืขืก, ืกืืึธืคึผืคึผืื ื ืขืก, ืจืืกืืึทืจืืื ื ืขืก, ืึธืจืืึทื ืืืืจื ืืึทื ืืฆืขืจ ืืึธืืื ืฆื ืืขื ืงืึทื ืืืื ืขืจ, ืืจืืขืื ืืื ืงืึทื ืืืื ืขืจ ืืึธืืก ืืื ืกืึทืืืืื ื ืื ืืขืจืข ืขื ืืขื ืคึผืจืึธืืืขืืก.
ืืืคึผืืฉ ื ืืฆื ืงืึทืกืขืก ืคึฟืึทืจ Docker Compose
ืืึธืืืจ ืืืึทืืืฉืึทื ืึท ืจืขืืืืขืจ ืืืขื ืึทืคึผืืึทืงืืืฉืึทื ืืืึธืก ืืื ืื ืคืืืืขื ืืข ืงืึทืืคึผืึธืื ืึทื ืฅ:
- TimescaleDB ืืึทืืึทืืืืก (Postgres).
- Express.js ืึทืคึผืืึทืงืืืฉืึทื.
- ืคึผืื ื (ื ืึธืจ ืึท ืงืึทื ืืืื ืขืจ, ืืื ื ืืฉื ืืึธื ืขืคึผืขืก ืกืคึผืขืฆืืขื).
ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืขื ืืึทืจืคึฟื 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
ืืืจ ืืืืื ืฆื ืืึทืืืขื ืืึธืืงืึทืื. ืืึธืก ืืื ืคึผืื ืงื ืืืึธืก ืืืขื ืืืื ืืขืืื ื ืึธื ืขืงืกืึทืงืืืืื ื ืืขื ืืึทืคึฟืขื.
ืืืืขื ืึท ืืึธืงืงืขืจ ืงืึทื ืืืื ืขืจ
make start
- ืืึธื ืืฉืื ื ืึทืืข ืงืึทื ืืืื ืขืจื. ืฆื ืงืึทืืขืจ ืืืืื ืืืื ืงืึทื ืืืื ืขืจ, ืืืจ ืงืขื ืขื ื ืืฆื ืึท ืืึทืคึฟืขื ืืืmake start c=timescale
.
ืืืืคื ืื ืืืืืกืงืึทืืข ืงืึทื ืืืื ืขืจ
ืคืืืกื ืืืง ืึท ืคึผืื ื ืงืึทื ืืืื ืขืจ
make login-timescale
- ืืึธืืื ืฆื ืื ืืึทืฉ ืกืขืกืืข ืคืื โโืืขื ืงืึทื ืืืื ืขืจtimescale
.
ืืืืคื ืืึทืฉ ืืื ืึท ืืืืืกืงืึทืืข ืงืึทื ืืืื ืขืจ
make db-shell
- ืึทืจืืึทื ืืึทื ื ืฆืpsql
ืืื ืึท ืงืึทื ืืืื ืขืจtimescale
ืฆื ืืืกืคืืจื SQL ืงืืืืจืื ืงืขืื ืื ืืึทืืึทืืืืก.
ืคืืืกื ืืืง psql ืืื ืึท ืืืืขืกืงืึทืืขืื ืงืึทื ืืืื ืขืจ
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
, ืืึธืก ืกืืจืืืืืื ื ืืืืึทืจืืขื ืืื ืจืึทืืืกืึทื ืขืจืจืึธืจืก.
ืคึผืก ืืื ืืื ืืืขืจ
ืืื ืืืืขื ืขืจ! ืืื ืืึธื ืืืจ ืึธืืึทืืืื Docker Compose?
ืืงืืจ: www.habr.com