Compose: docker-compose ํŒŒ์ผ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ

์— ๋งŒ๋“  2018๋…„ 01์›” 01์ผ  ยท  141์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: docker/compose

docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์ด๋‚˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณต์‚ฌ ํ•  ๊ฐ€๋Šฅ์„ฑ์„ ๋†“์นฉ๋‹ˆ๋‹ค. ์ •๋ง ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ธฐ ํ์‡„ https://github.com/docker/compose/issues/2105 ์—์„œ ๋งŽ์€ +1 ์„ ํ™•์ธ ํ•˜์‹ญ์‹œ์˜ค.

kinfeature statu0-triage

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

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

์‚ฌ์šฉ์ž๊ฐ€ Docker๋กœ ์œ ํ•ดํ•œ ์ผ์„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹น์‹ ์ด ๋ฌด์—‡์„ํ•˜๋“  ์ƒ๊ด€์—†์ด ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ธ์  ๊ฐ€ ์˜ค์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ํ•ฉ๋ฒ•์  ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  141 ๋Œ“๊ธ€

์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ณธ ๋Œ€๋ถ€๋ถ„์˜ ๊ถŒ์žฅ ์‚ฌ์šฉ๋ฒ•์€ ๋ฐ˜ ํŒจํ„ด์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ณต๋œ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ๋งŽ์€ ๊ตฌ๋…์ž๊ฐ€ "๋ฐ˜ ํŒจํ„ด"์ด ์•„๋‹Œ ์ •๋ง ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

ooops, ์ด์ œ ๋” ์ด์ƒ ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ # 2105์— "๋ฌด์–ธ๊ฐ€"๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ์ž˜๋ชป๋œ ๋งํฌ๋ฅผ ์ œ๊ณตํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

๋”ฐ๋ผ์„œ ์ผ๋ถ€ ๊ตฌ์„ฑ / ์ดˆ๊ธฐํ™” ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด db ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ์ผ๋ถ€ * .sql ํ•ญ๋ชฉ, apache / nginx ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ ์ผ๋ถ€ html / js / css ์ฝ˜ํ…์ธ  ๋˜๋Š” Java ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ jar ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ์—์„œ๋งŒ "์ „์—ญ ์ ์œผ๋กœ"์‚ฌ์šฉ ๊ฐ€๋Šฅ / ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ด๊ฒƒ์€ ํ˜ธ์ŠคํŠธ ๋กœ์ปฌ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ํฌํ•จ ํŒŒ์ผ์˜ ์ผ๋ถ€ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์–ด๋–ค ์ปจํ…Œ์ด๋„ˆ๋„ ๊ตฌ์„ฑ์ด๋‚˜ ์ดˆ๊ธฐํ™”์—†์ด ์“ธ๋ชจ์—†๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ๋งํฌ์ž…๋‹ˆ๋‹ค : https://github.com/docker/compose/issues/1664

+1

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ์—์„œ๋งŒ "์ „์—ญ ์ ์œผ๋กœ"์‚ฌ์šฉ ๊ฐ€๋Šฅ / ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์˜ ๋ฌธ์ œ์ ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ ๋  ๋•Œ๋งˆ๋‹ค ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ทผ์‹œ์•ˆ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ์šฉ์–ด). ํ™•์žฅ ์„ฑ์ด ๋งค์šฐ ๋‚ฎ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค (์ปจํ…Œ์ด๋„ˆ๊ฐ€ 10 ๊ฐœ? 20? 100?).

๋ฌธ์ œ์— ๋Œ€ํ•œ ์‹ค์ œ ํ•ด๊ฒฐ์ฑ…์€ ๋นŒ๋“œ (Dockerfile)์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ํฌํ•จํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋ชจ๋“  "๊ณต์œ  ๋œ"์ฝ˜ํ…์ธ ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ํฌํ•จํ•˜์—ฌ ๊ตฌ์„ฑํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๋ฅผ 10 ~ 100 ๊ฐœ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒƒ์€ ์ €์žฅ์†Œ์—์„œ ๊ฐ€์ ธ ์™€์„œ ๋…ธ๋“œ ๋ณ„ ๊ตฌ์„ฑ ๋งŒ ๋งˆ์šดํŠธ (์˜ˆ,์ด ๊ฒฝ์šฐ ๋งˆ์šดํŠธ)ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ๋…ธ๋“œ์—์„œ docker-compose๋ฅผ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋ฌผ๋ก  build : & Dockerfile๊ณผ ํ•จ๊ป˜ docker-compose๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์ƒํ™ฉ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ด์ง€๊ณ  docker-compose์˜ yaml ๊ตฌ์„ฑ์ด ํ›จ์”ฌ ๋” "์šฐ์•„ํ•จ"์ž…๋‹ˆ๋‹ค. : o)

๋‚˜๋Š” ์‚ฌ๋ณธ์ด (์ ์–ด๋„ ์žฌ์ •์˜๋กœ์„œ) ์œ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์ œ์— ๋ด‰์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ฃผ๋กœ Mac์—์„œ ๊ฐœ๋ฐœํ•˜๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฃจํŠธ๋กœ ์‹คํ–‰๋˜๊ณ  ๋งˆ์šดํŠธ ๋œ ๋ณผ๋ฅจ์œผ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋ช…๋ น์— ๋ฌธ์ œ๊ฐ€ ๊ฑฐ์˜ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ CentO์—์„œ ๋™์ผํ•œ ์›Œํฌ ํ”Œ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฃจํŠธ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์œ  ํ•œ ํŒŒ์ผ์ด ๋งˆ์šดํŠธ ๋œ ๋ณผ๋ฅจ์„ ํ†ตํ•ด ํ˜ธ์ŠคํŠธ์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํ•œ ๊ณ ํ†ต์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๋Œ€์‹  ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ด€๋ จ ๋ฌธ์ œ : # 1532

์ตœ์‹  ์ •๋ณด

๋‚ด ๊ฒฝ์šฐ์—๋Š” Dockerfile์—์„œ COPY๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ :
์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ์ฝ๊ธฐ ์ „์šฉ ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์ฝ๊ธฐ ์ „์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— rw ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
ํšจ๊ณผ๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งŒ ์ง€์†๋˜๋Š” ์“ฐ๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ž˜ํผ (https://stackoverflow.com/questions/36362233/can-a-dockerfile-extend-another-one)๋ฅผ COPY ํŒŒ์ผ๋กœ๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ volume ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : .gitlab-ci.yml์—์„œ ์—ฌ๋Ÿฌ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์‹œ์— ์‹œ์ž‘ํ•˜์—ฌ git ์ €์žฅ์†Œ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ž‘์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ •๋ฆฌ๋˜๊ธฐ ์ „์— ci ์ž‘์—…์ด ์ทจ์†Œ๋˜๋ฉด ๊ถŒํ•œ ๋ถ€์กฑ์œผ๋กœ ์ธํ•ด gitlab-runner์—์„œ ๋‚˜๋จธ์ง€ ํŒŒ์ผ์„ ์‚ญ์ œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํŒŒ์ผ์„ ๋ณผ๋ฅจ์—์„œ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋ฐ˜ ํŒจํ„ด์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

volumes: - ./folder_on_host/ :/folder_in_container/ ๊ฐ€์š”?
๋‚ด compose ํŒŒ์ผ์—์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ (COPY์™€ ๋™์ผ)๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@harpratap ๋‹น์‹ ์ด ์˜ณ์ง€ ๋งŒ, ๋‹จ์ ์€ / folder_in_container๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ์–ด์•ผํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฎ์–ด

COPY ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด +1. ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐœ๋ฐœ ์„ค์ •์„์œ„ํ•œ ๊ตฌ์„ฑ์—์„œ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

COPY์— +1. ์ด๊ฒƒ์€ ์ •๋ง ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : swarm ๋ชจ๋“œ์—์„œ mysql ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. MySQL์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก /docker-entrypoint-initdb.d/์— ์ดˆ๊ธฐํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

mysql ์œ„์— ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ mysql์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
๋–ผ์—์„œ ์ž‘์—…ํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด ์˜๊ฒฌ์œผ๋กœ๋Š” ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์‚ฌ / ์ถ”๊ฐ€์— +1,

์‚ฌ์šฉ ์‚ฌ๋ก€ :
Fluentd๋Š” ๋Ÿฐํƒ€์ž„ ๋™์•ˆ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ด๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์€ Jenkins Engine์— ์˜ํ•ด ๋Ÿฐํƒ€์ž„์— ์ƒ์„ฑ๋˜๋ฉฐ Docker์— COPY / ADD๊ฐ€ ์—†์œผ๋ฉด ๋‹จ์ˆœํžˆ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

COPY์— +1

Docker-compose ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜์˜ ๊ฐ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— Dockerfile์ด์žˆ๋Š” ์—ฌ๋Ÿฌ ๋„์ปค ๋จธ์‹ ์—์„œ ๊ณต์œ  ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ๊ตฌ์„ฑ์„ ๊ฐ ์ด๋ฏธ์ง€์— ์–ด๋–ป๊ฒŒ ๋ณต์‚ฌํ•ฉ๋‹ˆ๊นŒ? COPY failed: Forbidden path outside the build context ์—†์ด Dockerfile ์ปจํ…์ŠคํŠธ์—์„œ ../ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ docker-compose ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ docker ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— docker-compose ์ปจํ…์ŠคํŠธ์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊นจ๋—ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ๋„ค์š” !!

+1๋งŒ์œผ๋กœ ๋Œ“๊ธ€์„ ๋‹ฌ์ง€ ๋งˆ์„ธ์š”. ๋ชจ๋‘์˜ ์‹œ๊ฐ„ ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. ์ œ๊ณต ํ•  ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๋ ‡๊ฒŒํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์›๋ž˜ ๋ฌธ์ œ์— ์ข‹์•„์š”๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

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

์‚ฌ์šฉ์ž๊ฐ€ Docker๋กœ ์œ ํ•ดํ•œ ์ผ์„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๋‹น์‹ ์ด ๋ฌด์—‡์„ํ•˜๋“  ์ƒ๊ด€์—†์ด ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์–ธ์  ๊ฐ€ ์˜ค์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ํ•ฉ๋ฒ•์  ์ธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋‹น์‹ ์ดํ•˜๋Š” ์ผ์ด ์‹ค์ œ๋กœ์ด ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ œ๊ธฐ ๋œ ๋ฌธ์ œ๋Š” mongo.conf ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ docker-compose ํŒŒ์ผ์— ์˜ํ•ด ์กฐ์ •๋˜๋Š” ์„ธ ๊ฐœ์˜ docker ์ด๋ฏธ์ง€๊ฐ„์— ๊ณต์œ ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๊ฐ Docker ๋นŒ๋“œ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋™์ผํ•œ ์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ docker๋Š” ํŒŒ์ผ์ด ๋นŒ๋“œ ํ™˜๊ฒฝ์˜ ์™ธ๋ถ€์— ์žˆ๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด docker ๋นŒ๋“œ๋Š” ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ์™ธ๋ถ€์˜ ์ˆ˜์ •์ด ๋นŒ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์žฌํ˜„์„ฑ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ์กฐ์ •ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ํŒŒ์ผ ๋ณต์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ docker-compose๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— Makefile ๋˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ด€๋ จ์ด ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด docker-compose๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋…ผ์˜ํ•˜๋Š” ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ œ๊ธฐํ•˜๋Š” ๋ฌธ์ œ๋Š” ๋กœ์ปฌ ํŒŒ์ผ ์ˆ˜์ •์˜ ๋Ÿฐํƒ€์ž„ (์‹œ์ž‘ ์‹œ๊ฐ„) ์ฃผ์ž…์— ๊ด€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ดํ•˜๋Š” ์ผ์—์„œ ์‹ค์ œ๋กœ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์œ„์—์„œ ๋งํ•œ ๊ฒƒ์€ ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด ์กŒ๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€๋Š” ํ•ญ์ƒ ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€์™€ ๊ฐ™์€ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ๊ตฌ์„ฑ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋Ÿฐํƒ€์ž„์— ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ "์ฃผ์ž…"๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” ๋„์ปค ์ด๋ฏธ์ง€์˜ ์„ค๊ณ„์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ๋ณผ๋ฅจ ๋งคํ•‘ (๋„ ์ปค๊ฐ€ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์ˆ˜์ •์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.)

๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ์ž˜๋ชป ํ•ด์„ํ•˜์ง€ ์•Š์•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ ์ œ ๋‹ต๋ณ€์ด ๋„์›€์ด ๋˜์—ˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@jpz- ์–ด๋–ป๊ฒŒ ๋“  ๋‚ด ์›๋ž˜ ๋Œ“๊ธ€์„ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค

๋‚ด ์›๋ž˜ ์˜๊ฒฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” /etc/mongod.conf ์™€ ๊ฐ™์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ํ•„์š”์—†์ด mongo ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์„ ์–ธํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋‚˜๋Š” volumes . 1 ~ 2 ๋…„ ์ „-๋‚˜์œ ๊ฒฝํ—˜์œผ๋กœ ์ด๊ฑธ ์‹œ๋„ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ... ๊ดœ์ฐฎ์•„ ๋ณด์ธ๋‹ค.

COPY์— +1

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์š”์ ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. docker compose ์„œ๋น„์Šค์˜ ์ด๋ฆ„์ด phpfpm ๋ผ๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ ์›ํ•˜๋Š”๋Œ€๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.
https://gist.github.com/markoshust/15efb29aa5eebf8adae402af18b2e674

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํ˜ธ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด์ œ docker-toolbox์™€ ํ•จ๊ป˜ Windows 10 home์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณผ๋ฅจ์œผ๋กœ ๋ฌถ์œผ๋ ค๊ณ  ํ•  ๋•Œ ๋Œ€๋ถ€๋ถ„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. docker-compose์— COPY ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

COPY / ADD๋Š” ํ™•์‹คํžˆ ํ™˜์˜๋ฐ›๋Š” ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : Dev ๋ชฉ์ ์œผ๋กœ Docker์—์„œ Graylog ์ธ์Šคํ„ด์Šค ์‹คํ–‰. ์ž…๋ ฅ์„ ์ž๋™์œผ๋กœ ์‹œ์ž‘ํ•˜๋ ค๋ฉด JSON ์‚ฌ์–‘์„ / usr / share / graylog / data / contentpacks์— ๋„ฃ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
COPY / ADD ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด YML์—์„œ ํ•œ ์ค„๋กœ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ž‘๋™ํ•˜๊ฒŒํ•˜๋ ค๋ฉด (2018 ๋…„ 10 ์›” 16 ์ผ) ๋ณผ๋ฅจ์„ ํ•ด๋‹น ์ง€์ ์— ๋งˆ์šดํŠธํ•˜๊ณ  ํ•ด๋‹น ํด๋”์˜ ์›๋ณธ ์ฝ˜ํ…์ธ ๋ฅผ ์˜๊ตฌ ๋ณผ๋ฅจ์— ๋ณต์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์กฐ์šฉํ•˜๊ณ  ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ด์ต์„ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ๋“œ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๋„๊ตฌ ์„ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ํ•ด๋‹น ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ devtools ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ€์ ธ ์˜ค๊ธฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

docker cp "${seed_file}" $(docker-compose ps -q devtools):/tmp/seed_file

๋‚ด ์”จ์•—์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋‹ˆ์š”, ๊ณ ์ • ์Šคํ‚ค๋งˆ๋กœ ๊ฐœ๋ฐœ์ž ์ด๋ฏธ์ง€๋ฅผ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ตœ์†Œํ•œ ์›น ๊ฐœ๋ฐœ ํŒจํ„ด์— ์œ„๋ฐฐ๋ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹Œ ์•ฑ ์ด์‹์„ฑ์„์œ„ํ•œ ๊ฒƒ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

docker-compose cp "${seed_file}" devtools:/tmp/seed_file

๋Œ€์ฒด๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋˜‘๊ฐ™์€ ์ผ์„ํ•˜๋Š” ๊ฒƒ์€ ์†๊ธฐ ์ผ ๋ฟ์ด์ง€ ๋งŒ, ๋ฌผ๊ฑด์„ ์„ž๋Š” ๊ฒƒ๋ณด๋‹ค docker-compose ์–ด๋””์—์„œ๋‚˜ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค ...

1) ์ด๊ฒƒ์€ # 3593์˜ ์ค‘๋ณต ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
2) @shin์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ •๊ตํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•ˆํ‹ฐ ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
3) ๊ทธ๋Ÿฌ๋‚˜ Docker์˜ cp ๋ช…๋ น์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@funkyfuture ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋ฐ˜ ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์€ ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•˜์‹ญ์‹œ์˜ค.

k8s์™€ ๊ฐ™์€ "๋ฐ์ดํ„ฐ ์„น์…˜"์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
์˜ˆ๋ฅผ ๋“ค๋ฉด :

services:
  service1:
    image: image.name
    data:
      filename1.ini: |
        [foo]
        var1=val1
        [bar]
        var2=val2
      filename2.yml: |
        foo:
          bar: val1

๋˜๋Š” ๋™์ผํ•˜์ง€๋งŒ volumes: ์„น์…˜

volumes:
  service_config:
    data:
      filename1.ini: |
        [foo]
        var1=val1
        [bar]
        var2=val2

services:
  service1:
    image: image.name
    volumes:
      - service_config:/service/config

@์ •๊ฐ•์ด-

์ด๊ฒƒ์˜ ๋ฌธ์ œ์ ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ ๋  ๋•Œ๋งˆ๋‹ค ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ทผ์‹œ์•ˆ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ์šฉ์–ด). ํ™•์žฅ ์„ฑ์ด ๋งค์šฐ ๋‚ฎ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค (์ปจํ…Œ์ด๋„ˆ๊ฐ€ 10 ๊ฐœ? 20? 100?).

์—ฌ๊ธฐ์„œ ์‹ค์ œ ๋ฌธ์ œ๋Š” ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ์ œํ•œ๋œ ๋น„์ „๊ณผ ์ถฉ๋Œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ ๋œ ๊ธฐ๋Šฅ์„ ๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋””์Šค์ปค๋ฒ„๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋ฐฉ๊ธˆ dockerhub์—์„œ ๊ฐ€์ ธ์˜จ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ Dockerfile์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†์œผ๋ฉฐ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํŽธ๋ฆฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์œ„์— ๋‹ค๋ฅธ ๋ ˆ์ด์–ด๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋Œ€์‹  ์ž‘๋™ํ•˜์ง€๋งŒ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์‹œ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์‚ฌ์šฉ ์‚ฌ๋ก€ :

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๊ฐ ๋ฐ˜๋ณต์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฏธ์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ํ˜ธ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ ๋กญ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉฐ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๊ฒƒ์€ docker-compose๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ ์Šค ์ผ€์ด์Šค๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ Apache ์„œ๋ฒ„์™€ ๊ฐ™์€ ๊ธฐ์„ฑ ์ด๋ฏธ์ง€์—์„œ ๋‚ด ์ด๋ฏธ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์ค‘์— HTML์„ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์–ธ์ œ๋“ ์ง€ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ณต์‚ฌ ์ง€์‹œ๋ฌธ์€ ๋‚ด ์ฝ˜ํ…์ธ ๊ฐ€ ์ƒˆ ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.

BTW ์ €๋Š” ํ˜„์žฌ docker-compose.yaml์—์„œ dockerfiles ๋ฐ ๋นŒ๋“œ ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@tvedtorama-

์‚ฌ์šฉ ์‚ฌ๋ก€ :

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๊ฐ ๋ฐ˜๋ณต์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฏธ์ง€์— ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€๋งŒ ํ˜ธ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์„ค์ •ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•˜๋Š” ๊ฒƒ์ด ๋ฒˆ๊ฑฐ ๋กญ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉฐ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๊ฒƒ์€ docker-compose๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋Ÿฐํƒ€์ž„์ด ์•„๋‹Œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ๊ฐ„์— ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋ ค๋Š” ์š•๊ตฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์žฅ์ ์„ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ‹ฐ์ผ“์„ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ๋…ผ์˜๋ฅผ ํ˜ผ๋™ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ํŒŒ์ผ ์ฃผ์ž…์— ๋Œ€ํ•ด ๋…ผ์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ c0ze-

k8s์™€ ๊ฐ™์€ "๋ฐ์ดํ„ฐ ์„น์…˜"์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
์˜ˆ๋ฅผ ๋“ค๋ฉด :

...

๋‚˜๋Š” ๊ทธ ๊ตฌ์„ฑ์ดํ•˜๋Š” ์ผ์— ์™„์ „ํžˆ ์ ์‘ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์˜ˆ, ๊ทธ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…์ด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋ฐ€์ด์žˆ์„ ๋•Œ (์˜ˆ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ์ด๋ฆ„ / ๋น„๋ฐ€๋ฒˆํ˜ธ / ํฌํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ  ๋„์ปค ์ด๋ฏธ์ง€ (ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„)์— ์–ด๋–ป๊ฒŒ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๊นŒ?

kubernetes ๋ฐ์ดํ„ฐ ์„น์…˜๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์†Œ์Šค ์†Œ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์—ฌ๋Ÿฌ ๋„์ปค ์ด๋ฏธ์ง€์—์„œ ๋™์ผํ•œ ๋น„๋ฐ€์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์œ ์ง€๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ฑ„ํƒ ํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ์ข‹์€ ์•„์ด๋””์–ด์ธ์ง€ ์•„๋‹Œ์ง€์— ๋Œ€ํ•œ ๋Œ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ์„ ํ–‰ ๊ธฐ์ˆ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์—๊ฒŒ์žˆ์–ด์ด ๋ชจ๋“  ๊ฒƒ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ„์— ๋ถˆ๋ณ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ณต์œ ํ•˜๊ธฐ๋ฅผ ์›ํ–ˆ๊ณ , ์™ธ๋ถ€์—์„œ docker-compose๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๊ณ  ๋‹จ์ผ ์ง„์‹ค ์†Œ์Šค์˜ ๊ตฌ์„ฑ์„ ๊ฐ๊ฐ์˜ docker-compose ํด๋” ์•„๋ž˜์˜ Docker ํด๋”. ๋ฌผ๋ก  ์ €๋Š” Docker์— ๋Œ€ํ•œ ๋ถˆ๋ณ€์„ฑ ์ธ์ˆ˜๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค (์˜ˆ : Dockerfile ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์™„์ „ํ•˜๊ณ  ์™„์ „ํ•˜๊ฒŒ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ์ž๋™ํ™”๋ฅผ ์š”์ฒญํ•˜์—ฌ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ญ๋ชฉ์„ ๋ณต์‚ฌํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์›์น™์— ๋น„์ถ”์–ด ์•ฝ๊ฐ„ ๋‚ ์•„๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

ํ† ๋ก ์€ docker-compose๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š”๊ฐ€? ์ด๊ฒƒ์ด ๊ทธ๋Ÿฌํ•œ ์ž๋™ํ™”๋ฅผ ์ •๋‹นํ™”ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ๋Šฆ๊ฒŒ (์˜ˆ : ๋Ÿฐํƒ€์ž„์—) ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋น„๋ฐ€์„ ์ฃผ์ž…ํ•˜๋Š” ์ฑ…์ž„์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ „๋‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋ถ€๋‹ดํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋‚ด ์š”์ ์ด ์ถฉ๋ถ„ํžˆ ์ผ๊ด€์„ฑ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ํฐ ์˜๋ฏธ๊ฐ€ ์—†์ง€๋งŒ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋…ผ์˜ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์•ˆ๋…•ํ•˜์„ธ์š”, ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€ : ์ €๋Š” ์˜คํ”ˆ ์†Œ์Šค Prometheus docker-compose ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (์ €์žฅ์†Œ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์œ ์ง€ ๊ด€๋ฆฌํ•จ). ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ ๋œ ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ : ๊ตฌ์„ฑ์„ ์ œ๋Œ€๋กœ ๋งˆ์šดํŠธ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์›๊ฒฉ ์ปดํ“จํ„ฐ (aws docker-machine ๋˜๋Š” CI / CD runner ๋‚ด๋ถ€)์—์„œ docker-compose๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ณต์‚ฌ / ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. RW ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๋ณผ๋ฅจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. RO-?

์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜์žˆ๋Š” RO ๋ณผ๋ฅจ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์†”๋ฃจ์…˜ : ssh๋ฅผ ํ†ตํ•ด docker ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐํ•˜๊ณ , ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œ / ์—…๋ฐ์ดํŠธํ•˜๊ณ  docker-compose up์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜๋™ ์ผ€์ด์Šค์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ ์ž๋™ํ™”์—๋Š” ๊ณ ํ†ต ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

+1

์œ ์Šค ์ผ€์ด์Šค : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐœ๋ฐœ ๋„์ปค ๋จธ์‹ ์ด ์žˆ์œผ๋ฉฐ์ด๋ฅผ ์„ค์ •ํ•  ๋•Œ๋งˆ๋‹ค ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋คํ”„๋ฅผ ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํšจ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  1. extern์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  2. ์‹คํ–‰์ค‘์ธ ์ด๋ฏธ์ง€์— ZIP์„ ๋ณต์‚ฌํ•˜๊ณ  ์••์ถ•์„ ํ’‰๋‹ˆ ๋‹ค.
  3. ๋ณผ๋ฅจ ๋‚ด์—์„œ db-restore๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  4. db ๋คํ”„๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ํฐ ๋ฌธ์ œ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋คํ”„ ๋ฒ„์ „์ด ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2 ๋‹จ๊ณ„๋Š” ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค ํ•ญ์ƒ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๊ฐ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๋คํ”„ ์œ„์น˜ / ๋ฒ„์ „์ด ํฌํ•จ ๋œ ์ž์ฒด ์ž‘์„ฑ ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. Docker๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ํŠน์ • ํŒŒ์ผ ์œ„์น˜๋กœ ์ด๋ฏธ์ง€๋ฅผ ์กฐ๋ฆฝํ•˜๋„๋ก ํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ๋ฒ„์ „์ด ํ•„์š”ํ•  ๋•Œ ์ฆ‰์„์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ์„ ์›ํ•˜์ง€๋„ ์•Š๊ณ  ๋‚ด ์ด๋ฏธ์ง€๋ฅผ ๋กค๋งํ•˜๊ณ  ์‹ถ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“  ํ›„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ปจํ…Œ์ด๋„ˆ์— ๊ฐ„๋‹จํ•œ ๋ฐฉ์–ด์šฉ ๋ณต์‚ฌ๋ณธ์„ ์ €์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๊นŒ?
๋งค์šฐ ๊ธด ์„ค์ • ํŒŒ์ผ์ด์žˆ๋Š” django ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ๋Š” ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๋‹จ์ผ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ENV๋กœ ๋ชจ๋“  ์„ค์ •์„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋ฐ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ต๊ณ  ๋‹จ์ผ ๋ณต์‚ฌ ๋ช…๋ น์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” # 6643์„ ์—ด์—ˆ๊ณ  ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์•ˆํ‹ฐ ํŒจํ„ด์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ, ์ˆ˜๋งŽ์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฆ‰์‹œ ์ถ”๊ฐ€ / ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ.

@์ •๊ฐ•์ด-

์ด๊ฒƒ์˜ ๋ฌธ์ œ์ ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ ๋  ๋•Œ๋งˆ๋‹ค ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ทผ์‹œ์•ˆ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ์šฉ์–ด). ํ™•์žฅ ์„ฑ์ด ๋งค์šฐ ๋‚ฎ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค (์ปจํ…Œ์ด๋„ˆ๊ฐ€ 10 ๊ฐœ? 20? 100?).

์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ docker-compose exec ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

    --index=index     index of the container if there are multiple
                      instances of a service [default: 1]

cp ๋™์ผํ•œ ๋™์ž‘์„ ์‹œ๋„ํ•ด์•ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

IMHO exec ๋Š” cp ๋งŒํผ ์ž„์‹œ์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ํ•ญ์ƒ "๊ฐœ๋ฐœ"๋ช…๋ น์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์€ ์ผ์‹œ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

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

์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ํ•˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ํ•˜๋Š” ์ผ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ, ๋‚˜๋Š” ๋‹น์‹ ์ด ์ผ์ด ๋ฏธ์ณ๊ฐ€๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ์—ญํ• ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋‹น์‹ ์˜ ๋น„์ „์— ๋”ฐ๋ผ ๋„๊ตฌ๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๋ ‡๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ๋ชจ๋“  ์ง€์˜ฅ์ด ํ’€๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ ๋ง์„ ํ•  ๋•Œ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ๋งํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...

  1. ๋‚˜๋Š” ๋‚ด๊ฐ€ ๋งํ•˜๊ฑฐ๋‚˜ ์“ธ ์ˆ˜์žˆ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ•์˜๊ฐ€ ์ •๋ง๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "๊ทผ์‹œ์•ˆ์ "์ด ๋‹น์‹ ์„ ๋ถˆ์พŒํ•˜๊ฒŒํ•ด์„œ ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์ด ์„ค๊ณ„ ์ƒ Dockerfile์— ์†ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‚˜๋Š” ๋” ์ด์ƒ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋” ์ด์ƒ ์ œ์–ด ํ•  ์ˆ˜์—†๋Š” ์ผ์— ๋Œ€ํ•ด @ -ing์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.
  1. ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋‚ด๊ฐ€ crazycodr ํŽธ์ด๋ผ๊ณ  ๋งํ•ด์•ผํ•œ๋‹ค ... ์œ ์šฉํ•˜๊ณ  ์‹ค์ œ์ ์ด๊ณ  ํ˜„์‹ค์ ์ธ ๋Œ€์•ˆ์„์ฃผ์ง€ ์•Š๊ณ  ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•œ ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ "๋ฐ˜ ํŒจํ„ด"์œผ๋กœ ๋ฌด์‹œํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋น„์šฐํ˜ธ์ ์ด๋ฉฐ ์†”์งํžˆ ์•ฝ๊ฐ„ ๋ฌด๋ก€ํ•œ ์ผ์ด๋‹ค.
  2. ๋ฉ”์ธํ…Œ์ด๋„ˆ์ด๋“  ์•„๋‹ˆ๋“ , github์˜ ํ† ๋ก  ๋ถ€๋ถ„์— ์ฐธ์—ฌํ–ˆ๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ“๊ธ€์— ๋Œ“๊ธ€์„๋‹ค๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์‚ด์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋ฐ›์•„ ๋“ค์—ฌ...

๋‹ค์‹œ ๊ฐ€์ ธ ์˜ค์ž. ์—ฌ๊ธฐ์— ์ •์งํ•œ ๊ธฐ์ˆ ์  ์ธ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์ปค ์Šคํƒ์—๋Š” "configs"์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ๋„์ปค ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์•„๋‹Œ ์„œ๋น„์Šค ์šฉ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ˆ˜์ค€์ด ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์–ป์„ ์ˆ˜์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Docker ์Šคํƒ์€ ๊ตฌ์„ฑ ํ”„๋กœ๋น„์ €๋‹์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๊นŒ? ํ•ด๋‹น ๊ตฌํ˜„์„ docker-compose๋ฅผ ์œ„ํ•ด ๋ณต์ œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ์–ธ๊ธ‰ ๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ์ ˆ๋ฐ˜ ์ด์ƒ์ด ๊ตฌ์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ฐ€๋ ค์šด ๋ถ€๋ถ„ ๋งŒ ๊ธ์–ด๋„ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” Google์˜ ๋„๋ฉ”์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›Œ๋“œ ํ”„๋ ˆ์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Google์—์„œ ํ™•์ธํ•  ํŒŒ์ผ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ ค๋ฉด ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ๋ฌผ์ด "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ๋ง์€ ๊ฑฐ์˜ ๋ง์ด๋˜์ง€ ์•Š์œผ๋ฉฐ ์—˜๋ฆฌํŠธ์ฃผ์˜์˜ ๋ƒ„์ƒˆ๊ฐ€๋‚ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : yikes, ๋” ์ฝ๊ธฐ, ๊ทธ๊ฐ€ ๋” ์ด์ƒ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ์‹ ์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋”ฐ๋ผ์„œ ์ž‘์€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ฏธ๋ฆฌ ๋นŒ๋“œ ๋œ ์ด๋ฏธ์ง€ (์˜ˆ : nginx ๋˜๋Š” mariadb )์— ๋ณต์‚ฌํ•˜๋ ค๋ฉด ์ด์ œ ๋‚ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋ณต์ œํ•ด์•ผํ•œ๋‹ค๊ณ  ๋ง์”€ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋œ ๋””์Šคํฌ ๊ณต๊ฐ„ (์›๋ณธ ์ด๋ฏธ์ง€ ๋ฐ ๊ตฌ์„ฑ๋œ ์ด๋ฏธ์ง€)?

์ด๊ฒƒ์€ ๊ธฐ๋Šฅ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋œ ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ณต์ œ

Docker๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฐ€ ๋งํ•œ ๊ฒƒ ์ค‘์—์„œ ๊ฐ€์žฅ ์‚ฌ์†Œํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋Šฅ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด๊ธฐ ๋•Œ๋ฌธ์—๋„ ์ปค๊ฐ€ ์„ฑ์žฅํ•จ์— ๋”ฐ๋ผ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์— ์™”๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ์žฅํ•˜๊ณ  ์„ฑ์žฅํ•  ๊ฒƒ์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ์ƒ์‹์œผ๋กœ ์ธํ•ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฐ€ ๋งํ•œ ๊ฒƒ ์ค‘์—์„œ ๊ฐ€์žฅ ์‚ฌ์†Œํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ˆ˜๋Š” ์ด์™€ ๊ฐ™์ด ๊ธฐ๋ก๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ์—ฌ๊ธฐ์„œ "๋ฐ˜ ํŒจํ„ด"์ฃผ์žฅ์ด ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ์ „๋žต ( @washtubs ํฌ์ธํŠธ ์ฐธ์กฐ)์—์„œ ์œ ํšจ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”์ด ์ „๋žต์— ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ์‹  ๊ณต๊ฒฉ์„ ์ •๋‹นํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ docker-compose ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ docker-py ๋Œ€ํ•œ @ shin-์˜ ๊ณผ๊ฑฐ ๋…ธ๋ ฅ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์—˜๋ฆฌํŠธ์ฃผ์˜์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ์ด์œ ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์šฐ์Šค๊ฝ ์Šค๋Ÿฌ์šด์ง€์— ๋Œ€ํ•œ ๋งŽ์€ ์˜๊ฒฌ์ด ์žˆ์œผ๋ฉฐ ๋ชจ๋‘ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

์ƒ์‹๊ณผ ๋…ผ๋ฆฌ๋Š” ๋‹น์‹ ์˜ ๊ฐ์ •์ด๋‚˜ ์—˜๋ฆฌํŠธ์ฃผ์˜์— ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹น์‹ ์ด ๋งŒ๋“  ์•ˆํ‹ฐ ํŒจํ„ด.

์˜ˆ, @robclancy , ์‹œ๋ฏผ FFS๋กœ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š”์ด ๊ธฐ๋Šฅ์„ ์›ํ•˜์ง€๋งŒ, ๋‹น์‹ ์ด ํ•  ๋ชจ๋“  ๊ฒƒ์ด ๊ด€๋ฆฌ์ž์—๊ฒŒ ๋˜ฅ์„ ๋งํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, reddit์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. @funkyfuture ์˜ ์ด์ „ ์ˆ˜์ •์ด ์™„์ „ํžˆ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ docker-compose์˜ ๋Œ€์•ˆ์„ ๊ตฌํ˜„ํ•  ์ˆ˜์žˆ๋Š” docker-py์— ๋Œ€ํ•œ @ shin-์˜ ๊ณผ๊ฑฐ ๋…ธ๋ ฅ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ถ„๋ช…ํžˆ ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ํŠนํžˆ ๊ทธ๋Ÿฌํ•œ ๋ฏธ์„ธํ•œ ํ–ฅ์ƒ์„ ์œ„ํ•ด docker-compose์˜ ํฌํฌ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ผ์–ด๋‚  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ข‹์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ PR์„ ์ œ์ถœํ•˜๋ฉด ์‹ค์ œ๋กœ ๊ณ ๋ ค๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋„์ปค ์ž‘๊ณก ํŒ€์ด ๋ฐ›์•„๋“ค์ด์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ๋‹จํ˜ธํ•˜๊ฒŒ ๊ฒฐ์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋„์ปค ์Šคํƒ ๊ตฌ์„ฑ ๊ณผ ํ˜ธํ™˜๋˜๋Š” ๊ตฌ์„ฑ ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ณ ๋ คํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋ ˆ์ผ์„ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค ... ์„ค๋ช…์ด์—†๋Š” '๋ฐ˜ ํŒจํ„ด'์€ '๋ฐ˜ ํŒจํ„ด'์„ ๋ฐ˜๋ฐ• ํ•  ์ˆ˜์—†๋Š” ๋งค์šฐ ๊ด‘๋ฒ”์œ„ํ•œ ์ •์˜๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. '์•ˆํ‹ฐ ํŒจํ„ด'์ด ์–ด๋Š์ชฝ์— ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ๋„ ์—†์Šต๋‹ˆ๋‹ค. docker ๋˜๋Š” docker-compose.

๋ฐ˜ ํŒจํ„ด ์‘๋‹ต์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์ •์˜๋Š” ํ™˜์ƒ์ ์ด๊ณ  ๋งŽ์€ ํ‰๊ฐ€๋ฅผ๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๊ณ„์† ์„ฑ์žฅํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์„ค์ •๋œ ์ •์˜๊ฐ€ ์กด์žฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Docker compose ์Šคํƒ์—์„œ ์‹คํ–‰๋˜๋Š” ์  ํ‚จ์Šค ํŒŒ์ดํ”„ ๋ผ์ธ์—์„œ ์ƒ์„ฑ ๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์€ ์ž„์˜ ์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ docker cp ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚˜๋Š” ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

docker cp $(docker-compose -f docker-compose.development.ci.yml ps -q test):/app/tests_output ./tests_output

volumes: - ./folder_on_host/ :/folder_in_container/ ๊ฐ€์š”?
๋‚ด compose ํŒŒ์ผ์—์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…Œ์ด๋„ˆ (COPY์™€ ๋™์ผ)๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋„ ๋˜‘๊ฐ™์ดํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. csv ํŒŒ์ผ์ด์žˆ๋Š” ํด๋”๊ฐ€ ์žˆ์œผ๋ฉฐ logstash์— ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์–ด๋Š ํด๋”?
ํ˜„์žฌ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
./path/to/storage:/usr/share/logstash/ ๋ฐ์ดํ„ฐ : ro

์–ด๋–ค ์ œ์•ˆ์ด๋ผ๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ shin-์ด ํ‹ฐ์ผ“์€ ์ด์ œ 1.5 ๋…„์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 160 ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๊ณ  ๋งํ•  ๋•Œ-์•„๋งˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ตฌํ˜„๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜๊ธฐ ์œ„ํ•ด ๋˜ ๋ฌด์—‡์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

๊ณ ๊ฐ์˜ ๋ง์„ ๋“ฃ์ง€ ์•Š๋Š” @isapir ๋Š” ๊ณง ์‚ฌ์—…์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๊นŒ์šด ์žฅ๋ž˜์— ์ƒ์‚ฐ ์ค€๋น„๊ฐ€ ๋œ ๋„์ปค ๋Œ€์•ˆ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ shin-์ด ํ‹ฐ์ผ“์€ ์ด์ œ 1.5 ๋…„์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. 160 ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๊ณ  ๋งํ•  ๋•Œ-์•„๋งˆ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

๐Ÿ˜† ๐Ÿคฃ ๐Ÿ’ฏ ๐Ÿฅ‡ ๐Ÿ˜ฒ ๐Ÿ˜ฎ

๋˜ํ•œ,

๋‚˜๋Š” ๋” ์ด์ƒ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋” ์ด์ƒ ์ œ์–ด ํ•  ์ˆ˜์—†๋Š” ์ผ์— ๋Œ€ํ•ด @ -ing์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.

@sfuerte ์ด๋ฏธ Docker-Compose๋ฅผ ๋Œ€์ฒด ํ•œ Kubernetes๋ผ๋Š” ์ž‘์€ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์— ๋Œ€ํ•œ ํƒœ๋„๊ฐ€ ๋” ๊ธ์ •์  ์ด์—ˆ ๋”๋ผ๋ฉด ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด ๋‚ฌ์„๊นŒ์š”?

๊ทธ๋“ค์˜ ์œ ํ–‰์–ด์— ๋Œ€์‘ํ•˜๋ ค๋ฉด ์œ ํ–‰์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ์ „๋ถ€์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์™„์ „ํžˆ pro-pattern ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์ด์ ์€ ๋‚ด๊ฐ€ ์–ด๋ฆฌ์„์€ ์ผ์„ ๋งŒ๋“ค์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ๋ฌธ์ œ์—๋Š” ๋ถ„๋ช…ํžˆ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์˜ ์žฅ์ ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋งŽ์€ ์˜๊ฒฌ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  anti-pattern ์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ shin- ํ˜„์‹ค์— ๊ทผ๊ฑฐ์—†์ด์ด ํ—›์†Œ๋ฆฌ ๋ฐ˜ ํŒจํ„ด ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์‹œ์ž‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์— ํƒœ๊ทธ๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ๋‹น์‹ ์ด ์ผ์œผํ‚จ ๊ฒƒ์— ๋Œ€ํ•ด ์šธ์ง€ ๋งˆ์„ธ์š”.

k ์žฌ๋ฐŒ๋‹ค

๋‚ด ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • "๊ฐœ๋ฐœ"์ค‘์— ์†Œ์Šค ์ฝ”๋“œ๋ฅผ "๋ณผ๋ฅจ"์œผ๋กœ ๋นŒ๋“œํ•˜์—ฌ ๊ฐœ๋ฐœ ์ค‘์— ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋„๋กํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
  • ์•ฑ์ด ์ถœ์‹œ ๋  ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ๊ณ  "๋ฐฐํฌ"ํ•ด์•ผ ํ•  ๋•Œ ๋ณผ๋ฅจ ๋Œ€์‹  ๋ณต์‚ฌ ๋œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ dev ์šฉ compose ํŒŒ์ผ 1 ๊ฐœ์™€ ํ”„๋กœ๋•์…˜ ์šฉ compose ํŒŒ์ผ 1 ๊ฐœ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋„์ปค ํŒŒ์ผ์— "๋ณผ๋ฅจ"์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋„์ปค ํŒŒ์ผ์— "๋ณต์‚ฌ"๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ญ”๊ฐ€ ๋น ์กŒ๋‚˜์š”?

@ shin- ์ด๊ฒƒ์€ ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@hems , ์™„๋ฒฝํ•œ ์„ธ์ƒ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋…๋ฆฝํ˜• ๋„์ปค ์ด๋ฏธ์ง€๋กœ ๋ฐฐํฌ๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฐํฌํ•˜๋ ค๋Š” ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ Dockerfile ์ผ๋ถ€ ์—ฌ์•ผํ•˜๋ฏ€๋กœ ์ด๋ฏธ์ง€์— ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Dockerfile ์— ์†Œ์Šค๋ฅผ / var / www์— ๋„ฃ์œผ๋ ค๋ฉด

COPY my-app-src /var/www

์†Œ์Šค๋Š” ํŠน์ • ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ฏ€๋กœ Docker ์ด๋ฏธ์ง€์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์‰ฌ์šด.

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

docker-compose ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ์ง„์ง€ํ•˜๊ณ  ๊ณต์ •ํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ์ตœ์ข… ํŒ๊ฒฐ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋Š” ์˜์›ํžˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ์ค‘์š”ํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์•Œ๋ฆผ ์ˆ˜์‹ ์— ์ง€์ณค์Šต๋‹ˆ๋‹ค.

COPY my-app-src /var/www

๊ทธ๊ฒŒ ์ œ๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๋„์ปค ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ VOLUMES๋ฅผ ์ด๋ฏธ์ง€์— ๋งˆ์šดํŠธํ•˜๊ณ  ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์ค‘์— ํŒŒ์ผ์„ ์ด๋ฏธ์ง€์— ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ณผ๋ฅจ์„ ๋ณต์‚ฌํ•˜๊ณ  ๋งˆ์šดํŠธ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. docker-compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ dev ์šฉ compose ํŒŒ์ผ 1 ๊ฐœ์™€ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์šฉ ํŒŒ์ผ 1 ๊ฐœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Compose๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ํŒ€์—์„œ ์ผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ์ด ํ† ๋ก ์— ์ฐธ์—ฌํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด Dockerfiles ๋ฐ Compose ํŒŒ์ผ์˜ ์ฑ…์ž„์„ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Dockerfile์€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ์œ„ํ•œ ๋ ˆ์‹œํ”ผ์ด๋ฉฐ ์„œ๋น„์Šค ์ž‘๋™์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ”์ด๋„ˆ๋ฆฌ / ๊ธฐํƒ€ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค : ๋น„๋ฐ€ (์˜ˆ : ์ž๊ฒฉ ์ฆ๋ช…), ๊ตฌ์„ฑ (์˜ˆ : ๊ตฌ์„ฑ ํŒŒ์ผ) ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ (์˜ˆ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ). ๋น„๋ฐ€ ๋ฐ ๊ตฌ์„ฑ์€ ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค.

์ž‘์„ฑ ํŒŒ์ผ์€ ์„œ๋น„์Šค ์„ธํŠธ๊ฐ€ ๋ฐฐ์น˜๋˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Compose ํ˜•์‹์€ ๋‹จ์ผ ์—”์ง„ (์˜ˆ : docker-compose )๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Swarm ๋ฐ Kubernetes์™€ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋œ ํ™˜๊ฒฝ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Compose ํ˜•์‹์˜ ๋ชฉํ‘œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ ํ•œ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€์—†์ด ์กฐ์ • ๋œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ชฉํ‘œ๋Š” ๊ฐ ํ™˜๊ฒฝ์ด ๋ณผ๋ฅจ ๋ฐ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋กœ ์ธํ•ด ํ˜•์‹์—์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ์‚ฌํ•ญ์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

์ด์™€ ๊ฐ™์ด Dockerfile ๋ฐ Compose ํŒŒ์ผ์˜ ์ฑ…์ž„์„ ์ค„์ด๋ฉด ๊ฐ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ (Dockerfile)์˜ ๋‚ด์šฉ, ์„œ๋น„์Šค๊ฐ€ ๋ฐฐํฌ๋˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹ (Compose ํŒŒ์ผ)๊ณผ ๊ฐ™์€ ์šฐ๋ ค ์‚ฌํ•ญ์„ ์ž˜ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์ด๋ฏธ์ง€์— ์ €์žฅํ•˜๋Š” ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ๊ฐ ์˜ˆ์™ธ๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€์˜ ๊ฒฝ์šฐ, ๋„๋‚œ ๋‹นํ•  ์ˆ˜ ์žˆ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฏธ์ง€๋กœ ๊ตฌ์›Œ์ง€๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Docker Secrets ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฐํฌํ•˜๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์•ฝ๊ฐ„ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„์‹œ ์ปจํ…Œ์ด๋„ˆ์˜ tmpfs ๋””๋ ‰ํ† ๋ฆฌ์— ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธ๋˜๋Š” ํŒŒ์ผ์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์ด ๋””๋ ‰ํ† ๋ฆฌ๋Š” ํ•ญ์ƒ /run/secrets/ ์ด๊ณ  ํŒŒ์ผ์€ ๋น„๋ฐ€์˜ ์ด๋ฆ„์ด๋ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๋น„๋ฐ€์€ Swarm, ์—”์ง„ ๋งŒ ( docker-compose ) ๋ฐ Kubernetes์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ Docker Configs๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋น„๋ฐ€๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ์–ด๋””์—๋‚˜ ์žฅ์ฐฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Swarm ๋ฐ Kubernetes์—์„œ๋Š” ์ง€์›๋˜์ง€๋งŒ docker-compose ์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋ฉฐ์ด ๋ฌธ์ œ์— ๋‚˜์—ด๋œ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์™ธ๋ถ€์— ์ €์žฅํ•ด์•ผํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์œผ๋ฏ€๋กœ ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ ํ”„๋ ˆ์ž„์œผ๋กœ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž‘์„ฑ ํ˜•์‹์— copy ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ์š”, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ง์ด๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • docker-compose ์— configs ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ? ๋„ค, ๊ทธ๋ž˜์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • docker-compose cp ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ docker container cp ์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์— ์กฐ๊ฑด๋ถ€๋กœ ํŒŒ์ผ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ์ž…๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„์— ์ž๊ฒฉ ์ฆ๋ช…์„ ์„œ๋น„์Šค์— ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ๋น„๋ฐ€์ž…๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„์— ๊ตฌ์„ฑ ์ •๋ณด๋ฅผ ์„œ๋น„์Šค์— ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ๋„๊ตฌ๋“ค์ด์ด ์Šค๋ ˆ๋“œ์—์„œ ์ œ๊ธฐ ๋œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

์ด ์‹ค์€ ๊ฝค ๋œจ๊ฒ์Šต๋‹ˆ๋‹ค. ๊ฐ GitHub ํ•ธ๋“ค ๋’ค์—๋Š” ์‹ค์ œ ์‚ด์•„์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉฐ ๊ทธ๋“ค์€ ์•„๋งˆ๋„ ์ตœ์„ ์„ ๋‹คํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค (์ขŒ์ ˆ๊ฐ์ด ๋‚˜ํƒ€๋‚˜๋”๋ผ๋„). ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ Compose์— ์—ด์ •์ ์ด๋ฉฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ณ„์† ๋ฒˆ์ฐฝํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

docker-compose cp ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose exec ์™€ ๊ฐ™์€ ์œ ์šฉํ•œ ํŽธ๋ฆฌํ•จ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ chris-crone ๋†€๋ผ์šด ์‘๋‹ต, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ชจ๋“  ์‚ฌ๋žŒ์„ ๋Œ€๋ณ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ configs ์ง€์›์ด ์—ฌ๊ธฐ์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€์‹ฌ์„ ์ถฉ์กฑ ์‹œํ‚จ๋‹ค๋Š” ์ธ์ƒ์„๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ด์Šˆ๊ฐ€ ์—ด๋ฆด๊นŒ์š”?

๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋Œ€์•ˆ์„ ์ œ๊ณตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ์— ๋Œ€ํ•ด ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค.

configs ์ง€์›์ด ์—ฌ๊ธฐ์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€์‹ฌ์„ ์ถฉ์กฑ ์‹œํ‚จ๋‹ค๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๊ธฐ์˜ ๋Œ€๋‹ค์ˆ˜๊ฐ€ Swarm์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  config ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํ˜„์žฌ Swarm์ด ํ•„์š”ํ•˜์ง€๋งŒ @ chris-crone์˜ ์˜๊ฒฌ์—์„œ ...

์ด๋“ค์€ Swarm ๋ฐ Kubernetes์—์„œ ์ง€์›๋˜์ง€๋งŒ docker-compose์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋ฉฐ์ด ๋ฌธ์ œ์— ๋‚˜์—ด๋œ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

... ๋‚˜๋Š” ์ด๊ฒƒ์ด docker-compose์—์„œ ๊ตฌํ˜„ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (sans Swarm)

Compose ํ˜•์‹์˜ ๋ชฉํ‘œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ ํ•œ ๋‹ค์Œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€์—†์ด ์กฐ์ • ๋œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ์•ฑ์—๋Š” ์ฆ‰์„์—์„œ ์กฐ์ •ํ•ด์•ผํ•˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์ƒ๋‹นํžˆ ๋งŽ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ (์‹œ๊ฐ„ ๋ฐ ๋น„์šฉ ํ˜„๋ช…ํ•œ) ๋ฐฉ๋ฒ•์€ ๋ณผ๋ฅจ ํ‚ค๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ •ํ™•ํ•œ ์‚ฌ๋žŒ์ด ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์‹œ๊ฐ„์—).

Swarm ๋ฐ config๋Š” ๋‚˜์—ด๋œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์‹ค์ œ๋กœ ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. compose๊ฐ€ ์ด๋ฏธ docker์—์„œ ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— "๋ถ„๋ฆฌ ์šฐ๋ ค"๋„ ์ ์šฉ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ž˜ํผ๋Š” ๋ถ„๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค ... ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์—๊ฒŒ ์กฐ๊ธˆ ๋” ํ™•์žฅํ•˜๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

https://github.com/docker/compose/issues/6643

๊ทธ๊ฒƒ์œผ๋กœ ํ•ดํ‚ค๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค .. ์ƒˆ ํ‚ค ์•„๋ž˜์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ๋‹จ์ผ ๋ณผ๋ฅจ์— ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ  ๊ฐ๊ฐ์˜ ๋‚ด๋ถ€ ๊ฒฝ๋กœ์— ๋งคํ•‘๋˜๋Š” ๋ณผ๋ฅจ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์— ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•œ ๋‘ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š”
๊ฐœ๋ฐœ ํ™˜๊ฒฝ. ์‚ฌ๋žŒ๋“ค์€ ์†Œ์Šค๋กœ ์œ ์—ฐํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€์— ์ฝ”๋“œ๊ฐ€ ํƒ‘์žฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋Š” ๊ฐœ๋ฐœ์— ๋”ฐ๋ผ ์ง„ํ™”ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฏธ์ง€๋ฅผ ์ง€์†์ ์œผ๋กœ ์žฌ ๊ตฌ์ถ• ํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ ์‹œ๊ฐ„. ๊ทธ๊ฒŒ ๋‚ด ์‹œ๋‚˜๋ฆฌ์˜ค์ด๊ณ  ๋‚˜๋Š” ์ด๊ฒƒ์ด
์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ตฝ๋Š” ํ”„๋กœ๋•์…˜ ์ด๋ฏธ์ง€์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
(์ปดํŒŒ์ผ๋˜์ง€ ์•Š์€ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ) ์ด๋ฏธ์ง€์— (๋ฐ
๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์‹œ, ๋‚˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค, ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ๋‚ด ์˜†์— ์žฅ์ฐฉํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค) ๋˜๋Š” ๋‹น์‹ ์€
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ตœ์ข… ์ด๋ฏธ์ง€์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‹œ์ ์—์„œ
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋งค์šฐ ์ด์‹์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ชจ๋‘๊ฐ€ ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค! ๋ฌธ์ œ๋Š” ๋„์ปค ์ž‘์„ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
dev๋Š” ์‹œ๊ฐ„์„ ๋“ค์—ฌ ์‚ฌ๋ก€๋ฅผ ์ฝ๊ณ  ํ•„์š” ์‚ฌํ•ญ์„ ์ดํ•ด ํ–ˆ์Šต๋‹ˆ๊นŒ? ์žˆ์Šต๋‹ˆ๋‹ค
์ด๋ก ์ƒ ์—ฌ๊ธฐ์—๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ๋งŒ
์กด๊ฒฝ๋ฐ›์Šต๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋ฐฐ์šด ๊ฒƒ์„ ์—ฌ๊ธฐ๋กœ ๊ฐ€์ ธ์˜ค๊ณ 
๋‹ค์Œ์ด ์žˆ์œผ๋ฉฐ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋งค์šฐ ์ž˜ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ์€ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ํ•˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค.
์ค‘์š”ํ•œ ๊ทธ๊ฒƒ์œผ๋กœ

๊ฑด๋ฐฐ์™€ ํ–‰๋ณตํ•œ ์—ฐ์†์„ฑ!
แง

2019 ๋…„ 6 ์›” 6 ์ผ ๋ชฉ์š”์ผ 10:55์— jadon1979 [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ž‘์„ฑ ํ˜•์‹์˜ ๋ชฉํ‘œ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ ํ•œ ํ›„ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋œ ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.
๊ฑฐ์˜ ๋˜๋Š” ์ „ํ˜€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณต์žกํ•œ ์•ฑ์—์„œ๋Š” ํ•„์š”ํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์ด ์ƒ๋‹นํžˆ ๋งŽ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰์„ ์กฐ์ •. ํ˜„์žฌ ๊ฐ€์žฅ ํšจ์œจ์ ์ธ (์‹œ๊ฐ„ ๋ฐ ๋น„์šฉ ํ˜„๋ช…ํ•œ) ๋ฐฉ๋ฒ•
๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ฒƒ์€ ๋ณผ๋ฅจ ํ‚ค๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ •์ƒ์ ์ธ ์‚ฌ๋žŒ์ด
์—ฌ๋Ÿฌ ๊ตฌ์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ..
๊ทธ๋“ค์€ ๊ฐœ๋ฐœ ์‹œ๊ฐ„์— ๋ˆ์„ ์“ฐ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” ์ƒ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค).

Swarm ๋ฐ config๋Š” ์‹ค์ œ๋กœ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ์ž‘์„ฑํ•˜์—ฌ "๊ด€์‹ฌ์˜ ๋ถ„๋ฆฌ"๋„ ์ ์šฉ๋˜์ง€ ์•Š์Œ
๋„์ปค์—์„œ ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๋‹จ์ˆœํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋ž˜ํผ๋Š” ์•„๋‹™๋‹ˆ๋‹ค
๋ถ„๋ฆฌ ... ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ์กฐ๊ธˆ ๋” ํ™•์žฅํ•˜๋ผ๊ณ  ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ...

6643 https://github.com/docker/compose/issues/6643

๊ทธ๊ฒƒ์œผ๋กœ ํ•ดํ‚ค๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค .. ์•„๋ž˜์˜ ๋ชจ๋“  ํŒŒ์ผ์ด ๋ณผ๋ฅจ ๊ธฐ๋Šฅ์„ ํ™•์žฅ
์ƒˆ ํ‚ค๋Š” ๋‹จ์ผ ๋ณผ๋ฅจ์— ๋™์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๊ณ 
๊ฐ๊ฐ์˜ ๋‚ด๋ถ€ ๊ฒฝ๋กœ ...

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/5523?email_source=notifications&email_token=ABBR3OMQH62242SM4QN5Y7TPZEQP7A5CNFSM4EKAVONKYY3PNVWWK3TUL52HS4DFVREXG43VMVBWPZGODW2995ZLOPWSZGODMVXHJKTissue ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/ABBR3OMOZFZ47L6ITHPF2TDPZEQP7ANCNFSM4EKAVONA
.

ROOT.war ์ด ์•„๋‹Œ .war์—์„œ ๋‚ด ์•ฑ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด docker Tomcat ํ™˜๊ฒฝ์„ ๊ฐ€๋™ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ ค๋ฉด Tomcat์˜ webapps ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•˜๊ณ  ํ˜„์žฌ ๋ฐ”์ธ๋”ฉ ๋œ ํฌํŠธ 8005/9์—์„œ ์‹คํ–‰๋˜๋„๋ก ROOT๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. '๋ถˆ๋ฒ• ์•ก์„ธ์Šค'์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€์žˆ๋Š” ํฌํŠธ์˜ ๋ฆฌ ๋ฐ”์ธ๋”ฉ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ž„์‹œ ํ…Œ์ŠคํŠธ ๋นŒ๋“œ์ด๋ฏ€๋กœ Dockerfile์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ docker-compose ์—์„œ ์›ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋ฟก๋ฟก

๋‚˜๋Š” ๋‚ด๊ฐ€ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ๋Œ€๋ณ€ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ตฌ์„ฑ ์ง€์›์ด ์—ฌ๊ธฐ์— ๋Œ€ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€์‹ฌ์„ ์ถฉ์กฑ ์‹œํ‚จ๋‹ค๋Š” ์ธ์ƒ์„๋ฐ›์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ด์Šˆ๊ฐ€ ์—ด๋ฆด๊นŒ์š”?

์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•„์ง ๋ฌธ์ œ๊ฐ€์—†๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ๊ฐœ์ธ ํŒ€ ์ถ”์ ๊ธฐ์— ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ

... ๋‚˜๋Š” ์ด๊ฒƒ์ด docker-compose์—์„œ ๊ตฌํ˜„ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ฝ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (sans Swarm)

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๊ธฐ์ดˆ์ ์ธ ๋น„๋ฐ€ ์ง€์›์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๋ˆ„๋ฝ ๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ "๋ฐ˜ ํŒจํ„ด"์€ dockerfile์˜ ์ง„์ž… ์  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋งˆ์šดํŒ… ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ฒˆ, ๊ฐ€๊ธ‰์ ์ด๋ฉด ๊ณต์‹์ ์œผ๋กœ ๋นŒ๋“œ๋˜๊ณ  ์‚ฌ์šฉ ์‹œ์ , ์ฆ‰ docker-compose์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ๊ตฌ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋„์ปค ์‚ฌ๋žŒ๋“ค์ด ๊นจ๋‹ซ์ง€ ๋ชปํ•˜๋Š” ํ•œ "Dockerfile"์ด ์ „์ฒด ๋„์ปค ๊ฐœ๋…์—์„œ ๊ฐ€์žฅ ํฐ ๋ฐ˜ ํŒจํ„ด์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“  ๊ฒƒ์ด ์™„์ „ํžˆ ์ฝ์„ ์ˆ˜์—†๊ณ  ๊ด€๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„์ปค์™€ ๊ด€๋ จ๋œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ทธ๋“ค์ด ์•„๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฒ„๋ฆด ๋•Œ ์ •๋ง ๋‚˜๋ฅผ ์›ƒ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค!

Dockerfile์€ ์‹ค์ œ๋กœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋˜๋Š” make์™€ ๊ฐ™์€ ๋นŒ๋“œ ์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ •์ƒ์ ์ธ ๋””๋ฒ„๊น… ๋ฐ ์ •๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜ ์ž์‹ ์„ ์œ„ํ•ด ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋™์ผํ•œ DockerFile์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค!). ๋‹ค๋ฅธ ์šฉ๋„๋กœ DockerFile์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ค์ œ๋กœ๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ด๋ผ๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  "๊ตฌ์„ฑ ์ง€์›"์ด ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ณณ์— ๊ตฌ์กฐ๋ฅผ ๋ถ€๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๋งˆ์šดํŠธ๋ฅผ / etc / nginx๋ผ๊ณ  ๋งํ•˜๋„๋ก ๋ฐ”์ธ๋“œํ•˜๋ฉด ๊ตฌ์„ฑ์„ ์กฐ์ •ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก rw ์—ฌ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ผ๋ช… envsubst). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž…๋ ฅ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค (๋ถˆ๋ณ€ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•จ) ... ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ตฌ์„ฑ ์ „์ฒด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฐ˜ ํŒจํ„ด์„ ์–ป์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋‹ค์‹œ ์ƒ์„ฑ ํ•  ๋•Œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๋Š” ์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ….

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋””๋ ‰ํ† ๋ฆฌ rw์ด์ง€๋งŒ ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ro์ž…๋‹ˆ๋‹ค. ์ด๊ฑธ ํ—ˆ์šฉํ•˜๋ฉด ์ •๋ง ๋‹น์‹ ์„ ์ฃฝ์ผ๊นŒ์š”?

ํ™•์‹คํžˆ ๋ˆ„๋ฝ ๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•œ "๋ฐ˜ ํŒจํ„ด"์€ dockerfile์˜ ์ง„์ž… ์  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋งˆ์šดํŒ… ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋“ฑ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ฒˆ, ๊ฐ€๊ธ‰์ ์ด๋ฉด ๊ณต์‹์ ์œผ๋กœ ๋นŒ๋“œ๋˜๊ณ  ์‚ฌ์šฉ ์‹œ์ , ์ฆ‰ docker-compose์—์„œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ๊ตฌ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋„์ปค ์‚ฌ๋žŒ๋“ค์ด ๊นจ๋‹ซ์ง€ ๋ชปํ•˜๋Š” ํ•œ "Dockerfile"์ด ์ „์ฒด ๋„์ปค ๊ฐœ๋…์—์„œ ๊ฐ€์žฅ ํฐ ๋ฐ˜ ํŒจํ„ด์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“  ๊ฒƒ์ด ์™„์ „ํžˆ ์ฝ์„ ์ˆ˜์—†๊ณ  ๊ด€๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„์ปค์™€ ๊ด€๋ จ๋œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ทธ๋“ค์ด ์•„๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฒ„๋ฆด ๋•Œ ์ •๋ง ๋‚˜๋ฅผ ์›ƒ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค!

Dockerfile์€ ์‹ค์ œ๋กœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋˜๋Š” make์™€ ๊ฐ™์€ ๋นŒ๋“œ ์šฉ์œผ๋กœ ์„ค๊ณ„๋œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ •์ƒ์ ์ธ ๋””๋ฒ„๊น… ๋ฐ ์ •๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜ ์ž์‹ ์„ ์œ„ํ•ด ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋™์ผํ•œ DockerFile์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค!). ๋‹ค๋ฅธ ์šฉ๋„๋กœ DockerFile์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ค์ œ๋กœ๋Š” ์•ˆํ‹ฐ ํŒจํ„ด์ด๋ผ๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  "๊ตฌ์„ฑ ์ง€์›"์ด ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ณณ์— ๊ตฌ์กฐ๋ฅผ ๋ถ€๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๋งˆ์šดํŠธ๋ฅผ / etc / nginx๋ผ๊ณ  ๋งํ•˜๋„๋ก ๋ฐ”์ธ๋“œํ•˜๋ฉด ๊ตฌ์„ฑ์„ ์กฐ์ •ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก rw ์—ฌ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ผ๋ช… envsubst). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž…๋ ฅ ๊ตฌ์„ฑ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค (๋ถˆ๋ณ€ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ด์•ผ ํ•จ) ... ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ตฌ์„ฑ ์ „์ฒด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฐ˜ ํŒจํ„ด์„ ์–ป์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๋‹ค์‹œ ์ƒ์„ฑ ํ•  ๋•Œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๋Š” ์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ….

์ฆ‰, ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋””๋ ‰ํ† ๋ฆฌ rw์ด์ง€๋งŒ ํ˜ธ์ŠคํŠธ์—์„œ๋Š” ro์ž…๋‹ˆ๋‹ค. ์ด๊ฑธ ํ—ˆ์šฉํ•˜๋ฉด ์ •๋ง ๋‹น์‹ ์„ ์ฃฝ์ผ๊นŒ์š”?

์ด ๊ฐ™์€:

```

ํŒŒ์ผ์„ ๋ฎ์–ด ์“ฐ๋ฉด

๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋Œ€์ƒ์˜ ๋‚ด์šฉ์„ ๋ฎ์–ด ์“ฐ๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜๋ฉด

์›๋ณธ์˜ ๋‚ด์šฉ์œผ๋กœ ์›๋ž˜ ๋Œ€์ƒ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€

์†Œ์Šค : ํŒŒ์ผ : p ermission : ์†Œ์œ ์ž : ๊ทธ๋ฃน

svc :
๋ถ€:
- './source/filename:/path/ filename : ro : www-data'
- './source/dir:/path/ dir : ro : www-data'

# ๋˜๋Š”
svc :
๋ถ€:
-์ถœ์ฒ˜ : './source/file'
๋ชฉ์ ์ง€ : '/ destination'
ํ—ˆ๊ฐ€ : ro
์†Œ์œ ์ž : ์†Œ์œ ์ž
๊ทธ๋ฃน : ๊ทธ๋ฃน
-์ถœ์ฒ˜ : './source/directory'
๋ชฉ์ ์ง€ : '/ destination'
ํ—ˆ๊ฐ€ : ro
์†Œ์œ ์ž : ์†Œ์œ ์ž
๊ทธ๋ฃน : ๊ทธ๋ฃน ''`

์‚ฌ์šฉ ์‚ฌ๋ก€ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ docker-compose ํŒŒ์ผ์ด ํฌํ•จ ๋œ ์กฐ์ •๋˜์ง€ ์•Š์€ ์ปจํ…Œ์ด๋„ˆ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. Git-repository ๋‚ด๋ถ€์˜ SSL ์ธ์ฆ์„œ ๋“ฑ์„ VM์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋น„์Šค๋ฅผ ๊ฐ€๋™ํ•˜๊ณ  ์˜ˆ๋ฅผ ๋“ค์–ด SSL ์ธ์ฆ์„œ, ๊ตฌ์„ฑ ํŒŒ์ผ ๋“ฑ์„ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ์œผ๋กœ ์ด๋™ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜„์žฌ COPY ๋ช…๋ น์ด์žˆ๋Š” Dockerfile์ด ์—†์œผ๋ฉด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ณต์ œ ๋œ git repo ๋‚ด๋ถ€์˜ ํŒŒ์ผ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋งค๋ฒˆ ์ €์žฅ์†Œ๋ฅผ ์ •๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@MartinMajewski ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ธ์ฆ์„œ๊ฐ€์žˆ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธ ํ•˜๊ณ  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์„ฑ์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ (๋ฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์งˆ๋ฌธ) :
postgres ์ด๋ฏธ์ง€์— ์‹œ์ž‘์‹œ ๋‹จ์ผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค : POSTGRES_PASSWORD . Docker Secret์„ ํ†ตํ•ด ์„ค์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ํ•ด์•ผ ํ•  ์ผ์€ ์ฒจ๋ถ€ ๋œ Secret์„ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ env var๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๋‚ด ์ž์‹ ์˜ entrypoint.sh ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ง„์ž… ์ ์„ ์‹œ์ž‘์‹œ ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 2 ์ค„ Dockerbuild ์—†์ด๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋‹จ์ผ ํŒŒ์ผ์„ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

PS postgres ๊ฐ€ ๊ทธ ์˜ˆ์ž…๋‹ˆ๋‹ค. _FILE env vars๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ ์ถ”์  ๋ฌธ์ œ https://docker.atlassian.net/browse/COMPOSE-89

์‚ฌ์šฉ ์‚ฌ๋ก€ : Karaf
ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œ ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ karaf ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ๋ชจ๋“  ๋นŒ๋“œ์— ๋Œ€ํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ _features.xml_ ๋ฐ _jar_์„ deploy ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ์†”๋ฃจ์…˜์€ karaf ์ด๋ฏธ์ง€๋ฅผ ๋˜ ๋‹ค๋ฅธ Dockerfile (overlayfs์— ์˜์กดํ•˜์—ฌ ๊ฒฐ๊ตญ ์˜ค๋ฒ„๋ ˆ์ด๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•จ) ๋ฐ avast / gradle-docker-compose-plugin์—์„œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. init ๋ช…๋ น์€ ๋ฐ˜๋“œ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ features.xml์˜ ๋‚ด์šฉ์€ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ํŠน์ • ์œ„์น˜์— ํŒŒ์ผ๋กœ ์ €์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋ณผ๋ฅจ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์›๊ฒฉ ์‹œ์Šคํ…œ์˜ ํ•ด๋‹น ๋ณผ๋ฅจ์— ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ ์˜ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ฉ๋‹ˆ๊นŒ? ๋‚ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— ๋” ๋งŽ์€ ๋กœ์ง์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : org.hidetake.groovy.ssh, ๋น„๋ฐ€ ์•”ํ˜ธ / ํ‚ค ๋กœ์ง์œผ๋กœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ํ•จ). docker-compose cp๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ํ•„์š”ํ•œ ๋ณต์‚ฌ ๋ช…๋ น์„ docker-compose.yml์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. avast / gradle-docker-compose-plugin์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ถ”๊ฐ€ ์›๊ฒฉ ํŒŒ์ผ ์‹œ์Šคํ…œ ์•ก์„ธ์Šค ๋…ผ๋ฆฌ์—†์ด ๋‚ด ๋นŒ๋“œ ์ถœ๋ ฅ์˜ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ง์ ‘ ๋ณต์‚ฌํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์ด Dockerfile์€ ์Šคํฌ๋ฆฝํŠธ์˜ docker-compose.yml ๋นŒ๋“œ ๋ถ€๋ถ„์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋ฌด์—‡์ด๋“ ๊ฐ„์— ์ด๊ฒƒ์€ ๋ฐ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐ ๋นŒ๋“œ์™€ ํ•จ๊ป˜ ์—…์ŠคํŠธ๋ฆผ ๋„์ปค ์ด๋ฏธ์ง€์— ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (์ด๋ฏธ์ง€๋ฅผ ์ˆ˜๋™์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ํ•  ๋•Œ๊นŒ์ง€ ๋นŒ๋“œ ์†๋„๊ฐ€ ํ›จ์”ฌ ๋Š๋ ค์งˆ ๋•Œ๊นŒ์ง€).

FROM myregistry:443/docker/image/karaf-el7:latest

COPY karafinitcommands /usr/local/karaf/etc/

COPY features.xml \
     *.jar \
     /usr/local/karaf/deploy/

docker cp๊ฐ€ ๋Ÿฐํƒ€์ž„ ๋ณต์‚ฌ์— ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose์—๋Š” ๋™๋“ฑํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ์‹ค๋ง ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ / usr / local / karaf / deploy์— ๋งˆ์šดํŠธํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ํŒŒ์ผ์„ ๋†“๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ๋„์ปค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ / usr / local / karaf / deploy์— ๋งˆ์šดํŠธํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ํŒŒ์ผ์„ ๋†“๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ๋„์ปค ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ™•์‹คํžˆ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ฝ๊ณ  ์ด๊ฒƒ์ด ์ˆœ์ „ํžˆ ํŽธ๋ฆฌํ•œ ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค. ์ปจํ…Œ์ด๋„ˆ๋Š” gradle ๋นŒ๋“œ๋กœ ๋‹ค์‹œ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋…ผ๋ฆฌ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋นŒ๋“œ ํŒŒ์ผ์„ / usr / local / karaf / deploy์— ๋งˆ์šดํŠธ ๋œ "๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ"๋กœ ์–ด๋–ป๊ฒŒ ์ด๋™ํ•ฉ๋‹ˆ๊นŒ? ์ œ ๊ฒฝ์šฐ์—๋Š” "๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ"๊ฐ€ ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ํ˜ธ์ŠคํŠธ๊ฐ€ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ ์ธ "ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ"์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ณ  ์ด์ „ ํŒŒ์ผ์„ ๊ต์ฒดํ•˜๊ณ  ์ถ”๊ฐ€ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด rsync ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์— ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. docker-compose cp๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ ๋„์ปค ํด๋ผ์ด์–ธํŠธ๋ฅผ ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํ†ตํ•ด ์„ค์ • ํ•œ ๋„์ปค ๋ฐ๋ชฌ ์—ฐ๊ฒฐ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker ๋ณผ๋ฅจ์€ ๊ฐ ๋นŒ๋“œ์—์„œ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ ๋ณผ๋ฅจ์„ ๋ฐ”์ธ๋“œ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋‹ค์‹œ ์ฑ„์›Œ

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, docker cp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์œผ๋กœ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์‹ค๋ง์Šค๋Ÿฌ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์•„, ๋‚˜๋„ ๋‚ด ์„ค์ •์— ์ต์ˆ™ํ•ด ์ ธ. http://github.com/keithy/groan์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํŠธ์™€ ์กฐ๊ฐ์„ ์›๊ฒฉ ์„œ๋ฒ„์— ์ž์ฒด ๋ฐฐํฌํ•˜๋Š” bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ docker๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : Google ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ ๋ฐ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ

์•„ํ‹ฐํŒฉํŠธ ํ•„์š” : ์›น ํด๋ผ์ด์–ธํŠธ (์ž๋™ ์ƒ์„ฑ)๋Š” graphql ๋ฐ”์ธ๋”ฉ์— ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ด๋ฏธ์ง€์—๋Š” ์„œ๋ฒ„ ์ฃผ์†Œ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋ฐ”์ธ๋”ฉ์„ ๋งŒ๋“œ๋Š” ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ๊ฒฝ์—์„œ ์„œ๋ฒ„ ์ด๋ฏธ์ง€๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์ด์ œ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํด๋ผ์ด์–ธํŠธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ƒ์„ฑ ๋œ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์—์„œ "์ž‘์—… ๊ณต๊ฐ„"ํ˜ธ์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Docker ์ปจํ…Œ์ด๋„ˆ์˜ ๋งˆ์šดํŠธ ๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ด๋ฏธ ์žˆ์œผ๋ฏ€๋กœ ๋งˆ์šดํŠธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker-compose cp ์„ (๋ฅผ) ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ์ถ”๊ฐ€ ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋‹จ๊ณ„๋ฅผ ์™„ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$(docker-compose ps -q SERVICE) ์— ์˜์กดํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ ์ž‘์—…์— ์ผ๋ฐ˜ Docker CLI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ช…๋ น์„ ๋„์ž…ํ•˜๋ฉด ๋ช…๋ น์„ ์š”์ฒญํ•˜๋Š” ์†Œ์ˆ˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋” ๊ฐ„๋‹จ ํ•ด์ง€์ง€ ๋งŒ ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค. compose์™€ docker CLI ์‚ฌ์ด์— ๋” ๋งŽ์€ ์ฝ”๋“œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Docker ๋ฐ๋ชฌ compose๊ฐ€ ์‚ฌ์šฉ์ค‘์ธ ๋ฒ„์ „์œผ๋กœ ์ธํ•ด compose์™€ ์ผ๋ฐ˜ docker ๊ฐ„์˜ ๋นŒ๋“œ ์บ์‹œ๊ฐ€ ๋‹ค๋ฅธ ๊ณต๊ฐœ ๋œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, CI ํ™˜๊ฒฝ์—์„œ ์บ์‹œ๋ฅผ ์ค‘๋‹จํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด pure compose๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (https : // github .com / docker / compose / issues / 883) ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋  ๋•Œ๊นŒ์ง€ ์ผ๋ฐ˜ docker ๋ช…๋ น๊ณผ compose ๋ช…๋ น์„ ํ˜ผํ•ฉํ•˜๋ฉด ์บ์‹œ๊ฐ€ ์†์ƒ๋ฉ๋‹ˆ๋‹ค. compose config๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๊ตฌ์›Œ์ง„ config๋ฅผ ์ง€์ •ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜ docker ๋ช…๋ น์œผ๋กœ ์ค‘๋ณต ๊ตฌ์„ฑ์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

$(docker-compose ps -q SERVICE) ์— ์˜์กดํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ ์ž‘์—…์— ์ผ๋ฐ˜ Docker CLI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ช…๋ น์„ ๋„์ž…ํ•˜๋ฉด ๋ช…๋ น์„ ์š”์ฒญํ•˜๋Š” ์†Œ์ˆ˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋” ๊ฐ„๋‹จ ํ•ด์ง€์ง€ ๋งŒ ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค. compose์™€ docker CLI ์‚ฌ์ด์— ๋” ๋งŽ์€ ์ฝ”๋“œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๊ณ  ์ˆ˜์ •, ์ด๋ฏธ์ง€ ๋นŒ๋“œ, ๋‹ค์‹œ ์ˆ˜์ •, ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋“ฑ์ด docker-compose๋ฅผ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ์‹œ๊ฐ„ ์‹ฑํฌ ๊ตฌ์ ˆ์ด๊ธฐ ๋•Œ๋ฌธ์— "์–ธ๊ธ‰ ๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€"๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊นŠ์Šต๋‹ˆ๋‹ค. "๋‹น์‹ ์€ docker cli์—์„œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ฑฐ๊ธฐ์—์„œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์ฃผ์žฅ์€ docker-compose์— ์ถ”๊ฐ€ ๋œ ์ˆ˜๋งŽ์€ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ๊ฑฐ์˜ ๋ฌดํšจํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ 1 ๋…„ ๋™์•ˆ ๊ณต๊ฐœ๋˜์—ˆ์œผ๋ฉฐ์ด ๋ฌธ์ œ ์™ธ์— ๋‹ค๋ฅธ ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ํ•œ ๋‹ซํžˆ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

@dionjwa # 883์€ docker-compose๊ฐ€ docker CLI์™€ ์ •๋ ฌ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ (์—ฌ์ „ํžˆ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒฝ์šฐ) ์‹ค์ œ๋กœ ์กฐ์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ jadon1979 ์ด ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์ฐจ๋‹จํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. 1 ๋…„ ์ด์ƒ ์ „์— ์—ด๋ ธ์œผ๋ฉฐ ํ•ต์‹ฌ ๊ด€๋ฆฌ์ž ์ค‘ ๋ˆ„๊ตฌ๋„ ์ƒˆ ๋ช…๋ น์„ ๋„์ž… ํ• ๋งŒํผ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๊ธฐ์—ฌ์ž๋„ PR์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ.
์ด ๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ๊ณผ "๋” ๋‚˜์€ ๋ฐฉ๋ฒ•"์„ ์ œ๊ณตํ•˜๊ธฐ์œ„ํ•œ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์˜ ๋ถ€์กฑ์— ๋”ฐ๋ผ ์‰ฝ๊ฒŒ ๋ณ„์นญ์„ ์ง€์ •ํ•  ์ˆ˜์žˆ๋Š” docker-compose ๋ฐ docker cli์˜ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ œ์•ˆ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๋Š” ํ™˜๊ฒฝ์€ ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ด์ œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ PR์„ ์—ด์–ด ์ƒˆ๋กœ์šด cp ๋ช…๋ น์„ ์ œ๊ณตํ•˜๋ฉด ๊ธฐ๊บผ์ด ๊ฒ€ํ† ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€
์•ˆํ‹ฐ ํŒจํ„ด. ๊ทธ๋ฆฌ๊ณ  ๋ฉฐ์น ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ฒŒ์‹œ๋˜์ง€๋งŒ
์•ˆํ‹ฐ ํŒจํ„ด.

2019 ๋…„ 11 ์›” 18 ์ผ ์›”์š”์ผ ์˜คํ›„ 5:31 Nicolas De loof [email protected]
์ผ๋‹ค :

@dionjwa https://github.com/dionjwa # 883
https://github.com/docker/compose/issues/883 ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค
docker-compose๊ฐ€ ์ •๋ ฌ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ (์—ฌ์ „ํžˆ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒฝ์šฐ) ์กฐ์‚ฌ
๋„์ปค CLI.

@ jadon1979 https://github.com/jadon1979 ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ฐจ๋‹จํ•˜๋ ค๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
๊ธฐ๋Šฅ ์š”์ฒญ, ๋ฐฉ๊ธˆ ์—ด๋ ธ๋˜ ์ง€ 1 ๋…„์ด ๋„˜์—ˆ๊ณ 
ํ•ต์‹ฌ ์œ ์ง€ ๊ด€๋ฆฌ์ž ์ค‘ ๋ˆ„๊ตฌ๋„
์ƒˆ๋กœ์šด ๋ช…๋ น์„ ๋„์ž…ํ–ˆ์ง€๋งŒ, ๊ธฐ์—ฌ์ž๋Š” PR์„ ์ œ์•ˆํ•˜์ง€๋„ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
์ด ๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์— ๋”ฐ๋ฅด๋ฉด
๊ทธ๋ฆฌ๊ณ  "๋” ๋‚˜์€ ๋ฐฉ๋ฒ•"์„ ์ œ๊ณตํ•˜๊ธฐ์œ„ํ•œ ๊ฐœ๋ฐœ ๋…ธ๋ ฅ์˜ ๋ถ€์กฑ, ์ œ์•ˆ ๋œ
docker-compose ๋ฐ docker cli์˜ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ™˜๊ฒฝ์—์„œ ์‰ฝ๊ฒŒ ๋ณ„์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•.
์ด์ œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ƒˆ๋กœ์šด cp ๋ช…๋ น์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด PR์„ ์—ด๋ฉด ๊ธฐ๊บผ์ด
๊ทธ๊ฒƒ์„ ๊ฒ€ํ† ํ•˜์‹ญ์‹œ์˜ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/5523?email_source=notifications&email_token=AAGRIF2NS64IYANNVTGFTULQUL3TZA5CNFSM4EKAVONKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5W2ZLO
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAGRIFY7CULCUS3TDDTTHZLQUL3TZANCNFSM4EKAVONA
.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹คํ–‰ ํ›„ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ž‘์—… ์€ ํ‹€๋ฆผ์—†์ด ์ €ํ•˜ ๋œ ๊ธฐ๋Šฅ์„ ์ƒ์„ฑํ•˜๋Š” ํˆฌ๋ฐ•ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ ํ•˜์—ฌ CLI์—์„œ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ์ž์„ธํ•œ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” DevOps ์—”์ง€๋‹ˆ์–ด์ด๋ฉฐ ๋ฒ ์–ด ๋ฉ”ํƒˆ ๋นŒ๋“œ ์—์ด์ „ํŠธ์˜ ์ข…์†์„ฑ ์ง€์˜ฅ์˜ ๋Œ€์•ˆ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ํฌ๊ฒŒ ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋‚ด CI ์‹œ์Šคํ…œ์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ๋™์ผํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์˜ Dockerfile์—์„œ ๋นŒ๋“œํ•˜๊ณ  ๋ชจ๋“  ๊ฒ€์‚ฌ ( bundle exec rspec , npm test ๋“ฑ)๋ฅผ _ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค _. ๋ฌธ์„œ ๋˜๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์™€ ๊ฐ™์ด ์ƒ์„ฑ ๋œ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ docker cp ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ณต์‚ฌํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์˜ ๊ฒฝ์šฐ docker-compose ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์„œ๋น„์Šค ์ข…์†์„ฑ (์˜ˆ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„)์„ ์ œ๊ณตํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ "docker CLI ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•"์€์ด ๊ฒฝ์šฐ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ตฌ์„ฑ ๊ณ ๋ ค : docker-compose-minimal.yml

version: "3"
services:
  artifact-generator:
    image: busybox

์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์–ป์€ ๋‹ค์Œ docker cp ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์ถ”์ถœํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

$ # Prepare the images and (stopped) containers.  In this case there is only one.
$ docker-compose --file docker-compose-minimal.yml up --no-start
Creating network "docker-compose-cp-test_default" with the default driver
Creating docker-compose-cp-test_artifact-generator_1 ... done
$ # Determine the ID of the container we will want to extract the file from
$ docker-compose --file docker-compose-minimal.yml ps -q artifact-generator
050753da4b0a4007d2bd3514a3b56a08235921880a2274dd6fa0ee1ed315ff88
$ # Generate the artifact in the container
$ docker-compose --file docker-compose-minimal.yml run artifact-generator touch hello.txt
$ # Check that container ID again, just to be sure
$ docker-compose --file docker-compose-minimal.yml ps -q artifact-generator
050753da4b0a4007d2bd3514a3b56a08235921880a2274dd6fa0ee1ed315ff88
$ # OK, that looks like the only answer we're going to get.  Can we use that to copy files?
$ docker cp $(docker-compose --file docker-compose-minimal.yml ps -q artifact-generator):hello.txt ./hello-artifact.txt
Error: No such container:path: 050753da4b0a4007d2bd3514a3b56a08235921880a2274dd6fa0ee1ed315ff88:hello.txt
$ # Nope.  Let's take a look at why this is
$ docker container ls -a
CONTAINER ID        IMAGE                        COMMAND                   CREATED              STATUS                          PORTS               NAMES
9e2cb5d38ba0        busybox                      "touch hello.txt"         About a minute ago   Exited (0) About a minute ago                       docker-compose-cp-test_artifact-generator_run_dd548ee686eb
050753da4b0a        busybox                      "sh"                      2 minutes ago        Created                                             docker-compose-cp-test_artifact-generator_1

๋ณด์‹œ๋‹ค์‹œํ”ผ docker-compose ps ์‹ค์ œ๋กœ ์—…๋ฐ์ดํŠธ ๋œ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. run_dd548ee686eb ์ด ๋‚ด๊ฐ€ ์‹คํ–‰ ํ•œ docker-compose run ์™€ ์–ด๋–ป๊ฒŒ ๋“  ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์„ ๋‹ฌ์„ฑ ํ•  ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์—๋Š” --name ๋ฅผ ์‹คํ–‰ ๋ช…๋ น์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

$ docker-compose --file docker-compose-minimal.yml run --name blarg artifact-generator touch hello.txt
$ docker cp blarg:hello.txt ./hello-artifact.txt
$ ls 
docker-compose-minimal.yml  hello-artifact.txt

์„ฑ๊ณต! ... ์ข€

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์—ฌ๋Ÿฌ ๋นŒ๋“œ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ --name ์ „์—ญ ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ตœ์ƒ์˜ ๊ฒฝ์šฐ์—๋Š” ์‹œ๋„๋Ÿฌ์šด ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ณ  ์ตœ์•…์˜ ๊ฒฝ์šฐ ์†์ƒ๋œ ๊ฒฐ๊ณผ (์˜ค๋ฅ˜๋Š” ์—†์ง€๋งŒ ์ž˜๋ชป๋œ ํŒŒ์ผ์ด ์ถ”์ถœ ๋จ)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Docker๊ฐ€ ์ด๋ฏธ ๋งŒ๋“  ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ปจํ…Œ์ด๋„ˆ ID ์ƒ์„ฑ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ํˆฌ๋ฐ•ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ docker-compose run ๋ช…๋ น์˜ ๊ฒฐ๊ณผ ์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ID๋ฅผ ์•Œ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฟก๋ฟก

$ (docker-compose ps -q SERVICE)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ ์ž‘์—…์— ์ผ๋ฐ˜ docker cli๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

False, ์ด์ „ ์ฃผ์„์˜ ๋ฐ๋ชจ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์—์„œ ์ˆ˜๋…„๊ฐ„ ์ƒˆ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ๊น๋งŒ ์ƒˆ๋กœ์šด ์•ˆํ‹ฐ
ํŒจํ„ด ...

2019 ๋…„ 12 ์›” 13 ์ผ ๊ธˆ์š”์ผ 11:40 Ian, [email protected] ์ž‘์„ฑ :

@ndeloof https://github.com/ndeloof

$ (docker-compose ps -q SERVICE)์— ์˜์กดํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ง€์ •
์ปจํ…Œ์ด๋„ˆ ์ค‘์‹ฌ์˜ ์ผ๋ฐ˜ ๋„์ปค CLI๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž‘์—….

False, ์ด์ „ ์ฃผ์„์˜ ๋ฐ๋ชจ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/5523?email_source=notifications&email_token=AAGRIF2NFPTKY3QKRIXQ5RTQYONHLA5CNFSM4EKAVONKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNEGMVXHJKJKTDN5WW2ZLO026 ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAGRIF3S4UHF5NG3VKYXJB3QYONHLANCNFSM4EKAVONA
.

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

๋ฐฐํฌ๋Š” bazel์„ ์‚ฌ์šฉํ•˜์—ฌ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—…๋กœ๋“œ ํ•œ ๋‹ค์Œ upload ์Šคํƒ ์ž์™€ ํ•จ๊ป˜ Terraform docker_container ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. Terraform ๋Œ€์‹  docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด์ด ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. docker-compose๊ฐ€ ์ปจํ…Œ์ด๋„ˆ ๋ณ„ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์ด ํ˜ธ๋Š” 2 ๋…„ ๋™์•ˆ ๊ณต๊ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Kubernetes๊ฐ€ ์ธ๊ธฐ์—์„œ Docker๋ฅผ ์•ž์ง€๋ฅด๋Š” ์ด์œ ์ž…๋‹ˆ๊นŒ? Kubernetes๋Š” ๊ตฌ์„ฑ ๋ฐ ๋น„๋ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Docker ํŒ€, ์ตœ์†Œํ•œ ๊ตฌ์„ฑ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

tbf docker-compose๋Š” k8s์™€ ์ •ํ™•ํžˆ ๋น„๊ตํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ”„๋กœ๋•์…˜ ์šฉ๋„๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ฐ ๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker swarm์€ k8s์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๋‹จ์ˆœํ•˜์ง€๋งŒ ๊ตฌ์„ฑ ๋ฐ ๋น„๋ฐ€๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ๋งŒ์„์œ„ํ•œ ๊ฒƒ์ด๋ผ๋ฉด์ด ๋ฌธ์ œ๊ฐ€ ๋” ๋งŽ์€ ์ด์œ ์ž…๋‹ˆ๋‹ค.
์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—‰๋šฑํ•œ "๋ฐ˜ ํŒจํ„ด"๊ทœ์น™์€
์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค (์ •์ƒ์ ์ธ ์‚ฌ์šฉ์ด ํ’๋ถ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์•ˆํ‹ฐ ํŒจํ„ด๊ณผ ๋‹ฎ์ง€ ์•Š์€ ๊ฒฝ์šฐ).

2020 ๋…„ 3 ์›” 3 ์ผ ํ™”์š”์ผ ์˜คํ›„ 12:56 David Milum [email protected]
์ผ๋‹ค :

tbf docker-compose๋Š” k8s์™€ ์ •ํ™•ํžˆ ๋น„๊ตํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ƒ์‚ฐ ์šฉ. ๊ฐœ๋ฐœ ๋ฐ ๋น ๋ฅธ ํ…Œ์ŠคํŠธ๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„์ปค
swarm์€ k8s์™€ ๋น„๊ตํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹จ์ˆœํ•˜์ง€๋งŒ ๊ตฌ์„ฑ ๋ฐ ๋น„๋ฐ€๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/5523?email_source=notifications&email_token=AAGRIFZTKGRWMZZ5H6DG3FDRFUSEJA5CNFSM4EKAVONKYY3PNVWWK3TUL52HS4DFVREXG43VMVORPWSZ5W594W2ZLOBW63LNMVXHJKissue ,
๋˜๋Š” ๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/AAGRIF4NTQQSR2QQWPJT6PLRFUSEJANCNFSM4EKAVONA
.

๋˜ ๋‹ค๋ฅธ "๋ฐ˜ ํŒจํ„ด":

๋กœ์ปฌ ๊ฐœ๋ฐœ ์ค‘์—๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์— docker-compose ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ”„๋กœ๋•์…˜์—๋Š” k8์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Docker์˜ ์กฐ์–ธ ์— ๋”ฐ๋ผ ์„œ๋น„์Šค ์‹œ์ž‘ / ์ข…๋ฃŒ ์ˆœ์„œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด wait-for-it.sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ•˜๋‚˜์— ๋Œ€ํ•ด ๊ฐ ์„œ๋น„์Šค์— ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๊ฐ ์„œ๋น„์Šค์˜ Dockerfile์ด ํฌํ•จ ๋œ ๋””๋ ‰ํ† ๋ฆฌ์— ์Šคํฌ๋ฆฝํŠธ ์‚ฌ๋ณธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์‹  docker-compose ๊ฐ€ ๋กœ์ปฌ์—์„œ ์‹คํ–‰๋  ๋•Œ ๊ฐ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ๋˜๋Š” wait-for-it ์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ผ ๋ณต์‚ฌ๋ณธ์„ ์ตœ์ƒ์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‚ด ์„œ๋น„์Šค์˜ Dockerfile ์˜ค์—ผ์‹œํ‚ค๋Š” ์ด๋Ÿฌํ•œ ์šฐ๋ ค๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์—๋จธ์Šจ์€ ํ•œ๋•Œ ์ด๋ ‡๊ฒŒ ์ผ์Šต๋‹ˆ๋‹ค. "์–ด๋ฆฌ์„์€ ์ผ๊ด€์„ฑ์€ ์ž‘์€ ์ •์น˜๊ฐ€์™€ ์ฒ ํ•™์ž์™€ ์‹ ์ž๋“ค์ด ์ˆญ๋ฐฐํ•˜๋Š” ์ž‘์€ ๋งˆ์Œ์˜ ํ™‰ ๊ณ ๋ธ”๋ฆฐ์ž…๋‹ˆ๋‹ค."

์•„๋งˆ๋„ ์‚ฌ์šฉ์ž์˜ ๋ง์„ ๋“ค์–ด์•ผ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค ...

@Phylodome ์€ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ๊ณผ docker-compose depends_on ์—†์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๊ฑด๊ฐ•ํ•œ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์ข…์†์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‚ด ์ดํ•ด๋Š” wait-for-it.sh ์€ (๋Š”) ์ •๋ง ํ•ดํ‚น์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ž์ฒด๊ฐ€์˜ค๊ณ ๊ฐ€๋Š” ์ข…์†์„ฑ์— ํƒ„๋ ฅ์ ์ด์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์Šคํƒ€ํŠธ ์—…์€ ๊ทธ์ € ๊ฐœ๋ณ„์ ์ธ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

@ianfixes "๊ท€ํ•˜์˜ ์„œ๋น„์Šค"๋Š” docker-compose ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์˜๋ฏธ

"๊ท€ํ•˜์˜ ์„œ๋น„์Šค"๋Š” docker-compose ์„œ๋น„์Šค ์ž์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹น์‚ฌ๊ฐ€ ์ž‘์„ฑํ•œ ์„œ๋น„์Šค์—์„œ์™€ ๊ฐ™์ด "๋‹น์‚ฌ์˜"์„œ๋น„์Šค๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

๊ฐœ๋ฐœ์ž๋กœ์„œ ๊ตฌ์ถ•ํ•˜๋Š” ์„œ๋น„์Šค๋Š” ํƒ„๋ ฅ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์Œ ๋ฌธ์„œ์— ๋”ฐ๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค : https://docs.docker.com/compose/startup-order/

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (์˜ˆ :)๊ฐ€ ์ค€๋น„ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํ›จ์”ฌ ๋” ํฐ ๋ฌธ์ œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ๋˜๊ฑฐ๋‚˜ ์–ธ์ œ๋“ ์ง€ ํ˜ธ์ŠคํŠธ๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ํƒ„๋ ฅ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ์‹คํŒจ ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ๋‹ค์‹œ ์„ค์ •ํ•˜๋„๋ก ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•˜์‹ญ์‹œ์˜ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์—ฐ๊ฒฐ์„ ์žฌ ์‹œ๋„ํ•˜๋ฉด ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์€ ์‹œ์ž‘ํ•  ๋•Œ์™€ ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์—ฐ๊ฒฐ์ด ๋Š์–ด ์งˆ ๋•Œ๋งˆ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ์ด ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์ˆ˜์ค€์˜ ๋ณต์›๋ ฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ž˜ํผ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹ค์–‘ํ•œ ๋Œ€๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‹จ์ง€ ๋กœ์ปฌ ๊ฐœ๋ฐœ์„์œ„ํ•œ ๊ฒƒ์ด๊ณ , k8s์—์„œ ํ”„๋กœ๋•์…˜ ์„œ๋น„์Šค ๊ฒ€์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ๋‹ค๋ฅธ ์ „๋žต์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‚˜๋Š” ์™œ ๋‚ด๊ฐ€ ์„ ํ˜ธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์˜ˆ : Webpack์˜ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด UI ๊ฐœ๋ฐœ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•œ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ ๋ฌธ์ œ).

์–ด์จŒ๋“ , ์‚ฌ์šฉ์ž์˜ ์žฌ๋Ÿ‰์— ๋งก๊ฒจ์•ผํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ธด ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ชฉ๋ก์—์„œ ๋˜ ํ•˜๋‚˜ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

์ €๋ฅผ ํ–ฅํ•œ ๋ถ„๋…ธ๋ฅผ ๋“ฃ๊ณ  ์žˆ์œผ๋ฉฐ ๊ท€ํ•˜์˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์›์น˜ ์•Š๋Š” "์กฐ์–ธ"์„ ๋“ฃ๋Š” ๊ฒƒ์ด ์™œ ์‹ค๋ง ์Šค๋Ÿฌ์šด์ง€ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์‚ฌ๊ณผํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด "Docker์˜ ์ž์‹ ์˜ ์กฐ์–ธ"์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” URL์˜ ํ…์ŠคํŠธ๋ฅผ ์ธ์šฉํ–ˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ _ ๋ช…์‹œ ์ ์œผ๋กœ _ ๋Œ€๊ธฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ "๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”"๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋งŒํ•œ ๊ฐ€์น˜์— ๋Œ€ํ•ด์„œ๋Š” ์–ด์จŒ๋“  ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์—ฌ๊ธฐ์—์„œ ๋‚˜์˜ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜์ง€ ์•Š์•˜๋‹ค. ๋‚˜๋Š” ์‚ฌ๊ณผ๋ฅผ ์›ํ–ˆ๋‹ค. Docker ์‚ฌ์šฉ์ž๊ฐ€ compose ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์ธ ์œ ์—ฐ์„ฑ์„ ์›ํ•œ๋‹ค๋Š” ์ฆ๊ฑฐ๋ฅผ ๊ธด ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ์€ ๋‚จ์šฉ ๊ฐ€๋Šฅ์„ฑ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๊ฐ€์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์•ผํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•œ ์ž ์žฌ๋ ฅ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ์‚ฌ์šฉ์ž๋ฅผ ๋ณ€๋ช…์Šค๋Ÿฝ๊ฒŒ ๊ฐ€์Šค ๋ผ์ดํŒ…ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ํ”„๋กœ์ ํŠธ์˜ ๊ด€๋ฆฌ์ž๋„ ์•„๋‹ˆ๊ณ  ๊ธฐ์—ฌ์ž๋„ ์•„๋‹ˆ๋ฉฐ ํ˜ผ๋ž€์„ ๋“œ๋ ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ œ๊ณต ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์€ ๋„์›€์ด ์›์น˜ ์•Š๊ณ  ๋„์›€์ด๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ๋˜์–ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

๋ถ„์‚ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€์ธ Go ์ปจํ…Œ์ด๋„ˆ์—์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. .env ํŒŒ์ผ์ด Go ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฃจํŠธ์— ํฌํ•จ๋˜์–ด์•ผํ•˜๋ฏ€๋กœ ๋ณ„๋„์˜ .env ์„ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ๋‚ด ์ตœ์ƒ์œ„ .env ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ๋นŒ๋“œ ํ•  ๋•Œ Go ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ถ”์ ํ•ด์•ผ ํ•  ํ•ญ๋ชฉ์ด ์ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ Go ์ปจํ…Œ์ด๋„ˆ์˜ Dockerfile ๋ฅผ ํ†ตํ•ด์ด ํŒŒ์ผ์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ํ•ด๋‹น ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด .env ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์ƒˆ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•  ๋•Œ๋งˆ๋‹ค ๋‘ ๊ณณ์—์„œ ์—…๋ฐ์ดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€. ๋˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ cp ํŒŒ์ผ์„ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

COPY ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ +1

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ฟ  ๋ฒ„๋„ค ํ‹ฐ์Šค์—์„œ ์‚ฌ์ด๋“œ์นด๋กœ ์ด๊ฒƒ์„ ๋‹ฌ์„ฑํ–ˆ์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•ˆํ‹ฐ ํŒจํ„ด์ด ์•„๋‹ˆ๋ผ ๋„์ปค ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ญ”๊ฐ€ ๋น ์กŒ์„์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ 5 ๋ถ„ ๋™์•ˆ ์•ฑ์„ ๋นŒ๋“œ ํ•  ๋•Œ๋งˆ๋‹ค ๋นŒ๋“œ ํด๋”๊ฐ€ "์œ ๋™์ "์ด๋ฉฐ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ์•ฑ์ด ์‹œ์ž‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ปจํ…Œ์ด๋„ˆ์— ๋นŒ๋“œ ํด๋”๋ฅผ _copy_ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ๋‚ด๋ถ€ ํด๋”๋ฅผ ๋Œ€์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์•ฑ์€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ / ์‹œ์ž‘ํ•  ๋•Œ 1 ์ดˆ ์ •๋„๋งŒ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

docker ์ด๋ฏธ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๊นŒ? docker-compose ๋„์ปค์˜ ์œ ์šฉ์„ฑ์„ ๋”ฐ๋ผ ๊ฐ„๋‹ค๋Š” ๊ฒƒ์€ ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ทธ ์ž์ฒด๋กœ ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์˜ ๋ฌธ์ œ์ ์€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค์‹œ ์ƒ์„ฑ ๋  ๋•Œ๋งˆ๋‹ค ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๊ทผ์‹œ์•ˆ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ "๋ฐ˜ ํŒจํ„ด"์ด๋ผ๋Š” ์šฉ์–ด). ํ™•์žฅ ์„ฑ์ด ๋งค์šฐ ๋‚ฎ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค (์ปจํ…Œ์ด๋„ˆ๊ฐ€ 10 ๊ฐœ? 20? 100?).

๊ทธ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋กœ์ปฌ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. ์นผ์„ ๋น„๋‚œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.


PS ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€; Dockerfile์ด์—†๋Š” ํ”„๋กœ์ ํŠธ์˜ Nginx ์ปจํ…Œ์ด๋„ˆ์— ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋” ์ด์ƒ ์•„๋Š” ์‚ฌ๋žŒ.
์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์•ผํ–ˆ๊ณ 
๋„๊ตฌ, Lando๋Š” ์ด๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด
๋นจ๋ฆฌ.
๋” ๋น ๋ฅด๊ณ , ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šฐ ๋ฉฐ, ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ง€์› ๋ฐ
ํ•˜ํ–ฅ์  (์˜ˆ :) ์œ ์ง€ ๊ด€๋ฆฌ์ž / ๊ธฐ์—ฌ์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์˜๊ฒฌ ์— ๋Œ€ํ•ด @ chris-crone ...

๊ตฌ์„ฑ ํŒŒ์ผ ๋˜๋Š” ๋ถ€ํŠธ ์ŠคํŠธ๋žฉ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ Docker Config๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๋น„๋ฐ€๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋งŒ ์–ด๋””์—๋‚˜ ์žฅ์ฐฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ Swarm ๋ฐ Kubernetes์—์„œ ์ง€์›๋˜์ง€๋งŒ docker-compose์—์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋ฉฐ์ด ๋ฌธ์ œ์— ๋‚˜์—ด๋œ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

docker-compose๊ฐ€ swarm ๊ตฌ์„ฑ๊ณผ ํŒจ๋ฆฌํ‹ฐ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์— ๋Œ€ํ•œ ํ‹ฐ์ผ“์ด ์žˆ๋‹ค๋ฉด (๋˜๋Š” ๊ดœ์ฐฎ์€ ํ‹ฐ์ผ“์„ ๋งŒ๋“ค์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ), ๊ทธ ํ‹ฐ์ผ“์„ ๊ตฌ๋…ํ•˜๊ณ ์ด ์“ฐ๋ ˆ๊ธฐํ†ต์—์„œ ๊ตฌ๋…์„ ์ทจ์†Œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ซ๊ณ  ๊ทธ๊ฒƒ์— ์—ฐ๊ฒฐํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค.

@harpratap ๋‹น์‹ ์ด ์˜ณ์ง€ ๋งŒ, ๋‹จ์ ์€ / folder_in_container๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋น„์–ด ์žˆ์–ด์•ผํ•˜๋ฉฐ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฎ์–ด

COPY ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด +1. ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์‹ ์†ํ•˜๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ฐœ๋ฐœ ์„ค์ •์„์œ„ํ•œ ๊ตฌ์„ฑ์—์„œ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. SSL์„ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋นŒ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋Š” docker-compose์˜ ์„œ๋น„์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค ... ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค ... ๋งˆ์šดํŠธํ•˜๋ฉด ๊ธฐ์กด ์ธ์ฆ์„œ๊ฐ€ ์†์‹ค๋˜๊ณ  Docker ๋นŒ๋“œ์— ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ 2 ๊ฐœ์˜ docker-compose-1์„ ์‹คํ–‰ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์–ด์งˆ๋Ÿฌ ๋†“์€.

์—ฌ๊ธฐ์—์„œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œ์•ˆํ–ˆ์ง€๋งŒ ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ, ์•ˆํ‹ฐ ํŒจํ„ด์ด๊ฑฐ๋‚˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฉ์ถ”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. .

ํ•œ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ๋ฐ˜ ํŒจํ„ด์ฒ˜๋Ÿผ ๋ณด์ผ์ง€ ๋ชจ๋ฅด์ง€๋งŒ์ด ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜๋Š” 1000 ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„๋“ค์„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ๋„์›€์ด ํ•„์š”ํ•˜๋ฉด ๋งŽ์€ ๋ถ„๋“ค์ด ๋„์›€์„ ์ค„ ์ˆ˜์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€ : ๊ตฌ์„ฑ ์™ธ์—๋„ 5 ๊ฐœ์˜ Rails ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ (Debian)์— ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (RPM)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby / Rails ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋™์ผํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋‹จ์ผ ์œ„์น˜์— ์ €์žฅํ•˜๊ณ  ๋นŒ๋“œ ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 1.5GB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ.

์•ˆ๋…•ํ•˜์„ธ์š”.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€ : ๊ตฌ์„ฑ ์™ธ์—๋„ 5 ๊ฐœ์˜ Rails ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ (Debian)์— ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (RPM)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby / Rails ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋™์ผํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋‹จ์ผ ์œ„์น˜์— ์ €์žฅํ•˜๊ณ  ๋นŒ๋“œ ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 1.5GB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ.

์ด๋ฅผ ์œ„ํ•ด ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ๋ฅผ ์‚ดํŽด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋” ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€์— ๋™์ผํ•œ Dockerfile์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์†Œ๋ฅผ ์ธ์ˆ˜ ํ™”ํ•˜๊ณ  ๊ฐ ์ด๋ฏธ์ง€์— ํ•„์š”ํ•œ ๋น„ํŠธ ๋งŒ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ข‹์€ ์˜ˆ๋Š” Docker Compose๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Debian ๋˜๋Š” Alpine์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋˜์ง€๋งŒ ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์ •์—์„œ docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฝ 12 โ€‹โ€‹๊ฐœ์˜ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•˜์ง€๋งŒ ๊ฐ ๋Œ€์ƒ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ init ํŒŒ์ผ์ด ๋‹ค๋ฅด๋ฉฐ์ด ํŒŒ์ผ์€ ์‹œ์ž‘์‹œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค (์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ ์‚ญ์ œ๋จ). ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ๋‹ค๋ฅด๋‹ค๊ณ ํ•ด์„œ ๊ฑฐ์˜ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ 12 ๊ฐœ ์ •๋„ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๊ณ  ์ •๋ง๋กœ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? IMO๋Š” ๋ง์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด --copy-service ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @megaeater ,

docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฝ 12 โ€‹โ€‹๊ฐœ์˜ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋Š˜๋ฆฝ๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•˜์ง€๋งŒ ๊ฐ ๋Œ€์ƒ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ init ํŒŒ์ผ์ด ๋‹ค๋ฅด๋ฉฐ์ด ํŒŒ์ผ์€ ์‹œ์ž‘์‹œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค (์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ผ ๋•Œ ์‚ญ์ œ๋จ).

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ : ์ด๋Ÿฌํ•œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (๋˜๋Š” ๊ทธ ์ผ๋ถ€)๊ฐ€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๊นŒ (์˜ˆ : ๊ฐœ๋ฐœ์ž์˜ ์ปดํ“จํ„ฐ ๋‚˜ CI๊ฐ€ ์•„๋‹˜)? ์ฝ”๋“œ๊ฐ€ ์—ด๋ ค์žˆ๋Š” ๊ฒฝ์šฐ (๋˜๋Š” ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ์ด์žˆ๋Š” ๊ฒฝ์šฐ) ์ œ๊ฐ€ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ €๋ฅผ ๋งํฌ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋Œ€์‹  ์‚ฌ๋ณธ์ด๋‚˜ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณผ๋ฅจ์„ ์›ํ•˜๋Š” ์ด์œ ๋ฅผ ์•„๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ๋‹ค๋ฅด๋‹ค๊ณ ํ•ด์„œ ๊ฑฐ์˜ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ 12 ๊ฐœ ์ •๋„ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๊ณ  ์ •๋ง๋กœ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? IMO๋Š” ๋ง์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€๋Š” ์ •ํ™•ํžˆ ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋ ˆ์ด์–ด ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋™์ผํ•œ ๋ ˆ์ด์–ด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ Compose์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๋•์…˜์—์„œ ๋กœ์ปฌ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๊ฒŒ๋˜๋Š” ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ๋™์ผํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

@ chris-crone ๋Œ“๊ธ€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ํ”„๋กœ๋•์…˜์—์„œ docker๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ ๋ชฉ์ ์œผ๋กœ ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ ์‚ฌ์šฉ์˜ ๋ฌธ์ œ (์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒฝ์šฐ)๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (ํƒ€์‚ฌ)์— ์‹œ์ž‘์‹œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š”์ด ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œ์— ์‹คํŒจํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ์ค‘์ง€๋˜๋ฏ€๋กœ rw๋กœ ๋งˆ์šดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ์‚ญ์ œ๊ฐ€ ํ—ˆ์šฉ๋˜๋ฉด ์›๋ณธ์ด ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ์œ„ํ•œ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” docker-compose ์œ„์— ์ปดํฌ์ง€์…˜์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@ chris-crone ๋งํฌ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์‚ดํŽด๋ณด๊ณ  ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š”์ง€ ๋ณผ๊ฒŒ์š” ๐Ÿ‘

์•ˆ๋…•ํ•˜์„ธ์š” @ chris-crone ์ €๋Š” Multi Stage ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ / ๊ตฌ์„ฑ์„ ํ•œ ์œ„์น˜์—๋งŒ ์œ ์ง€ํ•˜๊ณ  ์ฃผ๋ณ€์— ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์ง€๋งŒ ์ด์ œ๋Š” .dockerignore ๊ฐ€ ์–ด๋””์—์„œ๋“  ๋ฌด์‹œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด DOCKER_BUILDKIT ์˜ต์…˜๊ณผ ํ•จ๊ป˜ Docker๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

์ด ๋ฌธ์ œ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์„ ๋•Œ compose์—์„œ .dockerignore ๋ฅผ ์ฐพ์„ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. https://github.com/docker/compose/issues/6022 ๋‹ค์‹œ, ๋‹ซํ˜”์Šต๋‹ˆ๋‹ค. coz 1 ๊ธฐ์—ฌ์ž๋Š” ์ด๊ฒƒ์ด ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•˜๋ฉด ๊ฝค ๋‹ต๋‹ต ํ•ด์š” !!

์ด๋Š” MacOS์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ฃผ๊ธฐ๋ฅผ ์ตœ๋Œ€ํ•œ ํ”„๋กœ๋•์…˜์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ ์ ˆํ•œ Continuous Delivery ๊ด€ํ–‰์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œ ํ•œ ๋‹ค์Œ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒˆ ๋ฒ„์ „์„ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ๋นŒ๋“œ์ฃผ๊ธฐ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋Š” ๋น„์šฉ์ด ๋งค์šฐ ๋งŽ์ด ๋“ค๊ณ  3 ~ 5 ๋ฐฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, tomcat์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์€ ์ปจํ…Œ์ด๋„ˆ์—์žˆ๋Š” ๋‚ด ์•ฑ์˜ ๊ฒฝ์šฐ ์•ฝ 3 ์ดˆ์ž…๋‹ˆ๋‹ค. ~ / .bash_history์˜ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด 4 ์ดˆ์ž…๋‹ˆ๋‹ค. ๋‚ด ์•ฑ์˜ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฝ 18-20 ์ดˆ์ž…๋‹ˆ๋‹ค. Linux์—์„œ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ์„ฑ๋Šฅ์€ ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ MacOS์—์„œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜๋ฃจ์— 100 ๋ฒˆ์œผ๋กœ ํ™•์žฅํ•˜๋ฉด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ์ฒ˜์Œ์œผ๋กœ ์•ฑ์— ์•ก์„ธ์Šค ํ•  ๋•Œ ๊ณ„์†๋˜๋Š” ์†๋„ ์ €ํ•˜๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŒŒ์ผ์ด ์บ์‹œ ๋  ๋•Œ๊นŒ์ง€. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์ž‘์€ ๊ตฌ์ ˆ์„ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ ๋†€๋ฆฌ ์‹ ์˜ค๋ผํด DB์— ์—ฐ๊ฒฐํ•˜๋Š” ์ธํ„ฐ๋„ท ์ง€์—ฐ์„ ํฌํ•จํ•˜์—ฌ 3 ๋ถ„์„ ์˜๋ฏธํ•˜๋ฉฐ ์—ฌ์ „ํžˆ ๊ดœ์ฐฎ์•„ ๋ณด์ด๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์  ์žฅ covid-19, ๋กค.

์ด์ƒ์ ์œผ๋กœ๋Š” docker-compose๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‚ด ์•ฑ์„ "์—…๋ฐ์ดํŠธ"ํ•˜๊ณ  tomcat์— ๋‹ค์‹œ๋กœ๋“œํ•˜๋„๋ก ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. tomcat ๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ด€๋ฆฌ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฑ์—”๋“œ ์•ฑ๋„ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

docker-compose๊ฐ€ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์—๋„ ์ ํ•ฉํ•˜๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค : https://github.com/docker/compose/issues/3593#issuecomment -637634435

@ chris-crone

์•ˆ๋…•ํ•˜์„ธ์š”.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€ : ๊ตฌ์„ฑ ์™ธ์—๋„ 5 ๊ฐœ์˜ Rails ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ (Debian)์— ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (RPM)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Ruby / Rails ๋ฒ„์ „์ด ๋‹ค๋ฅด๋ฏ€๋กœ ๋™์ผํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŒŒ์ผ์„ ๋‹จ์ผ ์œ„์น˜์— ์ €์žฅํ•˜๊ณ  ๋นŒ๋“œ ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. 1.5GB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์ถ•ํ•˜๋Š” ๋™์•ˆ.

์ด๋ฅผ ์œ„ํ•ด ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ๋ฅผ ์‚ดํŽด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ๋” ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€์— ๋™์ผํ•œ Dockerfile์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์š”์†Œ๋ฅผ ์ธ์ˆ˜ ํ™”ํ•˜๊ณ  ๊ฐ ์ด๋ฏธ์ง€์— ํ•„์š”ํ•œ ๋น„ํŠธ ๋งŒ ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ข‹์€ ์˜ˆ๋Š” Docker Compose๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Debian ๋˜๋Š” Alpine์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋˜์ง€๋งŒ ๊ณตํ†ต ์ฝ”๋“œ๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋Š” ๋ฉ‹์ง€์ง€๋งŒ ๊ณ ์œ  ํ•œ ๋ฌธ์ œ๋กœ ์–ด๋ ค์›€์„ ๊ฒช์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•ด์•ผํ•˜๋ฏ€๋กœ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ง€๊ธˆ๊นŒ์ง€์˜ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ, ๋‹น์‹ ์€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ COPY --from ๋‹ค๋ฅธ Dockerfile์— ์ •์˜์™€ ๋‚ด์žฅ ์ด๋ฏธ์ง€ docker-compose build (๋‚œ ๋‹น์‹ ์ด ๊ตฌ์ถ•ํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์—ฌ์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ๊ฐ€์ •).

COPY ์ž์ฒด๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์—์„œ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋งค์šฐ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. docker cp ๋Š” ์ด๋ฏธ์ง€์™€ ์ปจํ…Œ์ด๋„ˆ๊ฐ„์— ๋ณต์‚ฌ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์–ด๋””์—์„œ๋‚˜ ๋ณต์‚ฌ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( COPY --from ์™€ ๋น„์Šท ํ•จ).

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค (์ฝ๊ธฐ ์ „์šฉ ๊ตฌ์„ฑ ํŒŒ์ผ ๋ณต์‚ฌ์™€๋Š” ๋ณ„๊ฐœ๋กœ ๋กœ์ปฌ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋Š” ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ๋ฐฐํฌ ํ•  ๋•Œ ๊ฐ€์žฅ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค). ์ง€๊ธˆํ•˜๊ณ ์žˆ๋Š” ์ž‘์—…์€ ๋ฐ˜ ํŒจํ„ด์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ๋นŒ๋“œ์‹œ ์ปดํŒŒ์ผ๋˜๊ณ  ์ถ•์†Œ ๋œ JS + HTML + ์ž์‚ฐ ๋ฒˆ๋“ค (์ž‘์€ ๊ฐ๋„ ์•ฑ์„ ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค)์„ ์ƒ์„ฑํ•˜๋Š” ์ž ์žฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์™€ ์ด๋“ค ๋ชจ๋‘๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋‹จ์ผ nginx ์„œ๋ฒ„ (ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฏธ์ง€์—์„œ ๋นŒ๋“œ ๋จ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋‚ด๊ฐ€ํ•ด์•ผ ํ•  ์ผ์€ ์‹œ์ž‘์‹œ "๋นŒ๋“œ"์ด๋ฏธ์ง€์—์„œ "๋ฐฐํฌ"ํŒจํ‚ค์ง€๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ ๋˜๋Š” ๋นŒ๋“œ์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜์ง€๋งŒ ํ›„์ž๋Š” "modded nginx"์œ„์— ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ”„๋กœ์ ํŠธ ๋ ˆ์ด์•„์›ƒ์„ ์ด๋ฏธ์ง€ํ™”ํ•ฉ๋‹ˆ๋‹ค (ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋Š” ๋ณ„๋„์˜ ์ €์žฅ์†Œ์— ์žˆ์œผ๋ฉฐ ์„œ๋กœ์— ๋Œ€ํ•ด ์•Œ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ).

app1/
  src/
    ...
  Dockerfile
app2/
  src/
    ...
  Dockerfile
app3/
  src/
    ...
  Dockerfile
nginx/
  ...
  Dockerfile
docker-compose.yml

๊ฐ app{1,2,3}/Dockerfile ํŒŒ์ผ์—๋Š” /usr/src/app/dist ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๋Œ€์ƒ / ๋‹จ๊ณ„ build ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. nginx/Dockerfile ์—๋Š” ํ•˜๋‚˜์˜ ๋‹จ๊ณ„ ๋งŒ ์žˆ์œผ๋ฉฐ nginx/nginx ์™€ ์œ ์‚ฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์ง€๋งŒ ๋ชจ๋“  ํ•„์ˆ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ (๊ตฌ์„ฑ ์—†์Œ)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose.yml :

version: '3.8'
services:
  app1-build:
    build:
      context: app1/
      target: build
    image: app1-build
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        rm -vfr /dist-volume/app1 \
        && cp -vr /usr/src/app/dist /dist-volume/app1 \
        && echo "Publishing successful"
    volumes:
      - 'dist:/dist-volume'

  app2-build:
    build:
      context: app2/
      target: build
    image: app2-build
    entrypoint: ["/bin/sh", "-c"]
    command:
      - |
        rm -vfr /dist-volume/app3 \
        && cp -vr /usr/src/app/dist /dist-volume/app3 \
        && echo "Publishing successful"
    volumes:
      - 'dist:/dist-volume'

  #... same thing for app3-build

  nginx:
    build:
      context: nginx/
    image: my-nginx
    volumes:
      - 'dist:/var/www'
      - # ... (config files etc)

volumes:
  dist:

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

version: '3.8'
services:
  # assuming the images have default entrypoint and cmd combination that immediately returns with success.
  app1-build:
    build:
      context: app1/
      target: build
    image: app1-build

  #... same thing for app2-build app3-build

  nginx:
    build:
      context: nginx/
    image: my-nginx
    copy:
      - from: app1-build  # as image or service, both have their pros and cons, service would mean an image associated with this service
         source: /usr/src/app/dist
         destination: /var/www/app1
      - from: app2-build
         source: /usr/src/app/dist
         destination: /var/www/app2
      - from: app3-build
         source: /usr/src/app/dist
         destination: /var/www/app3
    volumes:
      - # ... (config files etc)

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋นŒ๋“œ ๋‹จ๊ณ„ ๋˜๋Š” ์‹œ์ž‘ ๋‹จ๊ณ„์— ์—†์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋˜๋Š” ์„œ๋น„์Šค์˜ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ ๋œ ํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์ปจํ…Œ์ด๋„ˆ๋Š” ์›๊ฒฉ Docker ์—”์ง„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ docker-compose ps -qa <service> | xargs -i docker cp {}:<there> <here> ์™€ ๊ฐ™์€ ์ผ์„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋…ํŠนํ•˜๊ฒŒ ๋„์ปค ์ž‘์„ฑ์„ ๊ณ ์ˆ˜ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@ chris-crone

๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ๋Œ€์‹  ์‚ฌ๋ณธ์ด๋‚˜ ์ด๋Ÿฌํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ณผ๋ฅจ์„ ์›ํ•˜๋Š” ์ด์œ ๋ฅผ ์•„๋Š” ๊ฒƒ๋„ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž๊ธฐ ํŽธ๋ชจ๋ฅผ ์ฆ๊ธฐ์‹ญ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด MacOS์—์„œ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๐Ÿคฃ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ Compose์—์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๋•์…˜์—์„œ ๋กœ์ปฌ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†๊ฒŒ๋˜๋Š” ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  ๋™์ผํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋Š” ๋” ๊ฐ•๋ ฅํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

@ chris-crone ๋„ˆ๋ฌด ์ž์ฃผ ์‚ฌ๋žŒ๋“ค์ด ๊ตฌ์„ฑ ๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ๋„์ปค์— ๋Œ€ํ•œ ์•ˆํ‹ฐ ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ๋Œ€๋‹จํ•œ ๊ฐ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋“  ์šฐ๋ฆฌ๊ฐ€ docker์™€ Apple์ด ๊ฒฐํ•ฉ ๋งˆ์šดํŠธ์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•จ๊ป˜ ์ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚˜์—๊ฒŒ๋Š” docker compose cp ์˜ต์…˜์ด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐœ๋ฐœ์„ ์œ„ํ•ด bind ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๊ณ ํ†ต ์Šค๋Ÿฝ์ง€๋งŒ ์ง€๊ธˆ ๋‹น์žฅ์€. Linux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ƒ ๋จธ์‹ ์œผ๋กœ ์ „ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด Mac์€ ๋ฐ”์ดํŠธ ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ—‰ํ—‰

์šฐ๋ฆฌ๋Š” ํ”„๋กœ๋•์…˜์—์„œ docker๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ ๋ชฉ์ ์œผ๋กœ ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณผ๋ฅจ ์‚ฌ์šฉ์˜ ๋ฌธ์ œ (์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๋Š” ๊ฒฝ์šฐ)๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (ํƒ€์‚ฌ)์— ์‹œ์ž‘์‹œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š”์ด ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œ์— ์‹คํŒจํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์ด ์ค‘์ง€๋˜๋ฏ€๋กœ rw๋กœ ๋งˆ์šดํŠธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ์‚ญ์ œ๊ฐ€ ํ—ˆ์šฉ๋˜๋ฉด ์›๋ณธ์ด ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ์ด๋Ÿฌํ•œ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๊ธฐ์œ„ํ•œ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” docker-compose ์œ„์— ์ปดํฌ์ง€์…˜์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ  .. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ณต๊ธ‰ ์—…์ฒด์— ๋ฌธ์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ํŒŒ์ผ์„ ์ด๋™ํ•˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ์ง„์ž… ์  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง€์ €๋ถ„ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ / ๊ตฌ์„ฑ์„ ํ•œ ์œ„์น˜์—๋งŒ ์œ ์ง€ํ•˜๊ณ  ์ฃผ๋ณ€์— ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์–ด๋””์— ๋‘๋“  .dockerignore ์ด ๋ฌด์‹œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ƒˆ๋กœ์šด DOCKER_BUILDKIT ์˜ต์…˜๊ณผ ํ•จ๊ป˜ Docker๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ docker-compose๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build ์‹œ๋„ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

๊ธฐ์œ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๊ฐ€ ๋„์›€์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์–ด๋–ค ๋ฒ„์ „์˜ Docker ๋ฐ docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์‹œ๋„ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. .dockerignore ํŒŒ์ผ์„ ์กด์ค‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@Marandil , docker build ๊ฐ€ ๋ฌธ์ œ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (์˜ˆ : ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ)๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. docker buildx bake (https://github.com/docker/buildx)์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. buildx๊ฐ€ ์ž‘์—… ์ค‘์ด๋ฏ€๋กœ ์•„์ง ๋งค์šฐ ์•ˆ์ •์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ํƒ€๊ฒฉ์„ ์ž…์€ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•ฉ๋‹ˆ๋‹ค.

@itscaro , ์ž…๋ ฅ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€์ ์œผ๋กœํ•˜๋Š” ์ผ์€ docker build ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ FROM scratch ์ด๋ฏธ์ง€์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ์˜ ์ถœ๋ ฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@TrentonAdams ์šฐ๋ฆฌ๋Š” Docker Desktop์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด ์™”์ง€๋งŒ ๊นŒ๋‹ค ๋กญ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” VM ๊ฒฝ๊ณ„๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ณต์œ  ๋น„ํŠธ๊ฐ€ ์ตœ๊ทผ์— ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ (ํ™˜๊ฒฝ ์„ค์ •์—์„œ "ํŒŒ์ผ ๊ณต์œ ์— gRPC FUSE ์‚ฌ์šฉ"ํ† ๊ธ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Œ) ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด๋ณด๊ณ ์žˆ๋Š” ๋†’์€ CPU ์‚ฌ์šฉ๋Ÿ‰ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์™€ ์—ฌ๊ธฐ ์— ์„ฑ๋Šฅ ์กฐ์ •์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€

@ chris-crone

@Marandil , docker build ์ด ๋ฌธ์ œ์ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ (์˜ˆ : ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ)๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. docker buildx bake (https://github.com/docker/buildx)์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ์ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. buildx๊ฐ€ ์ž‘์—… ์ค‘์ด๋ฏ€๋กœ ์•„์ง ๋งค์šฐ ์•ˆ์ •์ ์ด์ง€๋Š” ์•Š์ง€๋งŒ ํƒ€๊ฒฉ์„ ์ž…์€ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. docker buildx bake ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ ๋ง ํ•ด ๋ณด์ด์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์ข‹์€ ์ฐธ์กฐ ๋‚˜ ๋ฌธ์„œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ณ  docs.docker.com์˜ ํŽ˜์ด์ง€๋Š” ๋‹ค์†Œ ๋…ธ์ถœ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค (https://docs.docker.com/engine/reference/commandline/buildx_bake ์ฐธ์กฐ). /). ์ง€๊ธˆ๊นŒ์ง€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” https://twitter.com/tonistiigi/status/1290379204194758657์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค (https://github.com/tonistiigi/fsutil/blob/master/docker-bake.hcl, https : // github .com / tonistiigi / binfmt / blob / master / docker-bake.hcl), ์ข‹์€ ์ถœ๋ฐœ์ ์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ข‹์€ ์ฐธ์กฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

@TrentonAdams ์šฐ๋ฆฌ๋Š” Docker Desktop์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•ด ์™”์ง€๋งŒ ๊นŒ๋‹ค ๋กญ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” VM ๊ฒฝ๊ณ„๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ๊ณต์œ  ๋น„ํŠธ๊ฐ€ ์ตœ๊ทผ์— ๋‹ค์‹œ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ (ํ™˜๊ฒฝ ์„ค์ •์—์„œ "ํŒŒ์ผ ๊ณต์œ ์— gRPC FUSE ์‚ฌ์šฉ"ํ† ๊ธ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์„ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Œ) ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด๋ณด๊ณ ์žˆ๋Š” ๋†’์€ CPU ์‚ฌ์šฉ๋Ÿ‰ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์™€ ์—ฌ๊ธฐ์— ์„ฑ๋Šฅ ์กฐ์ •์— ๋Œ€ํ•œ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@ chris-crone ์ง€์˜ฅ ์˜ˆ, ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ƒˆ๋กœ์šด ์˜ต์…˜์œผ๋กœ 3 ~ 4 ์ดˆ์˜ ๊ฐœ์„ ์ด ์žˆ์œผ๋ฉฐ "์บ์‹œ ๋จ"์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์™ธ๋ถ€์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์€ ์ €์—๊ฒŒ ์—„์ฒญ๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ ์•ฑ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด 2800ms๋งŒํผ ๋‚ฎ์•„์„œ ๋” ์ด์ƒ 11-18 ์ดˆ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ! ์บ์‹œ ๋œ ๊ฒƒ ์™ธ์—๋Š” ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋งค๋ฒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@ chris-crone MacOS์—์„œ ์„ฑ๋Šฅ ์กฐ์ • ๋ฐ ํ”ผ๋“œ๋ฐฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ ๊ด€๋ จ ์ž๋ฃŒ๋ฅผ ๊ฒŒ์‹œํ•ด์•ผํ•˜๋Š” ์žฅ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋กœ ์ƒˆ๋กœ ์‹œ์ž‘๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ cached ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์™œ ๋Š๋ฆฐ ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋™๊ธฐํ™” ์ƒํƒœ ์ธ ๊ฒฝ์šฐ ์‹œ์ž‘์‹œ ๋ชจ๋“  ํŒŒ์ผ์„ ํ™•์ธํ•˜๋Š” ์ด์ƒํ•œ ์ผ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ƒˆ ํŒŒ์ผ ์ผ ๋•Œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๊นŒ?

์‚ฌ์šฉ ์‚ฌ๋ก€ : ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค (ํŠนํžˆ Keycloak์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋“ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค). ์ˆ˜์ • ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์  ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ปฌ ๋””์Šคํฌ์— ํ•ด๋‹น ํŒŒ์ผ์˜ ์‚ฌ๋ณธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” docker cp ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งค๋ฒˆ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ ID๋ฅผ ์ฐพ์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ :
๋„์ปค์—์„œ ๊ฐœ๋ฐœ.
๋‚ด ์ž ๊ธˆ ํŒŒ์ผ์„ ํ˜ธ์ŠคํŠธ ์ปดํ“จํ„ฐ๋กœ ๋‹ค์‹œ ์ „ํŒŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ”„๋กœ์ ํŠธ ํด๋”๋ฅผ ๋งˆ์šดํŠธ ํ•  ๋•Œ ๋ฎ์–ด ์“ฐ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : ๋น„๋ฐ€ ํ‚ค๊ฐ€ ํฌํ•จ ๋œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋˜๋Š” ์•ฑ์€ ํ•ด๋‹น ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ๊ณ  ๋””์Šคํฌ์—์„œ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์‚ฌ๋ก€ : ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ C ++ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ์ด๋ฏธ์ง€์— ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

1) ๋ณ„๋„์˜ dockerfile COPY ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ƒˆ๋กญ๊ณ  ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€์— ๊ธฐ๋ก๋˜๋ฉฐ ๋‹ค์Œ ์‹คํ–‰์—์„œ ์ตœ์‹  ์ฝ”๋“œ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

2) docker-compose volumes yaml config ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด Docker๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ๋ฅผ root:root (๋‚ด IDE๊ฐ€ ๋‹ค์‹œ ์ชผ๊ฐœ ์งˆ ๋•Œ๊นŒ์ง€ ํŽธ์ง‘ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์™„์ „ํžˆ ์ฃฝ์ž…๋‹ˆ๋‹ค!)

@ shin- ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์•ˆํ‹ฐ ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋น„-๋ฐ˜ ํŒจํ„ด ๋ฐฉ์‹์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

.... ๋‚˜๋Š” ๊ฐ€์žฅ ๊ณ ํ†ต์Šค๋Ÿฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 1 ๋ฒˆ์„ ๊ณ ์ˆ˜ํ•˜๊ณ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ณต์‚ฌ ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋Š” docker-compose๊ฐ€ ์ •๋ง ๋ฉ‹์ง„ ํ–ฅ์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค! ์ ์–ด๋„์ด ์›Œํฌ ํ”Œ๋กœ์šฐ์—๋Š”!

@soulseekah ์ž‘์„ฑ์‹œ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

์ €์—๊ฒŒ ์ ํ•ฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ Dockerfile ๋งŒ๋“ค๊ธฐ
    COPY a_filename .
  2. Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋นŒ๋“œ
    docker build -t myproject:1.0 .
  3. ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก docker-compose๋ฅผ ํŽธ์ง‘ํ•˜์‹ญ์‹œ์˜ค.
version: "3.7"
services:
  app:
    image: myproject:1.0
    ports:
      - 3000:3000
    networks:
       - mynetwork
       - internal
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: not_so_secret_password # don't do this 
      # https://diogomonica.com/2017/03/27/why-you-shouldnt-use-env-variables-for-secret-data/
      MYSQL_DB: appdb
    deploy:
      resources:
        limits:
          cpus: '0.75'
          memory: 100M

์™„๋ฒฝํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@soulseekah ์ž‘์„ฑ์‹œ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

๋ถˆํ–‰ํžˆ๋„ ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ–ˆ์„ ๋•Œ ๋–ผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@soulseekah ์ž‘์„ฑ์‹œ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์•„๋‹Œ๊ฐ€์š”?

๋ถˆํ–‰ํžˆ๋„ ๋‚ด๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹œ๋„ํ–ˆ์„ ๋•Œ ๋–ผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@soulseekah ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@ChristophorusReyhan ๊ทธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์˜ ๋ฌธ์ œ๋Š” @zoombinis ์ฃผ์„์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๋ณ„๋„์˜ dockerfile COPY๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ƒˆ๋กญ๊ณ  ๋ถˆํ•„์š”ํ•œ ์ด๋ฏธ์ง€์— ๊ธฐ๋ก๋˜๋ฉฐ ๋‹ค์Œ ์‹คํ–‰์—์„œ ์ตœ์‹  ์ฝ”๋“œ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜๋Š” ์†”๋ฃจ์…˜์ด์ง€๋งŒ ์›์น˜ ์•Š๋Š” ์œ ์ง€ ๊ด€๋ฆฌ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›์น˜ ์•Š๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ •๋ฆฌํ•˜๋ ค๋ฉด _ ๊ด€์‹ฌ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ _ :

docker-compose up && docker-compose down --rmi local

ํ•˜์ง€๋งŒ ๊ด€์‹ฌ์žˆ๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€ ์— ๋งž์ถค ํƒœ๊ทธ๊ฐ€ ์žˆ๊ณ  ํ…Œ์ŠคํŠธ / ๋”๋ฏธ ์ด๋ฏธ์ง€์—๋Š”

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰