Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก

ื™ืขื“ืขืจ ื‘ื™ืกืœ ื™ืึธืจืŸ, ื“ื™ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ื ื“ื•ืกื˜ืจื™ืข ืึทื ื“ืขืจื’ืึธื• ืึท ืคึผืึทืจืึทื“ื™ื’ื ื™ื‘ืขืจืจื•ืง. ืื™ื™ื ืขืจ ืคื•ืŸ ื“ื™ ื“ืขืจืฉื™ื™ื ื•ื ื’ืขืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื ืขืจืงืขื ื˜ ื•ื•ื™ ื“ื™ ื’ืจืึธื•ื™ื ื’ ืื™ื ื˜ืขืจืขืก ืื™ืŸ ื“ืขืจ ื‘ืึทื’ืจื™ืฃ ืคื•ืŸ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก. ื›ืึธื˜ืฉ ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ื–ืขื ืขืŸ ื ื™ืฉื˜ ื“ื™ ื ื•ืึทืกื˜ ื˜ืขื›ื ืึธืœืึธื’ื™ืข, ื ืึธืจ ืœืขืฆื˜ื ืก ื”ืื˜ ื–ื™ื™ืŸ ืคึผืึธืคึผื•ืœืึทืจื™ื˜ืขื˜ ืžืžืฉ ืกืงื™ื™ืจืึทืงืึทื˜ื™ื“.

ื’ืจื•ื™ืก ืžืึทื ืึทืœื™ื˜ื™ืง ื‘ืึทื“ื™ื ื•ื ื’ืก ื–ืขื ืขืŸ ืื™ืฆื˜ ืจื™ืคึผืœื™ื™ืกื˜ ื“ื•ืจืš ืคืจื™ื™ึท, ืึธื˜ืึทื ืึทืžืึทืก ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก. ื ืžื™ืงืจืึธ ืกืขืจื•ื•ื™ืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื“ืึทื ืง ืคื•ืŸ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืึธืก ืกืขืจื•ื•ืขืก ืึท ืื™ื™ืŸ ืื•ืŸ ื–ื™ื™ืขืจ ืกืคึผืขืฆื™ืคื™ืฉ ืฆื™ืœ. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืขืก ืงืขืŸ ื–ื™ื™ืŸ ืึท ืจื™ืœื™ื™ืฉืึทื ืึทืœ DBMS, ืึทืŸ ืขืงืกืคึผืจืขืกืก ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืึท ืกืึธืœืจ ื“ื™ื ืกื˜.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก

ื“ื™ ื˜ืขื’, ืขืก ืื™ื– ืฉื•ื•ืขืจ ืฆื• ื™ืžืึทื“ื–ืฉืึทืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืึท ื ื™ื™ึทืข ื•ื•ื™ื™ื›ื•ื•ืืจื’ ืกื™ืกื˜ืขื ืึธืŸ ื ื™ืฆืŸ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก. ืื•ืŸ ื“ืขื ืกื™ื˜ื•ืึทืฆื™ืข, ืื™ืŸ ืงืขืจ, ืคื™ืจื˜ ืื•ื ื“ื– ืฆื• ื“ื™ ื“ืึธืงืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข.

ื“ืึธืงืงืขืจ

ืคึผืœืึทื˜ืคืึธืจืžืข ื“ืึธืงืงืขืจ, ืื™ืŸ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืคื•ืŸ ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก, ืื™ื– ื’ืขื•ื•ืืจืŸ ื›ึผืžืขื˜ ืึทืŸ ื™ื ื“ืึทืกื˜ืจื™ ื ืึธืจืžืึทืœ. ืื•ื™ืฃ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ืื•ื™ืก ืึทื– ื“ืึธืงืขืจ ืื™ื– ื“ื™ ื‘ืœื•ื™ื– ืคืจื™ื™ึท ืงืึธื ื˜ืึทื™ื ืจื™ื–ืึทื˜ื™ืึธืŸ ืคึผืœืึทื˜ืคืึธืจืžืข ื•ื•ืึธืก ืึทืœืึทื•ื– ืึธืจื’ืึทื ืึทื–ื™ื™ืฉืึทื ื– ืฆื• ืขืคืขืจื˜ืœืึทืกืœื™ ืฉืึทืคึฟืŸ ืงื™ื™ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืื•ืŸ ืœื•ื™ืคืŸ ื–ื™ื™ ืื™ืŸ ืงื™ื™ืŸ ืกื•ื•ื™ื•ื•ืข - ืคึฟื•ืŸ ื›ื™ื™ื‘ืจื™ื“ ื•ื•ืืœืงื ืก ืฆื• ื‘ืจืขื’ ืกื™ืกื˜ืขืžืขืŸ.

ื“ืึธืงื˜ืขืจ ืงืึทืžืคึผืึธื•ื–

ะขะตั…ะฝะพะปะพะณะธั ื“ืึธืงื˜ืขืจ ืงืึทืžืคึผืึธื•ื– ื“ื™ื–ื™ื™ื ื“ ืคึฟืึทืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื ื’ ืžืึทืœื˜ื™-ืงืึธื ื˜ืึทื™ื ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ื ื“ืึธืงืงืขืจ ืงืึทืžืคึผืึธื•ื– ืคึผืจื•ื™ืขืงื˜ ืงืขื ืขืŸ ืึทื ื˜ื”ืึทืœื˜ืŸ ื•ื•ื™ ืคื™ืœืข ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจื– ื•ื•ื™ ื“ื™ ืงืจื™ื™ื™ื˜ืขืจื– ืคื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื“ืึทืจืฃ.

ื•ื•ืขืŸ ืืจื‘ืขื˜ืŸ ืžื™ื˜ Docker Compose, ืึท YAML ื˜ืขืงืข ืื™ื– ื’ืขื ื™ืฆื˜ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื•ืŸ ืึธืจื’ืึทื ื™ื–ื™ืจืŸ ื–ื™ื™ืขืจ ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ. Docker Compose ืื™ื– ื“ืขืจื™ื‘ืขืจ ืึท ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ื“ื™ืกืงืจื™ื™ื‘ื™ื ื’ ืื•ืŸ ืœื•ื™ืคืŸ ืžืึทืœื˜ื™-ืงืึธื ื˜ืึทื™ื ืขืจ ื“ืึธืงืงืขืจ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–.

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.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ื”ื™ืœืฃ ืื•ื™ืฃ ื‘ื ื™ืžืฆื ืงืึทืžืึทื ื“ื–

  • make build - ืึทืกืขืžื‘ืึทืœื™ื ื’ ืึท ื‘ื™ืœื“ ืคื•ืŸ Dockerfile. ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื‘ื™ืœื“ืขืจ timescale ะธ ping. ืื‘ืขืจ ื“ื™ ื‘ื™ืœื“ api ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื–ืึทืžืœืขืŸ ืœืึธื•ืงืึทืœื™. ื“ืึธืก ืื™ื– ืคึผื•ื ืงื˜ ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื˜ืืŸ ื ืึธืš ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื“ืขื ื‘ืึทืคึฟืขืœ.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ื‘ื•ื™ืขืŸ ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ

  • make start - ืœืึธื ื˜ืฉื™ื ื’ ืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจื–. ืฆื• ืงืึทื˜ืขืจ ื‘ืœื•ื™ื– ืื™ื™ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืึท ื‘ืึทืคึฟืขืœ ื•ื•ื™ make start c=timescale.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืœื•ื™ืคืŸ ื“ื™ ื˜ื™ื™ืžืกืงืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจ

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืคืœื™ืกื ื“ื™ืง ืึท ืคึผื™ื ื’ ืงืึทื ื˜ื™ื™ื ืขืจ

  • make login-timescale - ืœืึธื’ื™ืŸ ืฆื• ื“ื™ ื‘ืึทืฉ ืกืขืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ timescale.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืœื•ื™ืคืŸ ื‘ืึทืฉ ืื™ืŸ ืึท ื˜ื™ื™ืžืกืงืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจ

  • make db-shell - ืึทืจื™ื™ึทื ื’ืึทื ื’ ืฆื• psql ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ timescale ืฆื• ื•ื™ืกืคื™ืจืŸ SQL ืงื•ื•ื™ืจื™ื– ืงืขื’ืŸ ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืคืœื™ืกื ื“ื™ืง psql ืื™ืŸ ืึท ื˜ื™ืžืขืกืงืึทืœืขื“ื‘ ืงืึทื ื˜ื™ื™ื ืขืจ

  • make stop โ€” ืืคืฉื˜ืขืœ ืŸ ืœืื’ืขืจืŸ .

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืกื˜ืึธืคึผืคึผื™ื ื’ ืึท ื˜ื™ื™ืžืกืงืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจ

  • make down - ืกื˜ืึธืคึผืคึผื™ื ื’ ืื•ืŸ ืจื™ืžื•ื•ื•ื™ื ื’ ืงืึทื ื˜ื™ื™ื ืขืจื–. ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ืงืึทื ื˜ื™ื™ื ืขืจ, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ืขื ื‘ืึทืคึฟืขืœ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ืขื ื’ืขื•ื•ืืœื˜ ืงืึทื ื˜ื™ื™ื ืขืจ. ืœืžืฉืœ - make down c=timescale ืึธื“ืขืจ make down c=api.

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก
ืกื˜ืึธืคึผืคึผื™ื ื’ ืื•ืŸ ื•ื™ืกืžืขืงืŸ ืึทืœืข ืงืึทื ื˜ื™ื™ื ืขืจื–

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ื›ืึธื˜ืฉ 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, ื“ืึธืก ืกื˜ืจื™ืžืœื™ื™ื ื– ืžื™ื˜ืึทืจื‘ืขื˜ ืื•ืŸ ืจืึทื“ื•ืกืึทื– ืขืจืจืึธืจืก.

ืคึผืก ืื™ืŸ ืื•ื ื“ื–ืขืจ ืžืึทืจืง ืขืก ืื™ื– ืึท ื‘ื™ืœื“ ื“ืึธืงืงืขืจ, ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืžื™ื˜ ืื™ื™ืŸ ื’ื™ื˜. ืื™ืจ ืงืขื ืขืŸ ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืึธืคึผืขืจืึทืฆื™ืข ืคื•ืŸ โ€‹โ€‹ืงืึทื ื˜ื™ื™ื ืขืจื– ืื™ืŸ ื•ื•ืคึผืก. ืึทืœืข ื ื™ื™ึทืข ืงืœื™ื™ืึทื ืฅ ื–ืขื ืขืŸ ืคืจื™ื™ 3 ื˜ืขื’ ืคื•ืŸ ื˜ืขืกื˜ื™ื ื’.

ืœื™ื‘ ืœื™ื™ืขื ืขืจ! ื•ื•ื™ ื˜ืึธืŸ ืื™ืจ ืึธื˜ืึทืžื™ื™ื˜ Docker Compose?

Docker Compose: ืกื™ืžืคึผืœืึทืคื™ื™ื™ื ื’ ื“ื™ื™ืŸ ืึทืจื‘ืขื˜ ืžื™ื˜ ืžืึทืงืขืคื™ืœืขืก

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’