ืืื ืืื ืฉื ืื, ืชืขืฉืืืช ืคืืชืื ืืชืืื ื ืขืืืจืช ืฉืื ืื ืคืจืืืืื. ื ืืชื ืืืืืช ืืช ืืืช ืืชืืคืขืืช ืืืื ืืขื ืืื ืืืืืจ ืืืืฉื ืืืงืจื-ืฉืืจืืชืื. ืืืจืืช ืฉืฉืืจืืชื ืืืงืจื ืื ืื ืืืื ืืืืืื ืืืืฉื ืืืืชืจ, ืจืง ืืืืจืื ื ืืคืืคืืืจืืืช ืฉืื ืืืฉ ืืื ืงื ืฉืืงืื.
ืฉืืจืืชืื ืืื ืืืืืืื ืืืืืื ืืืืืคืื ืืขืช ืืืืงืจื-ืฉืืจืืชืื ืขืฆืืืืื ืืืืืื ืืืืื. ื ืืชื ืืืชืืืืก ืืืืงืจื-ืฉืืจืืช ืืืคืืืงืฆืื ืืืฉืจืชืช ืืืจื ืืืช ืืืืื ืกืคืฆืืคืืช. ืืืืืื, ืื ืืืื ืืืืืช DBMS ืืืกื, ืืืฉืื Express, ืฉืืจืืช Solr.
ืืืืื ืืื, ืงืฉื ืืืืืื ืคืืชืื ืืขืจืืช ืชืืื ื ืืืฉื ืืืื ืืืฉืชืืฉ ืืฉืืจืืชื ืืืงืจื. ืืืืฆื ืืื, ืืชืืจื, ืืืืื ืืืชื ื ืืคืืืคืืจืืช 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.
- ืคืื ื (ืกืชื ืืืื, ืื ืขืืฉื ืฉืื ืืืจ ืืืืื).
ืืืฉืื ืื ืืฆืืจื 3 ืืืืืืช Docker ืืงืืืฅ 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
.
ืืคืขืืช ืืืื ืืื ืืืื ืื
ืืคืขืืช ืืืื ืคืื ื
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
, ืื ืืืืขื ืืช ืฉืืชืืฃ ืืคืขืืื ืืืคืืืช ืฉืืืืืช.
ื .ื. ืฉืื ื
ืงืืจืืื ืืงืจืื! ืืืฆื ืืืคืื ืืช Docker Compose ืืืืืืืื?
ืืงืืจ: www.habr.com