Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”

๋ช‡ ๋…„๋งˆ๋‹ค ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‚ฐ์—…์€ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ณ€ํ™”๋ฅผ ๊ฒช์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์ƒ ์ค‘ ํ•˜๋‚˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋…์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋†’์•„์ง€๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์ตœ์‹  ๊ธฐ์ˆ ์€ ์•„๋‹ˆ์ง€๋งŒ ์ตœ๊ทผ์—์•ผ ๊ทธ ์ธ๊ธฐ๊ฐ€ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์น˜์†Ÿ์•˜์Šต๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ๋ชจ๋†€๋ฆฌ์‹ ์„œ๋น„์Šค๋Š” ์ด์ œ ๋…๋ฆฝ์ ์ด๊ณ  ์ž์œจ์ ์ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋Œ€์ฒด๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๋‹จ์ผ ๋ชฉ์ ์„ ์ œ๊ณตํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ด€๊ณ„ํ˜• DBMS, Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, Solr ์„œ๋น„์Šค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”

์š”์ฆ˜์—๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋ฅผ Docker ํ”Œ๋žซํผ์œผ๋กœ ์ด๋ˆ๋‹ค.

๋„์ปค

ํ”Œ๋žซํผ ๋„์ปค, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋ฐ ๋ฐฐํฌ์—์„œ ๊ฑฐ์˜ ์—…๊ณ„ ํ‘œ์ค€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์›น์‚ฌ์ดํŠธ์—์„œ Docker๋Š” ์กฐ์ง์ด ์†์‰ฝ๊ฒŒ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํด๋ผ์šฐ๋“œ๋ถ€ํ„ฐ ์—ฃ์ง€ ์‹œ์Šคํ…œ๊นŒ์ง€ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์ด๋ฅผ ๋ฐฐํฌ ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์œ ์ผํ•œ ๋…๋ฆฝ ์ปจํ…Œ์ด๋„ˆํ™” ํ”Œ๋žซํผ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ปค ์ž‘์„ฑ

ะขะตั…ะฝะพะปะพะณะธั ๋„์ปค ์ž‘์„ฑ ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์„ฑ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Docker Compose ํ”„๋กœ์ ํŠธ์—๋Š” ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ์ž๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋งŒํผ ๋งŽ์€ Docker ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Compose๋กœ ์ž‘์—…ํ•  ๋•Œ YAML ํŒŒ์ผ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์„œ๋กœ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Docker Compose๋Š” ๋‹ค์ค‘ ์ปจํ…Œ์ด๋„ˆ Docker ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๋ช…ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ

GNU ๋ฉ”์ดํฌ

ํ”„๋กœ๊ทธ๋žจ make๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ํ”„๋กœ๊ทธ๋žจ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์ถ•์„ ์ž๋™ํ™”ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. make ์ผ๋ถ€ ์ž…๋ ฅ ์ž๋ฃŒ๋ฅผ ์ผ๋ถ€ ์ถœ๋ ฅ ํ˜•์‹, ์ผ๋ถ€ ๋ชฉํ‘œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋ช…๋ น์€ docker-compose ์ถ”์ƒ์ ์ธ ๋ชฉํ‘œ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค(์ „ํ™” ๋Œ€์ƒ).

ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•˜๋ ค๋ฉด make ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด์„œ๋Š” ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค Makefile.

์šฐ๋ฆฌ์˜ Makefile ์ผ๋ฐ˜ ๋ช…๋ น์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค docker ะธ docker-compose, ์ด๋Š” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ปจํ…Œ์ด๋„ˆ ์กฐ๋ฆฝ, ์‹œ์ž‘, ์ค‘์ง€, ๋‹ค์‹œ ์‹œ์ž‘, ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๊ตฌ์„ฑ, ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ์ž‘์—… ๋ฐ ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Compose์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€

๋‹ค์Œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์ƒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • TimescaleDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Postgres).
  • Express.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜.
  • Ping(๊ทธ๋ƒฅ ์ปจํ…Œ์ด๋„ˆ์ผ ๋ฟ, ํŠน๋ณ„ํ•œ ์ž‘์—…์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ)

์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” Docker ์ปจํ…Œ์ด๋„ˆ 3๊ฐœ์™€ ํŒŒ์ผ XNUMX๊ฐœ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. 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: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์— ๋Œ€ํ•œ ๋„์›€๋ง

  • make build - ์ด๋ฏธ์ง€๋ฅผ ์กฐ๋ฆฝํ•˜๋Š” ์ค‘ Dockerfile. ์ด ์˜ˆ์—์„œ๋Š” ๊ธฐ์กด ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. timescale ะธ ping. ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€ api ์šฐ๋ฆฌ๋Š” ํ˜„์ง€์—์„œ ์ˆ˜์ง‘ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„์— ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
Docker ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์ถ•

  • make start โ€” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๋งŒ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. make start c=timescale.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
๊ธฐ๊ฐ„ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
ํ•‘ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

  • make login-timescale โ€” ์ปจํ…Œ์ด๋„ˆ์˜ bash ์„ธ์…˜์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. timescale.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
์‹œ๊ฐ„ ์ฒ™๋„ ์ปจํ…Œ์ด๋„ˆ์—์„œ bash ์‹คํ–‰

  • make db-shell - ์ž…๊ตฌ psql ์šฉ๊ธฐ์— timescale ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
timescaledb ์ปจํ…Œ์ด๋„ˆ์—์„œ psql ์‹คํ–‰

  • make stop โ€” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
๊ธฐ๊ฐ„ ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€

  • make down โ€” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด - make down c=timescale ๋˜๋Š” make down c=api.

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”
๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์‚ญ์ œ

๊ฒฐ๊ณผ

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 ์šฐ๋ฆฌ์˜ ์‹œ์žฅ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ๋„์ปค, ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ์ž‘๋™์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VPS. ๋ชจ๋“  ์‹ ๊ทœ ๊ณ ๊ฐ์—๊ฒŒ๋Š” 3์ผ ๋™์•ˆ ๋ฌด๋ฃŒ๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋…์ž ์—ฌ๋Ÿฌ๋ถ„! Docker Compose๋ฅผ ์–ด๋–ป๊ฒŒ ์ž๋™ํ™”ํ•˜๋‚˜์š”?

Docker Compose: Makefile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ๋‹จ์ˆœํ™”

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€