Compose: ์ œ์•ˆ : ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์˜๊ตฌ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ์ ์œผ๋กœ Compose๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ ๋ช…๋ น์— ๋Œ€ํ•ด -p / --project-name ์˜ต์…˜์„ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜
COMPOSE_PROJECT_NAME ํ™˜๊ฒฝ ๋ณ€์ˆ˜.

_each_ ๋ช…๋ น์— --project-name ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
(์˜ˆ๋ฅผ ๋“ค์–ด) docker-compose up ํ•  ๋•Œ ์˜ต์…˜์„ ์ „๋‹ฌํ•˜๋ฉด
_another_ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ธ์Šคํ„ด์Šค ๋˜๋Š”
๋Œ€์ฒด๋˜๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ปจํ…Œ์ด๋„ˆ.

COMPOSE_PROJECT_NAME ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ : ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์˜๊ตฌ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด compose๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ๊ฐ€ ์ฒ˜์Œ ์‹œ์ž‘ / ๋นŒ๋“œ ๋  ๋•Œ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ.

ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์ด ๋ฐœ๊ฒฌ๋˜๋ฉด compose๋Š” ํ•ด๋‹น ํŒŒ์ผ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์˜ˆ์™ธ๋ฅผ throwํ•ฉ๋‹ˆ๋‹ค.
--project-name ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์œ„์น˜

์˜ต์…˜์˜ ์ถ”๊ฐ€ ํ™•์žฅ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด compose๋Š” ์ˆจ๊ฒจ์ง„ .docker-compose ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์˜ "๋ฃจํŠธ"๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ ์•ˆ์—
ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋งŒ ํฌํ•จ ๋œ project-name ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

tree -a
.
โ”œโ”€โ”€ .docker-compose
โ”‚ย ย  โ””โ”€โ”€ project-name
โ””โ”€โ”€ docker-compose.yml

์˜๊ฒฌ ์š”์ฒญ

๋…ผ์˜ํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ์ด _automatically_ ์ƒ์„ฑ๋˜์–ด์•ผํ•˜๋‚˜์š” ์•„๋‹ˆ๋ฉด
    ์‚ฌ์šฉ์ž์˜ ๋ช…์‹œ์ ์ธ ์ž‘์—… (์˜ˆ : docker-compose init --project-name=foobar )
  • ๊ตฌ์„ฑ ํŒŒ์ผ _remove_์— ๋ช…๋ น์„ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? (์˜ˆ :
    docker-compose destroy )
  • Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€์ฒด ์ž‘์„ฑ ํŒŒ์ผ ( --file )์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๋„ ์ ์šฉ๋ฉ๋‹ˆ๊นŒ? ๊ฐ ์ž‘์„ฑ ํŒŒ์ผ์ด ๊ณ ์œ ํ•ด์•ผ
    ๊ตฌ์„ฑ?

๊ทธ๋ฆฌ๊ณ  ๋” ๋„“์€ ๋ฒ”์œ„์—์„œ;

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

ํŽธ์ง‘ : Fig๋ฅผ ์ž‘์„ฑ์œผ๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ

kinfeature statu0-triage

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

์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๊ฝค ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. CI ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ์ด๋ฏธ์ง€๋กœ ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์•Œ์•„์•ผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํƒœ๊ทธ๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋…ผ์˜๊ฐ€ (# 45)์—์„œ ์ผ์–ด๋‚ฌ๋‹ค ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .fig/project-name ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์žˆ์œผ๋ฉด ์ •๋ง ์ž‘์€ ํŒŒ์ผ์ด ๋งŽ์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. fig.yml ์ž์ฒด์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (# 45์—์„œ ์ œ์•ˆ๋˜๊ณ  ๋„์ปค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ œ์•ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ).

๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ์— ์ €์žฅํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋ฐฉ๋ฒ• โ€“ fig.yml ๊ฒฝ๋กœ์˜ ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๊ฝค ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. CI ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ์ด๋ฏธ์ง€๋กœ ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์•Œ์•„์•ผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ํƒœ๊ทธ๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๋…ผ์˜๊ฐ€ (# 45)์—์„œ ์ผ์–ด๋‚ฌ๋‹ค ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .fig/project-name ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์žˆ์œผ๋ฉด ์ •๋ง ์ž‘์€ ํŒŒ์ผ์ด ๋งŽ์ด ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. fig.yml ์ž์ฒด์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (# 45์—์„œ ์ œ์•ˆ๋˜๊ณ  ๋„์ปค ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ œ์•ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ).

๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ํŒŒ์ผ์— ์ €์žฅํ•˜๋ฉด ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณ„๋„์˜ ํŒŒ์ผ์— ๋„ฃ๋Š” ์ด์œ ์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋‚ด ์ƒ๊ฐ์„ ์„ค๋ช…ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ๋ฅผ _start_ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ ๋œ ์ด๋ฆ„ (์˜ˆ : --project-name=foobar )์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž๋™ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๊ณ  ๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค ๋˜๋Š” _versions_ ๋ณด์œ 
  • ๋˜๋Š” ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ .fig/project-name ์—๋Š” ํ”„๋กœ์ ํŠธ์˜ _ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค _์˜ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ํŒŒ์ผ ์ด๋ฆ„์€ instance-name ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ ( project-name ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ)์œผ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ _ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ธฐ๋ณธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์‚ฌ์šฉ ๋œ ์ด๋ฆ„์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด _fig_๊ฐ€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง ์ž‘์€ ํŒŒ์ผ์ด ๋งŽ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ fig.yml์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์ƒํ˜ธ ๋ณด์™„์ ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ํ”Œ๋ž˜๊ทธ ๋˜๋Š” env- ๋ณ€์ˆ˜๋กœ ๋Œ€์ฒด๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ fig.yml ์˜ ์ด๋ฆ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. .fig/project-name ์•ˆ์— ํ”„๋กœ์ ํŠธ๋ฅผ _ ์‹œ์ž‘ _ํ•˜๋Š” ๋ฐ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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

๊ถ๊ธˆํ•œ; ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์ฆ‰ cd project-a && fig ps ๋‹ค์Œ์— cd project-b fig <something> ?

์˜๊ฒฌ์„ ๋ณด๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ถ๊ธˆํ•œ; ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋ณดํ†ต ์‹คํ–‰ fig ์—์„œ python-tox ๋‚˜๋Š” ๊ฒฐ์ฝ” ์ •๋ง ๋‚ด ์‰˜์„ ์„ค์ •ํ•˜์ง€๊ฑฐ์•ผ ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€, ํ™˜๊ฒฝ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ tmux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์…ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‘ ์˜ต์…˜ ๋ชจ๋‘ ์ƒํ˜ธ ๋ณด์™„์ ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„์š”, ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ .fig/instance-name ์—์„œ ํŒ๋งค๋˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ธ์Šคํ„ด์Šค ๋ณ„ ์žฌ์ •์˜๋ฅผ ํฌํ•จ ํ•  ์ˆ˜์žˆ๋Š” .fig-instance.yml ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ด๊ฒƒ์€ ์‚ฌ์†Œํ•œ ์š”์ ์— ๊ฐ€๊น๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ƒ๊ฐํ•˜๊ธฐ; ๊ท€ํ•˜์˜ ์ƒํ™ฉ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด myapp:build12345 ์™€ ๊ฐ™์ด ์ƒ์„ฑ๋˜๋Š” _images_ ๋˜๋Š” _containers_?์˜ ์ด๋ฆ„์„ ์ œ์–ด ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ์ƒํ™ฉ์— ๋Œ€ํ•œ "๋Š๋‚Œ"์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ.

"๋ฌด์ž‘์œ„"ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋’ค์—์žˆ๋Š” ๋‚ด ์ƒ๊ฐ์€ Fig๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์„ ์ˆ˜์žˆ๋Š” ํ•œ ๋ฉ‹์ง€๊ฒŒ ๋ณด์ด๋Š” ์ด๋ฆ„์€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋กœ์„œ ์„œ๋น„์Šค ์ด๋ฆ„ (์˜ˆ : fig stop web )์„ ํ†ตํ•ด ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‹ค์ œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

fig๊ฐ€ .fig ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ID๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”์  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค (์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋งŽ์€ ๋จธ์‹ ์—์„œ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ ๋  ์ˆ˜ ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋ณ„๋„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

'ํ”„๋กœ์ ํŠธ ์ด๋ฆ„'ํŒŒ์ผ์„ "์•”์‹œ ์ ์œผ๋กœ"์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ fig init ๋ฅผ ํ†ตํ•ด "๋ช…์‹œ ์ ์œผ๋กœ"๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ? ์•„๋งˆ๋„ ๋‹ค๊ฐ€์˜ค๋Š” ํœด์ผ์— ์‹œ๊ฐ„์ด ์žˆ๋‹ค๋ฉด ์กฐ๊ธˆ ์‹คํ—˜ ํ•ด ๋ณผ ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (Python์œผ๋กœ ์ฝ”๋”ฉ ํ•œ ์ ์ด ์—†์œผ๋ฏ€๋กœ _really_ ์‹คํ—˜์ ์ž…๋‹ˆ๋‹ค :))

์ƒ์„ฑ๋˜๋Š” ์ด๋ฏธ์ง€ (์˜ˆ : myapp : build12345 ) ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ด๋ฆ„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์‹œ์Šคํ…œ (๊ทธ๋ฆผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ)์ด ์ด๋ฆ„์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑ ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹๋ณ„ ํ•  ์ˆ˜์žˆ๋Š” ์˜ค๋ž˜๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ์ •๋ฆฌ ์Šคํฌ๋ฆฝํŠธ
  • ์ปจํ…Œ์ด๋„ˆ ๋””๋ฒ„๊น… / ๊ฒ€์‚ฌ

์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ด ๋ฌด์—‡์ธ์ง€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ์ง€๊ธˆ์€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ์ฐพ์•„์•ผํ•œ๋‹ค๋ฉด ์ข€ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

fig๊ฐ€ .fig ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ID๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ถ”์  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

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

'ํ”„๋กœ์ ํŠธ ์ด๋ฆ„'ํŒŒ์ผ์„ "์•”์‹œ ์ ์œผ๋กœ"์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ fig init๋ฅผ ํ†ตํ•ด "๋ช…์‹œ ์ ์œผ๋กœ"๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ?

๋‚˜๋Š” ์•”์‹œ ์ ์œผ๋กœ ๋” ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด fig init ๋ฅผ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. basedir๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  <basename>-<4 digit random id> ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์•”์‹œ ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ ํ•ด์ฃผ์…”์„œ @ frank-dspeed ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์€ fig๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ _start_ํ•˜์ง€๋งŒ ๊ทธ ํ›„ Docker๋ฅผ ํ†ตํ•ด ์ง์ ‘ _ "manage"_ํ•˜์—ฌ Fig์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ช… ๊ทœ์น™์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

https://github.com/docker/docker/pull/9882- ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋” ๋งŽ์€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„ ์˜ˆ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹จ์ˆœํžˆ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ œ์•ˆ์„ ๋งŽ์ดํ–ˆ์ง€๋งŒ ๊ทธ ๊ฒฝ์šฐ ๋‹จ์ˆœํžˆ ENV๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋๋‚ธ ๋‹ค์Œ ๊ทธ๊ฒƒ์„ ๊ตฌ๋ฌธ ๋ถ„์„ ํ•  ์ˆ˜์žˆ๋Š” costum fild๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค : dart :

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ๋ชจํ˜ธํ•จ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด fig์˜ ์ฑ…์ž„์ด์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹น์‹ ์˜ ์ œ์•ˆ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ์„ ๋•Œ, ์ž„์˜์˜ ์ด๋ฆ„์ด ์ƒ์„ฑ๋˜๋ฉด FIG_PROJECT_VARIABLE ๋ฐ --project-name -์˜ต์…˜์ด ์“ธ๋ชจ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค. 'ํ…œํ”Œ๋ฆฟ'์„œ๋น„์Šค์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ๋ชจํ˜ธํ•จ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด fig์˜ ์ฑ…์ž„์ด์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚œ๋ณ„๋กœ ํ™•์‹ ์ด ๋“ค์ง€ ์•Š์•„; Fig. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ "์กฐ์šฉํžˆ"๋ฎ์–ด ์“ฐ๋Š” ์ด์œ ๋Š” ๊ฐ™์€ ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ์—์žˆ์„ ๊ฒฝ์šฐ ๋•Œ๋•Œ๋กœ ๋ถˆ์พŒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹น์‹ ์˜ ์ œ์•ˆ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ์„ ๋•Œ, ์ž„์˜์˜ ์ด๋ฆ„์˜ ์ƒ์„ฑ์€ FIG_PROJECT_VARIABLE๊ณผ --project-name-option์„ ์“ธ๋ชจ ์—†๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. 'ํ…œํ”Œ๋ฆฟ'์„œ๋น„์Šค์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋…ผ์˜์— ๋”ฐ๋ผ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • --project-name ๊ฐ€ ์ œ๊ณต๋œ ๊ฒฝ์šฐ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  .project-name ์ž‘์„ฑ / ์—…๋ฐ์ดํŠธ? ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • --project-name ์€ (๋Š”) ์ œ๊ณต๋˜์ง€ ์•Š์ง€๋งŒ FIG_PROJECT_NAME ์€ (๋Š”) FIG_PROJECT_NAME (๊ทธ๋ฆฌ๊ณ  .project-name ์“ฐ๊ธฐ / ์—…๋ฐ์ดํŠธ?)
  • ํ•ด๋‹น ์‚ฌํ•ญ์ด ์—†์ง€๋งŒ .project-name ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. .project-name
  • ํ•ด๋‹น ์‚ฌํ•ญ ์—†์Œ; _random_ ์ด๋ฆ„์„ ๋งŒ๋“ค๊ณ  .project-name ์”๋‹ˆ๋‹ค.

์ด๋ฆ„์„ ๊ด€๋ฆฌํ•˜๊ณ  fig์— ์ „๋‹ฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์—์„œ fig๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ํ”„๋กœ์ ํŠธ (์ œ ๊ฒฝ์šฐ์—๋Š” ํ…œํ”Œ๋ฆฟ์ด ์•„๋‹ˆ๋ผ) ์œ„์น˜์— ์ด๋ฆ„์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ฐฉ๊ธˆ fig up ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ๊ฒฐ๊ณผ ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์— ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์„ ๋งค์šฐ ์ง๊ด€์ ์œผ๋กœ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  docker ps -a ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž„์˜์˜ ์ด๋ฆ„์œผ๋กœ ์ฑ„์›Œ์ง€๋ฉด๋ณ„๋กœ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

--random-name ์˜ต์…˜์ด ๊ท€ํ•˜์˜ ์ƒํ™ฉ์— ๋„์›€์ด ๋ ๊นŒ์š”?
๊ทธ ์™ธ์—๋„ ๋ช‡ ๊ฐ€์ง€ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด [a-zA-Z0-9_].* ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ด‘๋ฒ”์œ„ํ•œ ๋ฐฐํฌ์— ์œ ์šฉ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด fig.yml์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

schema-version: 1.1
project_name: foo
containers:
  web:
    build: .
   command: python app.py
    links:
     - db
    ports:
     - "8000:8000"
  db:
    image: postgres

BC๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด compose / project.py :: from_config์—์„œ

<strong i="9">@classmethod</strong>
    def from_config(cls, name, config, client):
        if 'schema-version' not in config:
            config = {
                'schema-version': '1.0',
                'containers': config
            }
        dicts = []
        for service_name, service in list(config.containers.items()):
            if not isinstance(service, dict):
                raise ConfigurationError('Service "%s" doesn\'t have any configuration options. All top level keys in your docker-compose.yml must map to a dictionary of configuration options.' % service_name)
            service['name'] = service_name
            dicts.append(service)
        return cls.from_dicts(name, dicts, client)

@jderusse ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๋งค์šฐ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ์„ # 45์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋…ผ์˜ํ•˜๊ธฐ์— ๋” ์ข‹์€ ๊ณณ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด์จŒ๋“ ์ด ํ‹ฐ์ผ“์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ œ์•ˆ ๋œ # 1233์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š์œผ๋ฉด ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์„ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ์žฅ์ ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์›๋ž˜๋Š” docker-compose.yml ๋ผ๋Š” ์ด๋ฆ„์„ ์›ํ–ˆ์ง€๋งŒ ๋” ์ƒ๊ฐ ํ•ด๋ณด๋‹ˆ ๋ณ„๋„์˜ ํŒŒ์ผ์ด๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ์ •๋ง ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

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

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

๋‚˜๋Š” dnephin์ด ๋งํ•œ ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. .docker-compose ํŒŒ์ผ

@dnephin sgtm

@mikehaertl ๋‚ด ์˜ˆ์ œ์—์„œ๋Š” .docker-compose ํด๋”๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ์ €์žฅํ•˜๋ ค๋Š” ์ •๋ณด์˜ ์–‘์— ๋”ฐ๋ผ ํŒŒ์ผ๋„ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thaJeztah ์•„, ๋งž์•„, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋†“์ณค๋‹ค.

@mikehaertl์ด ๋ฐฉ๊ธˆ .fig ์—์„œ .docker-compose ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ;-)

๊ถŒ๋ฆฌ :)

์‚ฌ์‹ค ์ €๋Š” ๊ฐ„๋‹จํ•œ ํŒŒ์ผ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ini ์Šคํƒ€์ผ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋งจ ์œ„์—์žˆ๋Š” ์ „์—ญ ์˜ต์…˜, ์„น์…˜์˜ ๋ช…๋ น ๋ณ„ ์˜ต์…˜ :

project-name = blabla

[build]
no-cache

์„ธ๋ฏธ ๊ด€๋ จ ์ •๋ณด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋Š” ๋™์ผํ•œ ํŒŒ์ผ ๋˜๋Š” ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„คํŠธ์›Œํฌ ์ด๋ฆ„ (์‚ฌ์šฉ์ž๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ํ•œ ๋ฒˆ ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.)
  • ํด๋ผ์ด์–ธํŠธ API ๋ฒ„์ „
  • ๋„์ปค ํ˜ธ์ŠคํŠธ
  • ๊ธฐ๋ณธ ๋ฐฐ์œจ ๊ฐ’

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

ํด๋ผ์ด์–ธํŠธ API ๋ฒ„์ „

์•„๋งˆ๋„ docker_host ?

๊ทธ๊ฒƒ๋„ ์ข‹์€ ๊ฒƒ ๊ฐ™์€๋ฐ (์ถ”๊ฐ€๋จ)

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Docker ๊ตฌ์„ฑ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋Š” ์‹œ์ ์— ์žˆ์œผ๋ฉฐ ์ด์ œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ๋ณต์ œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๊ฐ€ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋‘ ๋™์ผํ•œ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ (๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ์—์„œ 2 ๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์Šคํ’€๋ง ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ๊ธฐ๋ณธ๊ฐ’์ด๋˜๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋ฏธ์ง€ ๋นŒ๋“œ์‹œ ํŒŒ์ผ ๋ณต์‚ฌ์— ๋Œ€ํ•ด 100 % ๊ธ์ •์  ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ๋„ Makefile ํƒ€๊ฒŸ๊ณผ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž ์ •์˜ docker-compose ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด -p customname ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ /home/alice/myproject ๋ฐ /home/bob/myproject docker-compose ์„ค์ •์ด ์„œ๋กœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฐŸ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„ ๋Œ€์‹  ์ „์ฒด ํŒŒ์ผ ๊ฒฝ๋กœ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ํŒŒ์ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ chris-martin ์ด๊ฒƒ์€ ๋‹จ์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค ...

alias docker-compose="docker-compose -p ${PWD}"

docker-compose๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์—์„œ / ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ํ—ˆ์šฉ๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— docker-compose.yml์„ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  git ์ €์žฅ์†Œ๋ฅผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ (์˜ˆ : $ HOME ๋˜๋Š” $ HOME / projects)์— ๋„ฃ๋Š” ๊ฒฝํ–ฅ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์•ฝ๊ฐ„์˜ ๋ณดํ˜ธ๋ฅผ ๋ถ€์—ฌํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ตฌ์กฐ (์˜ˆ : ์กฐ์ง ๋‹น ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ) ๋˜๋Š” ์ปดํ“จํ„ฐ๊ฐ€ boot2docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ docker-machine์ด ๊ณ ์œ  ํ•œ VM์„ ์ œ๊ณตํ•˜๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๋Š” ํ•œ ๋™์ผํ•œ ์ƒ์ž์˜ ์‚ฌ์šฉ์ž๊ฐ„์— ์ •๋ณด๋ฅผ ์œ ์ถœํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

# 2294 ๋˜๋Š” docker-machine์œผ๋กœ ๋” ์œ„์ƒ์ ์ด๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋„ฃ๊ณ  ๋‹ค๋ฅธ ํด๋” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” AWS์— ๊ณต์œ  ๋จธ์‹ ์ด ์žˆ๊ณ  ๋ฃจํŠธ์— docker-compose.yml์ด ์žˆ์–ด๋„ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํ˜„์žฌ ๋ฐœ์ƒํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ / ์ค‘์ง€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด v2 ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด https://github.com/docker/compose/issues/745#issuecomment -74028861์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” container_name_prefix ์ž…๋‹ˆ๋‹ค.

๋ฟก๋ฟก

์‹ค์ œ๋กœ๋Š” container_name_prefix ์ผ ๋ฟ์ด์ฃ ?

volume_name_prefix , image_name_prefix ๋ฐ network_name_prefix ๋กœ๋„ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ project_name ๊ฐ€ ๋” ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

.docker-compose ๋Š” ๋งŽ์€๋ฉด์—์„œ docker-compose.override.yml ์— ์ต์ˆ™ํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๋ฏธ YAML์„ ๋ฐ›์•˜๋Š”๋ฐ ๋‹ค๋ฅธ ๊ตฌ์„ฑ ํ˜•์‹ (์˜ˆ : ini)์„ ๋„์ž…ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋”ฐ๋ผ์„œ @JosephEarl ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด project_name ํ‚ค๋ฅผ docker-compose.yml ์— ์ถ”๊ฐ€ํ•˜๋ผ๋Š” # 745 (์ฃผ์„) ์˜ @jderusse ์ œ์•ˆ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

docker-compose.override.yml ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  .gitignore ๋ฅผ ํ†ตํ•ด ์ œ์™ธํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋ณ„ ์‚ฌ์šฉ์ž ์ง€์ •์„ ์ด๋ฏธ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ธ ๋ฒˆ์งธ ๋ช…์‹œ ์ ์œผ๋กœ ์‚ฌ์šฉ์ž ๋ณ„ ์žฌ์ •์˜ ํŒŒ์ผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ .docker-compose.local-override.yml ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

YAML์˜ ๊ตฌ์กฐ์™€ ๊ด€๋ จํ•˜์—ฌ project_name ๋ฅผ ํฌํ•จํ•˜๊ณ  ํ–ฅํ›„ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จ ํ•  ์ˆ˜์žˆ๋Š” project ๋ผ๋Š” ์ƒˆ ์ตœ์ƒ์œ„ ํ‚ค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ์ตœ์ƒ์œ„ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์˜ค์—ผ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด :

project:
  project_name: "your-project"
  network_prefix: "abc"

network_prefix ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋„คํŠธ์›Œํฌ ์ž์ฒด์˜ ์ด๋ฆ„์„ ์ง์ ‘ ์‚ฌ์šฉ์ž ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•Œ๊ธฐ๋กœ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ๋Š” "๋„คํŠธ์›Œํฌ์— ๊ณ ์œ  ํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ์–ด๋–ค ์ด๋ฆ„์€ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค."์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ project_name ์ด๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ์™ธ๋ถ€ ์‹œ์Šคํ…œ์—์„œ ์ฐธ์กฐํ•˜๋Š” ๋„คํŠธ์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์ด๋ฆ„ ์ž์ฒด๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์–ด์จŒ๋“  ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์ œ์•ˆํ•œ ์ œ์•ˆ์€ ๋‚˜์—๊ฒŒ ์ข‹๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋„์ž…ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๊ฐœ๋…์— +1
๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ์ €์žฅ์†Œ์— ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  docker-compose.yml ์—์„œ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋„ +1ํ•˜์‹ญ์‹œ์˜ค.

์ด์ „ ์˜๊ฒฌ์„ ์š”์•ฝํ•˜๋ฉด : ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ์กฐํšŒ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์ „ ํ•ญ๋ชฉ์ด ์ดํ›„ ํ•ญ๋ชฉ๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

  1. ์ง€์ •๋œ ๊ฒฝ์šฐ --project-name ์‚ฌ์šฉ
  2. ์ง€์ •๋œ ๊ฒฝ์šฐ COMPOSE_PROJECT_NAME ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ project_name ์—์„œ ํ‚ค docker-compose.yml (๋˜๋Š” ํ•ด๋‹น ์„ค์ •์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ณณ).
  4. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์˜ basename

2 ๋Œ€ 3์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • --project-name ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด COMPOSE_PROJECT_NAME ๋Š” project_name: ๋ณด๋‹ค ํ™•์‹คํžˆ ์žฌ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ : COMPOSE_PROJECT_NAME ๋ฅผ project_name: ๋ณด๋‹ค ์šฐ์„ ํ•˜๊ฒŒํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์‹ค์ˆ˜๋กœ ์ž˜๋ชป๋œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

BC๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ๊ฐ’ %(project_name)s_%(service_name)s_%(instance_number)s ์™€ ํ•จ๊ป˜ ์ƒˆ ์†์„ฑ container_name_pattern ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ hardcodedproject_%(service_name)s_%(instance_number)s ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ ์ด ๋ฌธ์ œ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์„ 10 ๋ถ„ ๋™์•ˆ ํ™•์ธํ•œ ํ›„ ๋ฐฉ๊ธˆ์ด ๋ฌธ์ œ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ œ์ผ ๋จผ์ € ํ•œ ์ผ์€ Compose File Reference ๋ฌธ์„œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํ‚ค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์œผ๋ฏ€๋กœ docker-compose.yml ์—์„œ project_name ํ‚ค์— +1

: +1 : @ cr7pt0gr4ph7 ์ „๋žต์˜ ๊ฒฝ์šฐ

@ cr7pt0gr4ph7 ์ „๋žต์˜ ๊ฒฝ์šฐ +1

Compose์—๋Š” ํ™˜๊ฒฝ ๋Œ€์ฒด๋ฅผ์œ„ํ•œ ๊ตฌ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์‚ฌ๋žŒ๋“ค์ด ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์Šค์Šค๋กœํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

https://github.com/docker/compose/issues/745#issuecomment -182296139 ๋งž์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ž‘๋™ํ•˜๋Š” compose ํŒŒ์ผ์˜ ๊ฐ’๋ณด๋‹ค ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค (ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด compose ํŒŒ์ผ์— ์†ํ•œ๋‹ค๊ณ  ๊ฐ€์ •).

๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ, ๊ฐ๊ฐ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ์—ฌ๋Ÿฌ compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ?

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

๊ฒฝ๊ณ ๊ฐ€ ํ•ฉ๋ฆฌ์  ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์™„์ „ํžˆ ๋ฌด์‹œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ต์…˜์ด๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๊ฐ’์„ ๋ฌด์‹œํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ, ๊ฐ๊ฐ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ์—ฌ๋Ÿฌ compose ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ?

docker-compose -f compose1.yml -f compose2.yml up ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‘ ํŒŒ์ผ ๋ชจ๋‘ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฆ„์€ compose2.yml ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ชจ๋‘๊ฐ€ ๋‚ด๊ฐ€ ์ด๋ฏธ ์ข‹์•„ํ•˜๋Š” ์†”๋ฃจ์…˜์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :-) ์ฆ‰ docker-compose.yaml์˜ project_name . docker-compose.yaml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ํ”„๋กœ์ ํŠธ์—์„œ HTTP 500 ๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€์—์„œ, ๋‚˜๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚˜๋Š” ๊ทธ์—๊ฒŒ, ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ / ๊ทธ๋…€๊ฐ€ S / ๊ทธ๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” zcat database-dump.tgz | docker exec -i projectname_db_1 psql ์„œ๋ฒ„ ํ†ต์ง€์˜ ๊ฒฝ์šฐ ๊ทธ ์–ด๋–ค PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ง์ ‘ projectname ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋„์›€๋ง ๋ฉ”์‹œ์ง€๋ฅผ ์ฝ˜์†”์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

COMPOSE_PROJECT_NAME์ด compose.yml์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์žฌ์ •์˜ ํ•  ๋•Œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.์ด ๋™์ž‘์€ ๊ธฐ์กด Docker ๋ช…๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠนํžˆ ๋…ผ๋ฆฌ์ ์ด๊ฑฐ๋‚˜ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ cr7pt0gr4ph7 ์ „๋žต์˜ ๊ฒฝ์šฐ +1

๋‚ด๊ฐ€ ์•„๋ฌด๊ฒƒ๋„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ๋ฌธ์ œ๋ฅผ ์—ด๊ธฐ ์ „์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.
docker.compose.yml ํŒŒ์ผ์—์„œ project_name ์— ๋Œ€ํ•œ +1. v2์—์„œ๋Š” ์ด๊ฒƒ์ด ์ ์  ๋” ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

COMPOSE_PROJECT_NAME์ด compose.yml์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์žฌ์ •์˜ ํ•  ๋•Œ ๊ฒฝ๊ณ ๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.์ด ๋™์ž‘์€ ๊ธฐ์กด Docker ๋ช…๋ น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠนํžˆ ๋…ผ๋ฆฌ์ ์ด๊ฑฐ๋‚˜ ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ๊ตฌ์„ฑ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๊ณ  ๋ช…๋ น ์ค„ ์ธ์ˆ˜๊ฐ€ ๊ตฌ์„ฑ ์„ค์ • ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ •์ƒ์ ์ธ ๋™์ž‘์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์ •๋ง๋กœ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ์ž…๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์‹ค์ˆ˜๋กœ COMPOSE_PROJECT_NAME ๋ผ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š”

project_name ์—์„œ docker-compose.yml project_name ๋งŒ ์‚ฌ์šฉํ•˜๋Š” PR์„ ๋งŒ๋“ค์–ด๋„ ๋ ๊นŒ์š”? ์•„๋‹ˆ๋ฉด ๋งˆ์ง€๋ง‰ yml ํŒŒ์ผ์˜ project_name ๊ฐ’์„ ์ฆ‰์‹œ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ํ•ญ๋ชฉ์„ ์›ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฑด ์–ด๋•Œ์š”?

version: "2"
project:
    default_name: "app"

์ด ํ˜•์‹์— ๋Œ€ํ•œ ๊ตฌํ˜„ (https://github.com/docker/compose/pull/3118)์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ project ์„น์…˜์ด ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ....

+1์ด ๊ธฐ๋Šฅ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@timgriffiths ๋Š” ํ”„๋กœ์ ํŠธ์— ํ™˜๊ฒฝ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ตœ์‹  RC์—์„œ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@deizel ๊ทธ๋ž˜์„œ ํ™˜๊ฒฝ ํŒŒ์ผ์„ ์‚ดํŽด ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ compose ํŒŒ์ผ ๋‚ด์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ ํ•  ์ˆ˜์žˆ๋Š” ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์ƒํ™ฉ์—์„œ๋Š” Prod, Staging, UAT, Dev๊ฐ€ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šคํƒ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋•Œ๋กœ๋Š” ๋™์ผํ•œ ๋–ผ์—์„œ Staging ๋ฐ UAT ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜์—ฌ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ๋˜๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๊ฒƒ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ์ž‘์„ฑ ํŒŒ์ผ์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“  ๊ฒƒ์ด ์ €์žฅ์†Œ์— ์ฒดํฌ์ธ๋˜๊ณ  ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ชจ๋“  ๊ฒƒ์„ ์ธ๋ผ์ธํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@edevenport ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ ๋ช…๋ช… ๋œ ๋ณผ๋ฅจ์˜ ์™ธ๋ถ€ ์˜ต์…˜ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# docker-compose.prod.yml
volumes
  dbdata:
    external:
      name: my-project-db-data

@fesor ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค-๋” ์ž์„ธํžˆ ์„ค๋ช… ํ–ˆ์–ด์•ผ ํ–ˆ์–ด์š”. ์‹ค์ œ๋กœ ๋‹ค์Œ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ glusterfs ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

    ...
    volumes:
      - media:/data/media:ro

volumes:
  media:
    driver: glusterfs

์ด ๊ฒฝ์šฐ media ๋Š” ํ˜ธ์ŠคํŠธ์—์„œ projectname_media ๊ฐ€๋˜๋ฉฐ glusterfs ๋ณผ๋ฅจ์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š” ํ•œ ๋งˆ์šดํŠธ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. glusterfs ๋ณผ๋ฅจ์„ ํ˜ธ์ŠคํŠธ์— ์ˆ˜๋™์œผ๋กœ ๋งˆ์šดํŠธํ•˜๊ณ  docker-compose ํŒŒ์ผ์—์„œ external ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋ฏธ๋ฆฌ ๋ชจ๋“  ๋…ธ๋“œ์—์„œ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@edevenport ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ docker volume create ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋ณผ๋ฅจ์„ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    volumes:
      - media:/data/media:ro

volumes:
  media:
    external:
      name: my-glusterfs-media

๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ์ ‘๋‘์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

@timgriffiths ์˜ ๊ฒฝ์šฐ๋Š” ๋” ๋ณต์žกํ•˜๋ฉฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ธฐ์–ตํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด docker-compose ์ฃผ์œ„์— ๊ฐ„๋‹จํ•œ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@fesor ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์„ค๋ช… ํด๋” ์ด๋ฆ„์— compose ํŒŒ์ผ์„

@timgriffiths ๋‚˜๋Š” PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค (https://github.com/docker/compose/pull/3118)-์•„๋งˆ๋„ ์ด๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๋Ÿฌ compose ํŒŒ์ผ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์ผ€์ด์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@fesor PR์ด ์™„๋ฒฝ ํ•  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์ด ํ•ฉ๋ณ‘ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์ œ Compose๋Š” ํ™˜๊ฒฝ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mkuzmin COMPOSE_FILE ์ด (๊ฐ€) ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์Šฌํ”„์ง€๋งŒ COMPOSE_OVERRIDE_FILE ์ด (๊ฐ€) ์—†์Šต๋‹ˆ๋‹ค.

@fesor AFAIK ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ schmunk42 ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

docker-compose up -d

๋Œ€์‹ ์—

docker-compose -f $COMPOSE_FILE -f $COMPOSE_OVERRIDE_FILE \
            up -d

์œ„์˜ ์˜ˆ์—์„œ COMPOSE_PROJECT_NAME ๋Š” CI๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  .env ํŒŒ์ผ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์€ ๋ฉ‹์ง€์ง€๋งŒ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ง€์†๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ DRYํ•˜๊ธฐ ์œ„ํ•ด .env ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ (๊ทธ๋ฆฌ๊ณ  docker-compose <1.7์˜ ๊ฒฝ์šฐ์—๋Š” ๊ฐ„๋‹จํ•œ ๋ž˜ํผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค), ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @timgriffiths๋Š” ์ด๋ฏธ swarm ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ ํ•œ ์‚ฌ๋ก€๋ฅผ ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

COMPOSE_FILE=one.yml:two.yml ๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ $COMPOSE_FILE ์žฌ์ •์˜ ํŒŒ์ผ์„ ํฌํ•จํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

@dnephin ์€ ๊ทธ ๊ธฐ๋Šฅ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„ ... ๊ตฐ์ง‘ ๋ฐฐํฌ์— ๋Œ€ํ•ด, ๋‚˜๋Š” ์ด๋ฏธ ๋‚ด jenkin์˜ ์ž‘์—… ENV ๋ณ€์ˆ˜์—์„œ COMPOSE_PROJECT_NAME ๋ฅผ ํ†ตํ•ด ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์ˆ˜๋™ ๋ฐฐํฌ์—๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ๊ตฌํ˜„์€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ...

์ด ๋ฌธ์ œ๋Š” ๊ฑฐ์˜ 2 ๋…„์ด ์ง€๋‚ฌ์ง€ ๋งŒ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋„์ปค ํŒ€์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ ์ ˆํ•œ ์ˆ˜์ •์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์ •ํ™•ํžˆ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. docker-compose.yml ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ƒˆ ๊ตฌ์„ฑ ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๊นŒ?

.env ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ข‹์ง€๋งŒ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค ( .env ํŒŒ์ผ์€ ์ด๋ฏธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ ์ค‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „ (# 3966)์— ํฌํ•จ๋˜๋Š” ๊ฒƒ๋„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ •๋ง๋กœ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

docker-compose.yml ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์ƒˆ ๊ตฌ์„ฑ ์ง€์‹œ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ! ๋ฌธ์ œ๋Š” ๊ตฌํ˜„์˜ ์–ด๋ ค์›€์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

.env ์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ข‹์ง€๋งŒ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค ( .env ํŒŒ์ผ์€ ์ด๋ฏธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ ์ค‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋ผ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค! .env ํŒŒ์ผ์—๋Š” Compose์—์„œ ์ฝ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฝ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒŒ์ผ (์˜ˆ app.env )์— ๋„ฃ๊ณ  env_file ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ž˜์„œ ์ •๋ง๋กœ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

docker-compose.yml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์‹์„ฑ์ด ๋–จ์–ด ์ง€๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ docker-compose.yml ์˜ ์ด์‹์„ฑ์„ ํฌ์ƒํ•˜์ง€ ์•Š๊ณ  ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ( .env )์ด ์žˆ์œผ๋ฏ€๋กœ ๊ตฌ์„ฑ ์˜ต์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

docker-compose.yml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์‹์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

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

๋…ผ์Ÿ ํ›„์—๋Š” ๋ชจ๋“  network ์˜ต์…˜์„ .env ๋กœ ์ด๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ „ํ˜€ ์ด์‹ ํ•  ์ˆ˜์—†๊ณ  ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ๋„คํŠธ์›Œํฌ ์„ค์ •์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ง๋กœํ•˜๋ฉด : ๋ฌด์—‡์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํŠน๋ณ„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š”๊ฐ€? docker-compose.yml ์—๋Š” ์‹ค์ œ๋กœ ์ด์‹ ํ•  ์ˆ˜์—†๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์˜ต์…˜์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ž์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒƒ์„ ์„ ํƒํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋˜ํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Docker ์‚ฌ์šฉ์ด ๋”์šฑ ๊ด‘๋ฒ”์œ„ ํ•ด์ง์— ๋”ฐ๋ผ ์›Œํฌ ํ”Œ๋กœ ๋‚ด์—์„œ ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•œ ๋ช… ๋ฟ์ธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ ์  ๋” ๋ณดํŽธํ™” ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ผ์ •ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ์œ ์—ฐ์„ฑ์„ ํ—ˆ์šฉํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ข‹์€ ์˜ˆ๋Š” Vagrantfile ๋ฐฉ๋ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ™•์‹คํžˆ ๋Œ€๊ทœ๋ชจ ํŒ€์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์™ธ๋กœ์šด ๋Š‘๋Œ€ ๊ฐœ๋ฐœ์ž ์‹œ๋‚˜๋ฆฌ์˜ค๋„ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์˜ต์…˜์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ฑ„ํƒ์— ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๊ตฌ์„ฑ ์ „๋žต"์— ๊ด€์‹ฌ์ด์—†๋Š” ์†”๋กœ ๊ฐœ๋ฐœ์ž๋ฅผ ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ docker-compose.yml ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์‹์„ฑ์ด ๋–จ์–ด ์ง€๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ docker-compose.yml์˜ ์ด์‹์„ฑ์„ ํฌ์ƒํ•˜์ง€ ์•Š๊ณ  ์ง€์†์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• (.env ์‚ฌ์šฉ)์ด ์žˆ์œผ๋ฏ€๋กœ ๊ตฌ์„ฑ ์˜ต์…˜์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•ฝํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

docker-compose.yml ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์ด์‹์„ฑ์ด ๋–จ์–ด ์ง‘๋‹ˆ๊นŒ?

IMHO @mikehaertl์ด ๋งŒ๋“  # 3966์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์‹ค์ œ๋กœ๋Š” ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด docker-compose.yml ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด Compose๊ฐ€ ๋‹ค์Œ์— ๋Œ€ํ•œ ๊ทœ์น™์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์ด์‹์„ฑ์ด ๋–จ์–ด์ง์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค (์˜ˆ : ๊ฐ™์€ ์ปดํ“จํ„ฐ์—์„œ ์‹œ์ž‘๋œ ๋‹ค๋ฅธ compose ํ”„๋กœ์ ํŠธ์™€ ์ถฉ๋Œ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋” ์ปค์ง). ์ ์–ด๋„ ์ฒ˜์Œ์—๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ํด๋” ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

.env ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋ฉด Compose๋ฅผ ์ฑ„ํƒํ•˜๋ ค๋Š” ์ƒˆ๋กœ์šด ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฐฐ์šธ ์ˆ˜์žˆ๋Š” ์ถ”๊ฐ€ ์‚ฌํ•ญ์ด ์ถ”๊ฐ€ ๋ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด docker-compose.yml ์˜†์—์žˆ๋Š” ๋‚ด ์ €์žฅ์†Œ์—๋„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ docker-compose.yml ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ด์‹์„ฑ์ด ์–ผ๋งˆ๋‚˜ ๋‹ค๋ฅธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๋ณต์ œ ์ €์žฅ์†Œ
๋„์ปค ๊ตฌ์„ฑ

๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ @ schmunk42๊ฐ€ ์ œ์•ˆํ•œ ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

docker-compose.yml ํŒŒ์ผ์—์„œ ์ด์— ๋Œ€ํ•œ ์ง€์›์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ผ ๊ฐœ ํ•„์š”๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋‚ด์—์„œ ์ •์˜ ๋  ์ˆ˜ .env (ํ˜ธ์ŠคํŠธ์— ์ง์ ‘ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ) ๋ฐ ๊ฐ€๋ณ€ ๊ต์ฒด๋กœ ์‚ฌ์šฉ ํŒŒ์ผ docker-compose.yml ํŒŒ์ผ.

๋ช…๋ช… ๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋ช…๋ช… ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

$ COMPOSE_PROJECT_NAME์„ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜ ๋Œ€์ฒด๊ฐ€ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. .env ํŒŒ์ผ ์†”๋ฃจ์…˜์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ (CI) ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ๋” "๊ฐœ๋ฐœ์ž ์นœํ™”์ "์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

-p ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ธํŠธ๊ฐ€์—†๊ณ  "docker"ํ•˜์œ„ ํด๋”์— docker-compose๋ฅผ ์ƒ์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ๋‹ค๋ฅธ docker-compose์˜ ํ•˜๋‚˜์˜ docker-compose kill ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์ œ ์ƒ๊ฐ์— ์ค‘์š”ํ•œ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค.

์‹ฌ๊ฐํ•œ ๋ฐฐํฌ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์—ฌ์ง€๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. -p, .env ๋˜๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด ๋‚ฌ๋Š”์ง€ ์•Œ ๋•Œ๊นŒ์ง€ ์ž ์‹œ ๋™์•ˆ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋” ๋‚˜์œ ๊ฒƒ์€ ์ถฉ๋Œํ•˜๋Š” ์„œ๋น„์Šค๊ฐ€ ํ˜„์žฌ ์ž‘์—…์ค‘์ธ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์˜คํ”„๋ผ์ธ ์ƒํƒœ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ํ–‰๋ณตํ•œ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค :(

@dnephin ๋งˆ์นจ๋‚ด ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ปค ํŒ€์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์–ผ๋งˆ๋‚˜ ๋” ๋งŽ์€ ๋ถˆ๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋ฏฟ๊ธฐ ์–ด๋ ค์šด ์‚ฌ์†Œํ•œ ์ˆ˜์ •์ด๋ฉฐ ์—ฌ์ „ํžˆ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์šฐ๋ คํ•˜๋Š” ์œ ์ผํ•œ ์‚ฌ๋žŒ ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์–ด์จŒ๋“ .
์„ค์ •์—์„œ๋Š” ํ™˜๊ฒฝ ์ „ํ™˜์„ ์œ„ํ•ด .env ๋ฐ app.env ํŒŒ์ผ ๋งŒ ์ˆ˜์ •ํ•˜์ง€๋งŒ ์ด๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ๊ณ  yml ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฐ ์˜์กดํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ตฌํ˜„๋˜๋ฉด BC์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

์˜ˆ : ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด docker-compose.yml ๋ฐ .env ๊ฒฝ์šฐ ํ›„์ž๊ฐ€ ์šฐ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด .env ๋ฅผ ํ†ตํ•ด์ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์˜์กดํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ํ˜„์žฌ ์›Œํฌ ํ”Œ๋กœ ๋ฐ ํด๋” ์ด๋ฆ„์— ์˜์กดํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์Šคํƒ์ด ๊ฒน์น˜๋Š” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@ schmunk42 .env ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. .env ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด docker-compose.yml ์—์„œ ๊ตฌ์„ฑํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ๊ธฐ์—์žˆ๋Š” ๋…ผ์˜๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ ์ฃผ๋“ฏ์ด docker-compose.yml ์—์žˆ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ์›ํ•œ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ ์šฐ์„  ์ˆœ์œ„๋Š” ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Srsly, ๋ช…๋ช… ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์šฉ ์‚ฌ๋ก€ :
ํ”„๋กœ์ ํŠธ 1 :
docker-compose up --build --remove-orphans

  • nginx
  • ์ •์  ์ฝ˜ํ…์ธ 
    ํ”„๋กœ์ ํŠธ 2 :
    docker-compose up --build --remove-orphans
  • nginx
  • ์ •์  ์ฝ˜ํ…์ธ 

ํ”„๋กœ์ ํŠธ 2๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์ถœ๊ตฌ 137 (์ฝ”๋“œ 128 + ๋ ˆ๋ฒจ 9)์ด์žˆ๋Š” ํ”„๋กœ์ ํŠธ 1์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ๋Š” docker system prune ์„ (๋ฅผ) ์‹คํ–‰ํ•˜๊ณ  ๋งค์ผ ๋„คํŠธ์›Œํฌ๋ฅผ ์žฌ ๊ตฌ์ถ•ํ•˜์—ฌ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์ง€ ์•Š๋„๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

export COMPOSE_PROJECT_NAME=somethingnew

ํ•ต์‹ฌ ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งˆ์นจ๋‚ด์ด ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ณ ์žˆ๋Š” ์ด์œ ๋ฅผ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋„ˆ๋ฌด ์‹ค๋ง์Šค๋Ÿฝ๊ณ , ๊ณ ์น˜๊ธฐ ์‰ฌ์šด ์ผ์ด ์ •๋‹นํ•œ ์ด์œ ์—†์ด ์ฐจ๋‹จ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์œ ์ผํ•œ ์ฃผ์žฅ์€ docker-compose.yml ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ง์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ž‘์„ฑ๊ธฐ ํŒŒ์ผ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ž๋™์œผ๋กœ ๋” ์ด์ƒ ์ด์‹ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

    • ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด์‹์„ฑ์„ ์ œํ•œ ํ•  ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค : networks , port , ...

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

@mikehaertl ์ด๋ฏธ ์˜๊ตฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. .env ํŒŒ์ผ์„ ๋„ฃ๊ณ  ๊ฑฐ๊ธฐ์— COMPOSE_PROJECT_NAME ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๋” ์ด์ƒ compose ํŒŒ์ผ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์•„๋ฌด๋Ÿฐ ์ด์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

@fesor ์ผ๋ฐ˜์ ์œผ๋กœ .env ํŒŒ์ผ์€ ์‹œ์Šคํ…œ / ํ™˜๊ฒฝ ๋ณ„ ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜์— docker-compose.yml ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. .

@fesor : @thasmo ๊ฐ€ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ compose.yml ํŒŒ์ผ์— ์ง€์ •๋˜๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์™€ ๊ด€๋ จ์ด์žˆ๋Š” ๊ฒฝ์šฐ ๋ฒ„์ „ ์ œ์–ด์— ์žˆ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@fesor ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๊ฐœ์ธ์ ์ธ ์ทจํ–ฅ์ด ์ง„์ •ํ•œ ๋…ผ์Ÿ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง„์งœ ์งˆ๋ฌธ์€ .env ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์™œ ๊ทธ๊ฒƒ์ด ์†ํ•œ ์„ค์ • ํŒŒ์ผ์— ๋„ฃ์ง€ ์•Š์•˜ ์Šต๋‹ˆ๊นŒ?

๋ช…๋ น ์ค„์—์„œ docker ์— ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์˜ต์…˜์„ ํ•ด๋‹น ํŒŒ์ผ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์‹ ๋น„ํ•œ ์ด์œ ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋งŒ ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋…ผ์Ÿ ์‚ฌ์ด์—์„œ ์ผ์ข…์˜ ์ธ์ข… ์ฐจ๋ณ„ ์ •์ฑ…์ž…๋‹ˆ๊นŒ? : PI๋Š” ๊ทธ๋“ค ๋ชจ๋‘์— ๋Œ€ํ•ด ๋™๋“ฑํ•œ ๊ถŒ๋ฆฌ๋ฅผ ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค! ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฒฐ์ •ํ•˜๋„๋กํ•˜๊ณ  ์ธ์œ„์ ์ธ ์ œ์•ฝ์„ ๊ฐ€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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

@dnephin : ์ด ๋ฌธ์ œ ์— ๋Œ€ํ•œ

๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๊ธฐ๊บผ์ด ๋ฐ›์•„๋“ค์ด๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์œ ์ง€ ๊ด€๋ฆฌ์ž ์ค‘ ํ•œ ๋ช…์ด ์ž‘์„ฑํ•˜๋„๋ก ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

* ํ‘œ์‹œ compose.yml์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ฐ€์ง„ @fesor @dnephin ๊ฒƒ์€ ํ†ตํ•ฉ ๊ตฌ์„ฑ ์Šคํ‚ค๋งˆ๋ฅผ ์šฉ์ดํ•˜๊ฒŒ

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ค‘์š”ํ•œ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ์œ ์ผํ•œ ์ค‘์š”ํ•œ ํŠน์„ฑ์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ docker-compose.yml ํŒŒ์ผ ์— ๋„ฃ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์Ÿ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž๋Š” ์ข…์ข… ๊ฐ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€์ด๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค ( -p ๋˜๋Š” COMPOSE_PROJECT_NAME ). ๋ณ„์นญ ๋˜๋Š” .env ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

์ €๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์ด ๊ธฐ๋Šฅ์ด ์ผ๋ถ€์—๊ฒŒ ์™œ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•œ์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Compose ํŒŒ์ผ์— ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” 1 ๊ฐœ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— 4 ๊ฐœ์˜ compose ํŒŒ์ผ์„ ๊ฐ–๊ณ  ์‹ถ์—ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ์œ ์ผํ•œ ์˜ต์…˜์€ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํ•˜๋‚˜์˜ ์ž‘์„ฑ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” .env์ž…๋‹ˆ๋‹ค.

_COMOSE_PROJECT_NAME ๋ฐ -p : _๋ฅผ ๋ฐฐ์ œํ•˜๋Š” ์ด์œ 
COMPOSE_PROJECT_NAME ๋ฐ -p๋Š” ์„ค์ •์„ ๊ธฐ์–ตํ•ด์•ผํ•˜๋ฏ€๋กœ ํ”„๋กœ๋•์…˜์— ์ €์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  docker compose up์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์‚ฌ๋žŒ A๊ฐ€์ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜์กดํ•˜๊ณ  ์‚ฌ๋žŒ B๊ฐ€ ๊ทธ๊ฒƒ์„ ๋ชจ๋ฅด๋ฉด ๊ทธ๊ฒƒ์€ ํŠน์ •ํ•œ ์‹คํŒจ์ž…๋‹ˆ๋‹ค.
(์ด๋ฏธ ์œ„์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค)

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

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ค‘์š”ํ•œ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ์—์„œ '๋„์ปค-์ปด ํฌ์ฆˆ ๋‹ค์šด (docker-compose down)'์„ํ–ˆ๊ณ  ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์šด์‹œํ‚จ ์ผ์ด ๋‘ ๋ฒˆ ์ด์ƒ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค! ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— .env ํŒŒ์ผ์—๋„ ๊ตฌ์„ฑ์ด ์žˆ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋‹น์‹  ์—๊ฒŒ ์‚ฌ์‹ค ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ €์™€ ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์•ฑ ๊ตฌ์กฐ๋Š” myapp/app/docker-compose.yml . ๋”ฐ๋ผ์„œ ๋‚ด ๋ชจ๋“  ์•ฑ์€ app ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ŠคํŠธ์— ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€์ด๋ฅผ ์žฌ์ •์˜ (-p ๋˜๋Š” COMPOSE_PROJECT_NAME) ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋ฐฉ๋ฒ•์€ ๋ณ„์นญ์ด๊ฑฐ๋‚˜ .env ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง„์ง€ํ•˜๊ฒŒ, ๋‚˜๋Š” ๋‚ด๊ฐ€ ์—ฌ๊ธฐ Kafka ์†Œ์„ค์—์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๋ผ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. docker ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ช…๋ น ์ค„ ์˜ต์…˜์„ ๊ธฐ๋ณธ์ ์œผ๋กœ docker-compose.yml ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ์—๊ฒŒ ๊ณ„์†ํ•ด์„œ ์งˆ๋ฌธํ•˜๊ณ  ์šฐ๋ฆฌ์˜ ๋Œ€๋‹ต์„ ๋ฌด์‹œํ•˜๋Š” ๋Œ€์‹  ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งˆ์นจ๋‚ด ์ €ํ•ญ์„ ์ •๋‹นํ™” ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์•„๋‹ˆ์˜ค : "...ํ•˜์ง€๋งŒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค"๋Š” ์œ ํšจํ•œ ์ธ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค!

@dnephin ์ž์ฒด git ์ €์žฅ์†Œ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ฃจํŠธ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  docker ๊ด€๋ จ ํ•ญ๋ชฉ์„ docker ๋ผ๋Š” ํ•˜์œ„ ํด๋”์— ๋„ฃ์Šต๋‹ˆ๋‹ค (๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋Š” .. , ๋ชจ๋‘ ์•„๋ฆ„๋‹ต๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

๋‹จ์ผ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํ˜„์žฌ ๊ฐ ์ €์žฅ์†Œ์— docker/.env.dist ๋ฅผ ๋งŒ๋“ค๊ณ  cp docker/.env.dist docker/.env ๋’ค์— git clone cp docker/.env.dist docker/.env ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์€ docker ์ด๋ฉฐ ๋ถ„๋ช…ํžˆ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ .env ์—๋Š” ์•”ํ˜ธ ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ .env.dist ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ COMPOSE_PROJECT_NAME ๋ฅผ ์ •์˜ ํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— .env ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. COMPOSE_PROJECT_NAME docker-compose.yml .

docker-compose.yml ๋‚ด์—์„œ ๋™์ผํ•œ COMPOSE_PROJECT_NAME ๋‘ ๋ฒˆ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์ค‘์ง€๋˜๋Š” ๋ฐฉ์‹์— ๊ฒฐํ•จ์ด์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ .env.dist ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์žŠ์€ ๊ฒฝ์šฐ ์ด๋ฏธ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์‹ค์ˆ˜๋กœ ๋™์ผํ•œ ์„œ๋ฒ„์—์žˆ๋Š” ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ .env ํŒŒ์ผ์— ๋™์ผํ•œ ์ด๋ฆ„์„ ํ• ๋‹น ํ•œ ๊ฒฝ์šฐ. ๋‚ด๊ฐ€ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚˜์—๊ฒŒ๋Š” ์ด์ƒ์  ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค default_compose_project_name ์˜ค๋ฅธ์ชฝ docker-compose.yml ๋‹ค์Œ์˜ ๊ฐ’์„ ์˜ค๋ฒ„๋ผ์ด๋“œ (override) .env ,์˜ ๋‚ด๊ฐ€ ์–ด๋–ค ํ”„๋กœ์ ํŠธ์˜ ์ค€๋น„ ๋ณต์‚ฌ๋ณธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๊ฐ€์ • ํ•ด ๋ด…์‹œ๋‹ค ๊ฒฝ์šฐ . ์ด๊ฒƒ์€ ๊ธฐ์›์ „ 100 %์ด์ง€๋งŒ ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ ๊ทธ๊ฒŒ ์ „๋ถ€์˜ ๊ทผ๋ณธ ์›์ธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. docker-compose ์ „์—์ด ํŒŒ์ผ์„ "๋„์šฉ"ํ–ˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์ด๋ฆ„์„ app.env ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ docker-compose.env ์ด ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ด์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FWIW : ํ”„๋กœ๋•์…˜์—์„œ .env ํŒŒ์ผ ๋งŒ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, yml ํŒŒ์ผ์€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ docker-compose.override.yml ์™€ ๋ณ‘ํ•ฉ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์€ .env ํŒŒ์ผ ์—†์ด๋Š” ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ yml ํŒŒ์ผ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ image: $IMAGE .

์ด๊ฒƒ์€ @ schmunk42 ์œ„์˜ 1 ๋””๋ ‰ํ† ๋ฆฌ ์ผ€์ด์Šค์—์„œ 4 ๊ฐœ์˜ docker- compose ํŒŒ์ผ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ •๋ง?

@RobIsHere ํ•˜์ง€๋งŒ ์–ด์จŒ๋“  -f ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋Œ“๊ธ€์— @dnephin ์— ๋Œ€ํ•œ ๋‹ต๊ธ€ :

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ค‘์š”ํ•œ ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker-compose ๊ด€๋ฆฌํ•˜๋Š” Docker ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์€ ๊ฒฝ์šฐ docker-compose ps ๋Š” ์ด์ „์— docker-compose --project-name <project_name> up -d <container_name> ๋งŒ๋“  ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฐพ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

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

๊ตฌ์„ฑ ํŒŒ์ผ์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

Docker Compose ํ”„๋กœ์ ํŠธ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋‹ค๋ฅธ ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅธ ์œ„์น˜์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ์œ ์ผํ•œ ์ค‘์š”ํ•œ ํ’ˆ์งˆ์€ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ docker-compose.yml ํŒŒ์ผ์— ๋„ฃ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์Ÿ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ฒซ ๋ฒˆ์งธ ๋‹จ๋ฝ์— ์–ธ๊ธ‰ ๋œ ์ด์œ  ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ _ "ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์˜ ์œ ์ผํ•œ ์ค‘์š”ํ•œ ํ’ˆ์งˆ"_์ด ์•„๋‹™๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๊ฐœ๋ฐœ์ž๋Š” ์ข…์ข… ๊ฐ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ๊ฐ’์ด ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€์ด๋ฅผ ์žฌ์ •์˜ (-p ๋˜๋Š” COMPOSE_PROJECT_NAME) ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋ฐฉ๋ฒ•์€ ๋ณ„์นญ์ด๊ฑฐ๋‚˜ .env ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ์ˆ˜์ค€์˜ ๋ณต์žก์„ฑ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ ์ œ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ„์— ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต์œ  ํ•  ๋•Œ ํŒŒ์ผ ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐ ํ˜ธ์ถœ์— ๋ช…๋ น ์ค„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์ง€๋ฃจํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  .env ํŒŒ์ผ์€ _project-specific_ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ _user-specific_ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ ์ œ์–ด์—์„œ ๊ณต์œ  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ์ด ๊ธฐ๋Šฅ์ด ์ผ๋ถ€์—๊ฒŒ ์™œ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•œ์ง€ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Compose ํŒŒ์ผ์— ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

docker-compose ์˜ ๊ธฐ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” docker-compose.yml ํŒŒ์ผ ์ธ ๋™์ผํ•œ ์œ„์น˜์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด์ด ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

docker-config.yml ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด๋„ ํ˜„์žฌ ๊ธฐ๋Šฅ๊ณผ ์ถฉ๋Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@ schmunk42 ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ docker์—์„œ .env ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์„ ํƒํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค์Šต๋‹ˆ๊นŒ (๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋”ฐ๋ผ ์žก๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค). docker-compse.env์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๊ฒŒ ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ฌธ์ œ๋Š” .env ํŒŒ์ผ์ด ํ•„์š”ํ•œ ๋‘ ๊ฐ€์ง€ ๋งค์šฐ ์ธ๊ธฐ์žˆ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. PHP Laravel ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์ €์žฅ์†Œ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์„ ์ถ”์ ํ•˜์ง€ ์•Š์œผ๋ฉฐ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋•Œ๋•Œ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@RobIsHere๊ฐ€ ๋ณด์—ฌ ์•Œ์•˜์Šต๋‹ˆ๋‹ค . ๋‚ด ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” myapp/htdocs/docker-compose.yml ํ˜•์‹์ž…๋‹ˆ๋‹ค. Docker๋ฅผ ์ฑ„ํƒํ•œ ์ดˆ๊ธฐ์—๋Š” ์˜๋„ํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹ค์ˆ˜๋กœ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„ ์ปค๊ฐ€ ๋‚ด ๊ฒฝ์šฐ ํด๋” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฌด์ž‘์œ„๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Docker๋ฅผ ์ฑ„ํƒํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋‹ค๋ฅธ ์›๊ฒฉ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋ช… ์žˆ์Šต๋‹ˆ๋‹ค. ํŒ€์œผ๋กœ์„œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ•ญ์ƒ / ๋‹จ์ง€ docker-compose up ๋งŒ ์ด๋Ÿฌํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์–ผ๋ฆฌ ์–ด๋‹ตํ„ฐ๊ฐ€ Docker์— ๋Œ€ํ•ด ๋œ ์•Œ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ ๋’ค์— ์ˆจ์€ ํž˜์„ ์•Œ๊ฒŒ๋˜๋ฉด ์Šค์Šค๋กœ ์•Œ์•„ ์ฐจ๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๊ธฐ๋ณธ๊ฐ’์ด ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

@dnephin Docker์˜ ์–ผ๋ฆฌ ์–ด๋‹ตํ„ฐ์—๊ฒŒ ๊ฐ€๋Šฅํ•œ ๊ฑธ๋ฆผ๋Œ์ด ํ•˜๋‚˜ ๋” ์ ์Šต๋‹ˆ๋‹ค.

@dnephin ๋‹น์‹ ์€ ๋˜ํ•œ์ด ์ฝ”๋ฉ˜ํŠธ ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฐ๋ ค๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ํ™•์ธ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค (ํฐ ์ˆซ์ž๊ฐ€ ์ž‘์€ ์ˆซ์ž๋ณด๋‹ค ์šฐ์„  ํ•จ).

  1. docker-compose.yml
  2. COMPOSE_PROJECT_NAME ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  3. --project-name ๋ช…๋ น ์ค„ ์˜ต์…˜

๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ–ˆ์„ ๋•Œ docker๋Š” .env ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ์„ ํƒํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

@fiveanddone AFAIK ๋‹น์‹ ์€ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ENV ํŒŒ์ผ์„ ์•Œ์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๋ฅผ ์ด๋™์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

phd5 ์˜ ๊ฒฝ์šฐ (app) src/ ๋กœ ์˜ฎ๊ฒผ๊ณ  .env ๋Š” ์ „์ ์œผ๋กœ "control-environment-file"์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ค๋ช…ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์Šค์Šค๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ docker-compose.yml ์™€ ๋™์ผํ•œ ์ˆ˜์ค€์—์žˆ๋Š” .env ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ๋งค์šฐ ์„ฑ๊ฐ€ ์‹œ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด a) ๊ฑฐ๊ธฐ์— ์†ํ•˜์ง€ ์•Š๋Š” "์ œ์–ด ํ™˜๊ฒฝ"์—์„œ ๋ณ€์ˆ˜๋ฅผ ์–ป๊ณ  b) ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌํ•ด์•ผํ•˜๋ฉฐ, ํ•„์š”ํ•œ ๊ฒฝ์šฐ c) app.env ํŒŒ์ผ์—์„œ ๋” ์ด์ƒ ์žฌ์ •์˜ / ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@dnephin docker-compose.env ๋ฅผ ์„ ํ˜ธํ•˜๋Š” env ํŒŒ์ผ๋กœ ๋„์ž…ํ•˜๊ณ  .env ๋ฅผ ํด๋ฐฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? fig.yml ํ•œ ๋ฒˆ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .env ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ์ €์—๊ฒŒ ๋‹ค๋ฅธ ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

docker-compose up ์˜ ์›๋ž˜ ๋””์ž์ธ์€ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋‹จ์ผ (์งง์€) ๋ช…๋ น์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ์‚ฌ์šฉ์ž ( ์ด ๊ฒฝ์šฐ )์—์„œ๋Š”

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋งŽ์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ์„  ์ˆœ์œ„ (๊ฐ€์žฅ ๋†’์€ ์ˆœ์„œ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์„œ๋กœ)๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. --project-name (ํ•ญ์ƒ ์žฌ์ •์˜)
  2. COMPOSE_PROJECT_NAME ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  3. ๋ฒ„์ „์ด ์ง€์ •๋œ ํŒŒ์ผ๊ณผ ๋ณ„๋„๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๊ธฐ๋ณธ๊ฐ’
  4. ์ฒดํฌ์ธ ํ•  ์ˆ˜์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์ •์˜ํ•œ ๊ธฐ๋ณธ๊ฐ’
  5. ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„ (์•„๋ฌด๊ฒƒ๋„ ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’)

(3) .docker/project-name ํŒŒ์ผ (OP์—์„œ ์ œ์•ˆํ•œ๋Œ€๋กœ)์œผ๋กœ ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(4) docker-compose.yml ํŒŒ์ผ์˜ ํ•„๋“œ๋กœ ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆํƒ€๊น๊ฒŒ๋„ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๋ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@dnephin ์— ๊ด€ํ•œ 3, ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•˜๋„๋ก ํ—ˆ์šฉ, ๊ทธ๊ฒƒ์ด env vars์˜ ๋ชฉ์ ์ด๋ฉฐ ํŒŒ์ผ์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์Œ ... ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ ์ผ๋ฐ˜ํ™”ํ•˜๊ณ  docker-compose.yml default_environment ์„น์…˜์„ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์ด๋ ‡๊ฒŒํ•˜๋ฉด yaml์— ํŠน์ˆ˜ ํ•„๋“œ๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ ๋„ COMPOSE_PROJECT_NAME ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŒŒ์ผ ์ „์ฒด์— ๋‚˜ํƒ€๋‚  ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๋ณ€์ˆ˜๋„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด .env.dist ๋ฅผ .env ๋ณต์‚ฌํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ณ ์ด๋ฅผ ์žŠ์–ด ๋ฒ„๋ฆฌ๋Š” ๋น„์šฉ์ด ์ค„์–ด ๋“ญ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ :

# ~/projects/sketches/sketch-42/docker/docker-compose.yml
version: "2"
default_environment:
  - SUBDOMAIN=sketch-42
  - ROOT_HOST=example.com
  - COMPOSE_PROJECT_NAME=sketch-42
services:
  web:
    build:
      context: ../
      dockerfile: docker/Dockerfile
    environment:
      - VIRTUAL_HOST=${SUBDOMAIN}.${ROOT_HOST},www.${SUBDOMAIN}.${ROOT_HOST}
      - VIRTUAL_PORT=80
      - VIRTUAL_NETWORK=proxy
      - LETSENCRYPT_HOST=${SUBDOMAIN}.${ROOT_HOST},www.${SUBDOMAIN}.${ROOT_HOST}
      - LETSENCRYPT_EMAIL=admin@${ROOT_HOST}
    restart: always
    networks:
      - proxy

networks:
  proxy:
    external:
      name: proxy

์ด yaml์€ ๋‚ด๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ web ๋ผ๋Š” ์„œ๋น„์Šค๊ฐ€ ์žˆ์ง€๋งŒ ๋ฏธ๋‹ˆ API ์„œ๋ฒ„ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฑ์—… ํ•  ์ˆ˜๋„์žˆ๋Š” vis ์Šค์ผ€์น˜๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. https://github.com/jwilder/nginx-proxy ๊ฐ€ ๋ชจ๋“  ๊ฒƒ์˜ ์ „๋ฉด์— ์žˆ๊ณ  ์‹ค์ œ ํฌํŠธ 80 ๋ฐ 443์„ ์ˆ˜์‹ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

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

default_environment ์„น์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํ”„๋กœ๋•์…˜ ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ฐฐ์น˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์„œ๋ฒ„์—์„œ .env.dist ๋ฅผ ๋ณต์‚ฌ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ์œ„์˜ ์˜ˆ์—์„œ๋Š” .env ๋‹จ์ผ ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ROOT_HOST=example.com.dev (๋˜๋Š” bash ํ”„๋กœํ•„์—์„œ export ROOT_HOST=example.com.dev ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๊นŒ? )

์š”์•ฝํ•˜๋ฉด, default_environment ์„น์…˜ docker-compose.yml ๋‹จ์ง€ ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ ๋…ผ์˜ํ•˜๊ณ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜์—†๋Š”, ๋˜ํ•œ 100 % BC ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒํ•˜๋ฉด์„œ, ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋ฉ‹์ง„ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

์ข‹์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์ผ๋ถ€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ (๋œจ๊ฑฐ์šด) ๋…ผ์˜์— ๋น„์ถ”์–ด ๋ณผ ๋•Œ
์†”๋ฃจ์…˜์€ ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฒˆ์—ญ๋ฉ๋‹ˆ๋‹ค.โ€œ์ƒˆ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹ 
yml, ์ƒˆ ์„น์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?โ€ :)

2017 ๋…„ 2 ์›” 28 ์ผ ํ™”์š”์ผ 00:02 Alexander Kachkaev [email protected]
์ผ๋‹ค :

ํ  ... ๋ฌธ์ œ๋ฅผ ์กฐ๊ธˆ ์ผ๋ฐ˜ํ™”ํ•˜๊ณ  ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๋ฉด
docker-compose.yml์˜ default_env ์„น์…˜. ์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ๋ฆฌ๋Š”
yaml์— ํŠน์ˆ˜ ํ•„๋“œ๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ  COMPOSE_PROJECT_NAME
๋˜ํ•œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํŒŒ์ผ ์ „์ฒด์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ€์ด์Šค์˜ ์ˆ˜๋ฅผ ์ค„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค
.env.dist๋ฅผ .env๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•  ๋•Œ์™€ ์žŠ์–ด ๋ฒ„๋ฆฌ๋Š” ๋น„์šฉ
๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๊ฒƒ์€ ๋” ์ ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ :

~ / projects / sketches / sketch-42 / docker / docker-compose.yml

๋ฒ„์ „ : "2"
default_env :
SUBDOMAIN = sketch-42
ROOT_HOST = example.com
COMPOSE_PROJECT_NAME = sketch-42
์„œ๋น„์Šค:
ํŽธ๋ฌผ:
์ง“๋‹ค:
์ปจํ…์ŠคํŠธ : ../
dockerfile : docker / Dockerfile
ํ™˜๊ฒฝ:
-VIRTUAL_HOST = $ {SUBDOMAIN}. $ {ROOT_HOST}, www. $ {SUBDOMAIN}. $ {ROOT_HOST}
-VIRTUAL_PORT = 80
-VIRTUAL_NETWORK = ํ”„๋ก์‹œ
-LETSENCRYPT_HOST = $ {SUBDOMAIN}. $ {ROOT_HOST}, www. $ {SUBDOMAIN}. $ {ROOT_HOST}
-LETSENCRYPT_EMAIL = admin @ $ {ROOT_HOST}
๋‹ค์‹œ ์‹œ์ž‘ : ํ•ญ์ƒ
๋„คํŠธ์›Œํฌ :
-ํ”„๋ก์‹œ

๋„คํŠธ์›Œํฌ :
๋Œ€๋ฆฌ:
์™ธ๋ถ€:
์ด๋ฆ„ : ํ”„๋ก์‹œ

์ด yaml์€ ์ œ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์Šค์ผ€์น˜๋Š” ํ•ญ์ƒ ์›น์ด๋ผ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ฐฑ์—… ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฏธ๋‹ˆ API ์„œ๋ฒ„์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด. ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค
https://github.com/jwilder/nginx-proxy ๊ฐ€ ์ „๋ฉด์— ์•‰์•„ ์ฒญ์ทจํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ํฌํŠธ 80 ๋ฐ 443์—.

ํ˜„์žฌ ๋‚ด๊ฐ€ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ์žˆ๋“  ์›๊ฒฉ ์„œ๋ฒ„์— ์žˆ๋“  ์ƒ๊ด€์—†์ด
.env๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๋ชจ๋“ 
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‚ด๊ฐ€ ์žŠ์—ˆ๋‹ค๋ฉด
SUBDOMAIN, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋˜์ง€๋งŒ ์›น ์„œ๋ฒ„๋Š” ์ค‘๋‹จ ๋œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

๋‚ด ๋งˆ์Œ๋Œ€๋กœ default_env ์„น์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ํ”„๋กœ๋•์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์„œ๋ฒ„์— .env.dist๋ฅผ ๋ณต์‚ฌ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋กœ์ปฌ ์ปดํ“จํ„ฐ์—์„œ ๋‚˜๋Š” ๋‹จ์ง€ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ฅผ .env์— ๋„ฃ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ROOT_HOST = example.com.dev (๋˜๋Š”
bash ํ”„๋กœํ•„์˜ ROOT_HOST = example.com.dev?)

์š”์•ฝํ•˜์ž๋ฉด docker-compose.yml์˜ default_env ์„น์…˜์€
์ง€๊ธˆ ๋…ผ์˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ๋” ์ข‹์€ ์‚ฌ์šฉ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์‹œ๋‚˜๋ฆฌ์˜ค!

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

โ€”
์ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/745#issuecomment-282885661 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/AAQJJZumr10j3i17gPxrSyA-n8CwvsXTks5rg1X_gaJpZM4DLBNs
.

docker-compose.yml ์•ˆ์— "project_name"์ด ์žˆ์œผ๋ฉด ์Šคํƒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ‘œ์ค€ํ™” ๋œ ํŠธ๋ฆฌ๊ฐ€์žˆ๋Š” ๋ชจ๋†€๋ฆฌ์Šค ์ €์žฅ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

projectA/infrastructure/docker-compose.yml
projectB/infrastructure/docker-compose.yml
...

์‹ค์ œ ์„ธ๊ณ„์—์„œ๋ณด๋‹ค ๋ถ„๋ช…ํžˆ ๋” ๋ณต์žกํ•˜๋ฏ€๋กœ docker-compose.yml ํŒŒ์ผ์„ "projectA / projectB"ํด๋”๋กœ ์˜ฎ๊ธธ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ถ€ํŒ… ํ•  ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฌป๋Š” CLI๊ฐ€ ๋ฃจํŠธ์— ์žˆ์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด docker_compose.yml์˜ ์ƒ์œ„ ํด๋”์— ์ง์ ‘ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถฉ๋Œ์— ์ง๋ฉด ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose ๋ช…๋ น (CLI ์Šคํฌ๋ฆฝํŠธ์— ํฌํ•จ)์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ "-p"์ธ์ˆ˜๋ฅผ ๋ช…๋ น์— ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋ฅผ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ํ•ญ์ƒ CLI ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ project_name์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” absolute_path๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ docker-compose๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ํ•ญ์ƒ "-p"๋ฅผ ๊ฐ€์ง€์ง€ ๋งŒ ์ด์ƒํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

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

์„œ๋น„์Šค์— ๋Œ€ํ•œ docker-compose.yml ํŒŒ์ผ (ํ™•์žฅ ๋น„ํ™œ์„ฑํ™”)์—์„œ "container_name"์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜์ค€์—์„œ docker-compose.yml ํŒŒ์ผ ์ž์ฒด์— ๋Œ€ํ•ด "project_name"์„ ์ •์˜ ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? "version"/ "services"/ "networks"/ "volumes"?

scale ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์ด ๋ช…ํ™• ํ•ด์ง‘๋‹ˆ๋‹ค. (์˜ˆ : <project_name>_<container_name>_1 ).

์ด๋Š” DNS์— ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ๋•Œ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์™„๋ฃŒ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ ์—ฌ๊ธฐ์— ์™”์Šต๋‹ˆ๋‹ค. ์‹ค๋งํ–ˆ๋‹ค. 3 ๋…„ ์ด์ƒ

์˜ˆ, Docker์˜ ๊ฐ€์žฅ ์–ด๋ฆฌ์„์€ ์‚ฌ์šฉ์„ฑ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ์ˆ˜์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ์ž๋“ค๊ณผ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ณ , ํ•ฉ์˜๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋‚˜์œ ๋””์ž์ธ์ด๋ผ๋Š” ์ธ์ •์€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ๋ช…๋ฐฑํ•œ ์‚ฌ์šฉ์ž ์ง€์›์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค๋ง ์Šค๋Ÿฝ์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์ž์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋งค๋…„ ๋‹ค์‹œ ํ•ด์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

cli๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ docker-compose์˜ ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋ช…๋ช… ์ฒด๊ณ„ ๋•๋ถ„์— ์ผ๋ถ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฎ์–ด ์ผ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚˜๋Š” ๋˜ ๋‹ค๋ฅธ docker-compose ํ”„๋กœ์ ํŠธ๋ฅผ ๋˜ ๋‹ค๋ฅธ .env ํŒŒ์ผ๋กœ ์„ค์ •ํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์— ์˜๊ตฌ ์ด๋ฆ„์„ ๋ถ€์—ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ•œ ์ง€ ๋ช‡ ๋…„์ด ์ง€๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋ฅผ ํ™•์ธํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ํ•œ ์—ฌ๊ธฐ์— ์ƒˆ๋กœ์šด ๊ฒƒ์€ ์—†์Šต๋‹ˆ๊นŒ? .env ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๊ณ„์† ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ yaml ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ดํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€์ด ํ”„๋กœ์ ํŠธ์—์„œ ๋ช‡ ๋ฒˆ์ด๊ณ  ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Docker๋Š” ํ›Œ๋ฅญํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ ๋•Œ๋กœ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ œ๋กœ ์‹ค์ œ ๊ฒฝํ—˜์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ชจ๋‘๊ฐ€ ๊ฐ€์žฅ ์ž˜ ์•ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” 18 ์„ธ ํ•ด์ปค์ผ๊นŒ์š”? ์‚ฌ๋žŒ๋“ค์€์ด ๋„๊ตฌ๋ฅผ ์‹ค์ œ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ ์ง€์†์ ์œผ๋กœ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ํŒ€์€์ด ๋ฌธ์ œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Docker ๊ฐœ๋ฐœ์ž๋ฅผ ์„ค๋“ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋ณ๊ฒŒ ๋‘๋Š” ๊ฒƒ์ด ์ •๋ง ๊ณ ํ†ต ์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚ด CI ์ž‘์—…์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๋ฌด์—‡์ด์–ด์•ผํ•˜๋Š”์ง€ ๊ณ„์† "์•Œ์•„ ๋‚ด์•ผ"ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์ž‘์—…์—์„œ ์ถ”์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก docker-compose.yml์— ๋ช…ํ™•ํ•˜๊ฒŒ ๋ช…์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ์˜ ์ด๋ฆ„์ด "build1234"์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ docker exec build1234_myservice script.sh ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ์Šคํƒ ์ด๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?


์–ด๋–ค ์œ ์Šค ์ผ€์ด์Šค์—๋„ ๋งž์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ...

์„ค์ •์—์„œ (๋ณต์ œ) ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•  ๋•Œ .env ํŒŒ์ผ ๋งŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ์ด๋‚˜ ๋™์  ๊ตฌ์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ docker-compose.yml .env ๋ณ€์ˆ˜๋ฅผ ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์žฅ์ ์€ ๋ณ€์ˆ˜๊ฐ€ ๋ˆ„๋ฝ ๋œ ๊ฒฝ์šฐ docker-compose๊ฐ€ ๊ฒฝ๊ณ  (๋˜๋Š” ์‹คํŒจ)ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ์งœ์ฆ์ด ๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์›Œํฌ ํ”Œ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ docker-compose.yml ๋Œ€ํ•œ ๋ณ€๊ฒฝ์€ ์†Œ์Šค ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ .env ๋Š” ๊ตฌ์„ฑ ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ docker-compose.yml ์— ํ”„๋กœ์ ํŠธ ์˜์กด๋„๊ฐ€ ๋†’์€ network ์™€ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋‚ด์šฉ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด .env ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿค

์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ์งœ์ฆ์ด ๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์›Œํฌ ํ”Œ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด ์ƒํ™ฉ์— ๋Œ€ํ•ด ์ข€ ๋” ์ƒ๊ฐํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์™ธ๋ถ€ ์ ์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ -p <project_name> ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด CI์—์„œ ์Šคํƒ์˜ ๊ณ ์œ  ํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฒฉ๋ฆฌํ•˜๊ณ  ์—ฌ๋Ÿฌ ์Šคํƒ์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ. ํ•ด๋‹น CI ์ฒด์ธ ๋งŒ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์•Œ์•„์•ผ ์ž๋™ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ž„์˜ (์•Œ๋ ค์ง„), ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ .env ํŠธ๋ฆญ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์–ด๋””์—์„œ๋‚˜ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์„ ํƒ์€ ๋ณ„๋‹ค๋ฅธ ์ด์œ ์—†์ด ์ž„์˜์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค (์˜ˆ : ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ docker-compose.yml ํŒŒ์ผ์€ docker๋ผ๋Š” ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์Šต๋‹ˆ๋‹ค).

์ž„์˜์˜ ID๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•˜๋ฉด ๋ถ€๋ชจ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋Œ€ํ•œ ์‹ค์ œ ๋Œ€์•ˆ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์Šคํƒ์ด "์›๋ž˜"๋œ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” .env ํŒŒ์ผ ์—†์ด๋„ ์„œ๋กœ ์ถฉ๋Œ ํ•  ์ˆ˜์žˆ๋Š” tests ํด๋”์— ํ…Œ์ŠคํŠธ ์Šคํƒ์ด ์žˆ์œผ๋ฏ€๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ํ›จ์”ฌ ๋” ๋ช…ํ™•ํ•œ IMHO ํŒŒ์ผ ์ธ docker-compose.env ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•˜๊ณ  ๊ทธ๋ƒฅ์ด ๋ฒ„๊ทธ๋ฅผ ๋‹ซ์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์šฐ๋ฆฌ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ์›ํ•˜๋Š” ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๊ฐ„๋‹จํ•œ ๊ฒƒ์„ ๊ตฌํ˜„ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 2.86 ๋…„ ํ›„์ž…๋‹ˆ๋‹ค. ๋ƒ„๋น„์—์„œ ๋‚ด๋ ค. ์ž์‹ ์˜ ๊ฒฐ์ •์„ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์ด์ƒ์„ํ•˜์‹ญ์‹œ์˜ค.

@matsaman ๊ณผ ๊ทธ์˜ ๋Œ“๊ธ€์— ์—„์ง€ ์†๊ฐ€๋ฝ์„ ์˜ฌ๋ฆฌ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค :

๋‹น์‹ ์ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•˜๊ณ  ๊ทธ๋ƒฅ์ด ๋ฒ„๊ทธ๋ฅผ ๋‹ซ์œผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์šฐ๋ฆฌ ๋Œ€๋‹ค์ˆ˜๊ฐ€ ์›ํ•˜๋Š” ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ๊ฐ„๋‹จํ•œ ๊ฒƒ์„ ๊ตฌํ˜„ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 2.86 ๋…„ ํ›„์ž…๋‹ˆ๋‹ค. ๋ƒ„๋น„์—์„œ ๋‚ด๋ ค. ์ž์‹ ์˜ ๊ฒฐ์ •์„ ์†Œ์œ ํ•˜๊ฑฐ๋‚˜ ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์ด์ƒ์„ํ•˜์‹ญ์‹œ์˜ค.

"๋„ˆํฌ๋“ค"์€ ๋ˆ„๊ตฌ์•ผ? ์˜คํ”ˆ ์†Œ์Šค์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ๊ฒฐ์ •์„ ์†Œ์œ ํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‹ค์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. Docker๋Š” ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค. ์ง•์ง• ๋Œ€๋Š” ๋Œ€์‹  ํ’€ ๋ฆฌํ€˜์ŠคํŠธ ์ œ์ถœ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋„ ์ด๊ฒƒ์ด ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์Šฌํ”„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜คํ”ˆ ์†Œ์Šค์—์„œ ์šฐ๋ฆฌ๋Š” ๊ธฐ์—ฌํ•˜๊ฑฐ๋‚˜ ์ฐธ์„์„ฑ์žˆ๊ฒŒ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

CLI ์ธ์ˆ˜ :

$ cd foo
$ docker-compose up
$ docker-compose -p bar up
... some time later wanting to take down bar forgetting '-p'
$ docker-compose down
Stopping foo_nginx_1 ... done
Stopping foo_mysql_1 ... done
Removing foo_nginx_1 ... done
Removing foo_mysql_1 ... done
$ FU@$_!@*#%$(!_*@
-bash: FU@!@*#%$: command not found

๋ถˆํ•ฉ๊ฒฉ.

Env ํŒŒ์ผ :

$ cd foo
$ source foo.env
$ docker-compose up
$ source bar.env
$ docker-compose up
... some time later wanting to take down foo forgetting to `source .foo.env`
$ docker-compose down
Stopping bar_nginx_1 ... done
Stopping bar_mysql_1 ... done
Removing bar_nginx_1 ... done
Removing bar_mysql_1 ... done
$ FU@$_!@*#%$(!_*@
-bash: FU@!@*#%$: command not found

๋ถˆํ•ฉ๊ฒฉ.

yml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด์žˆ๋Š” ์ œ์•ˆ ๋œ ์†”๋ฃจ์…˜ :

$ cd foo
$ docker-compose -f foo.yml up
$ docker-compose -f bar.yml up
... some time later
$ docker-compose down
ERROR:
        Can't find a suitable configuration file in this directory or any
        parent. Are you in the right directory?

        Supported filenames: docker-compose.yml, docker-compose.yaml

์˜ˆ์ด!

$ COMPOSE_PROJECT_NAME=foo docker-compose up -d
$ COMPOSE_PROJECT_NAME=bar docker-compose up -d
... some time later
$ docker-compose down -v
Removing network project_default
WARNING: Network project_default not found.

์˜ํ˜•/

"๋„ˆํฌ๋“ค"์€ ๋ˆ„๊ตฌ์•ผ?

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

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

์—ฌ๊ธฐ์— ๋ช‡ ๋ฒˆ์ด๊ณ  ๊ฒŒ์‹œ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ชจ๋‘ ์ž˜ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ ์šฉ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์—ฌ์ „ํžˆ docker-compose.yml ์˜ ๊ธฐ๋Šฅ์—์„œ ๊ฑฐ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋งŒ ์ƒ๋žต ๋œ ์ด์œ ์— ๋Œ€ํ•œ ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ƒ๊ฐํ•˜๋ฉด ๊ฑฐ๊ธฐ์— ์†ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค! ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ๋ช…๋ฐฑํ•˜๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์˜๊ฒฌ์„ ๋ฐฉํ•ดํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์„ ๋‹ค๋ฅธ ์ง€์ ์—์„œ ๋ด…์‹œ๋‹ค.

docker-compose.yml ํŒŒ์ผ์ด์žˆ๋Š” ํด๋”์—์žˆ๋Š” ๊ฒฝ์šฐ ์Šคํƒ์—์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ƒ๋‹นํžˆ ๊ธฐ๋ณธ์ ์ธ ์งˆ๋ฌธ์ด์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์‰ฌ์šด ๋Œ€๋‹ต์€ ์—†์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ (์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •๋ ฌ) :

  • -p ์˜ ๊ฐ€์น˜
  • ํ™˜๊ฒฝ์—์„œ COMPOSE_PROJECT_NAME ์˜ ๊ฐ€์น˜
  • .env ํŒŒ์ผ์˜ COMPOSE_PROJECT_NAME ๊ฐ’
  • ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„

์•…๋งˆ์˜ ์˜นํ˜ธ์ž๊ฐ€๋˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์„ค์ •์— 5 ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ ๊ฒฐ์ •์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ˜„์žฌ ์ด๋ฆ„์— ๋Œ€ํ•œ "๋“œ๋ผ์ด ๋Ÿฐ ๊ฐ€๋Šฅํ•œ"์ •๋ณด๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. docker-compose config ๋„์—†๊ณ  ์Šคํƒ์ด ์‹คํ–‰ ์ค‘์ด ์•„๋‹ˆ๋ฉด docker-compose ps ๋„ ์—†์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ docker-compose create ์ด ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์ƒ์˜ ์˜ต์…˜์ด์ง€๋งŒ ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ docker-compose config --project-name ์™€ ๊ฐ™์€ ๊ฒƒ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์œ„์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์•Œ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

docker-compose.yml ํŒŒ์ผ์ด์žˆ๋Š” ํด๋”์—์žˆ๋Š” ๊ฒฝ์šฐ ์Šคํƒ์—์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค! ์†”๋ฃจ์…˜์— ๋งŒ์กฑํ•œ๋‹ค๋ฉด- ๋‹น์‹ ์—๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค !! ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „ํ˜€ ํ˜ผ๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

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

์•…๋งˆ์˜ ์˜นํ˜ธ์ž๊ฐ€๋˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์„ค์ •์— 5 ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ˜ผ๋ž€ ์Šค๋Ÿฌ์šธ ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ฒ˜์Œ์— docker-compose.yml ์—์„œ ์ œ์™ธ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์ด ์ง€๊ธˆ ๊ทธ ํŒŒ์ผ์—์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์œ„์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์•Œ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ˆœ์„œ๋กœ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค! ์†”๋ฃจ์…˜์ด ๋งŒ์กฑ ์Šค๋Ÿฌ์šฐ๋ฉด-์ข‹์Šต๋‹ˆ๋‹ค !! ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „ํ˜€ ํ˜ผ๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

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

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

์ด ์‚ฌ๋žŒ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์‚ฌ์ „์— ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์˜ ์ผ๋ถ€ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃฝ์ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆํ‰ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜ผ๋ž€ ์Šค๋Ÿฌ์šธ ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ฒ˜์Œ์— docker-compose.yml์—์„œ ์ œ์™ธ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์ด ์ง€๊ธˆ ๊ทธ ํŒŒ์ผ์—์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์•„๋‹Œ ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ BC ๋ฐฉ์‹์—์„œ๋Š” ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์•„์•ผํ•˜๋ฏ€๋กœ ์“ธ๋ชจ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ "ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์–ป๋Š” ๋ฐฉ๋ฒ•"์„ ๋ฌป๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์˜ ๋„์ปค ์ด๋ฆ„์„ ๋ชจ๋ฅด๊ณ  ์™œ ๊ทธ๊ฒƒ์ด ๋‹น์‹ ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ .env ์˜ ์‚ฌ์šฉ์ž ์ง€์ • ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

cd /some/path/test
docker-compose up -d
cd /a-completely-different-path
docker-compose -p test down -v --remove-orphans

์ด๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ์Šคํƒ์„ ์ฃฝ์ด๊ณ  yml ํŒŒ์ผ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์„ ๋„ˆ๋ฌด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ ๋‹ค๋ฉด ์™œ ๋‹น์‹ ์˜ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ™์€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์ €๋Š” ๊ธฐ๋ณธ docker-compose ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์€ ๊ดœ์ฐฎ์ง€ ๋งŒ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ด์•ผํ•˜์ง€๋งŒ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ์„ธํŠธ๋กœ ๊ณ„์† ์ž‘์—…ํ•˜๋ ค๋ฉด .env ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‚ฌ๋žŒ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์‚ฌ์ „์— ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ฃฝ์ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ถˆํ‰ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ง์ด ์•ˆ ๋ผ. ๋ˆ„๊ตฐ๊ฐ€ docker-compose.yml ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค! ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์•„๋ฌด๋„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ ‡๊ฒŒํ•˜๋”๋ผ๋„ ๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๊ณ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ผ์„ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์˜ต์…˜์„ ํ˜ผํ•ฉํ•˜๋ฉด ์ด๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ช…๋ช… ๋œ compose ํŒŒ์ผ์ด ์žˆ์œผ๋ฉด ์šฐ์„  ์ˆœ์œ„ ํŠธ๋ฆฌ์˜ 4 ๊ฐœ ์˜ต์…˜ ์ค‘ 3 ๊ฐœ๋Š” ์“ธ๋ชจ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ .env ํŒŒ์ผ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ผ๊ณ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์—ฌ์ „ํžˆ .env ํŒŒ์ผ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ผ๊ณ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

env_file ์‚ฌ์šฉ ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณ„ .env ํŒŒ์ผ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด docker-compose ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด ํ˜ผํ•ฉํ•ฉ๋‹ˆ๊นŒ?

๋ง์ด ์•ˆ ๋ผ. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ docker-compose.yml์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ถ”๊ฐ€๋˜๋ฉด ํ–‰๋™์ด ๊ธ‰๊ฒฉํžˆ ๋ฐ”๋€๋‹ˆ๋‹ค.

์ž„์‹œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด (์ฆ‰, ์—…๊ทธ๋ ˆ์ด๋“œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด) ์Šคํƒ์„ ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ณต์‚ฌ ํ•  ๋•Œ docker-compose.yml ๋ฅผ ์ „ํ˜€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š์•„๋„๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์Šคํƒ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ .env ์žฌ์ •์˜ํ• ์ง€ ์•„๋‹ˆ๋ฉด docker-compose.yml ์—์„œ ๋ณ€๊ฒฝํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๊ทธ๊ฒƒ์€ ์ฒ˜์Œ์— ์ถ”๊ฐ€ ๋œ ์•ˆ๋œ๋‹ค, ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ์˜ต์…˜์„ ๊ฐ€์ง€๊ณ ํ•˜๋Š” ๊ฒƒ๋„ ์ผ์ด ๋” ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4 ๊ฐœ์˜ ๋ช…๋ช… ๋œ compose ํŒŒ์ผ (๋™์ผํ•œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ์Œ)์ด ์‚ฌ์šฉํ•˜๋Š” ๊ณตํ†ต ๋‹จ์ผ .env ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‰˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ compose๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค

docker-compose -f service1.yml up -d

๋Œ€์‹ ์—์ด๊ฒŒ ๋”

docker-compose -f service1.yml up -d
# F#&$, forgot the -p flag.   Curse the compose devs for 3 years of c#*$blocking
docker-compose -f service1.yml down
docker-compose -f service1.yml -p service1 up -d

@ schmunk42 ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์ด ์•„๋งˆ๋„ compose ํŒŒ์ผ ์ด๋ฆ„์— ์ถ”๊ฐ€๋กœ ๋ชจ๋“  docker-compose ๋ช…๋ น์— ๋Œ€ํ•ด

์„œ๋น„์Šค ๋‹น ํ•˜๋‚˜์˜ ํด๋”๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์—†๊ณ  ์—ฌ์ „ํžˆ ์ตœ์ƒ์œ„ ํด๋”์— .env ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

docker-compose -f service1/docker-compose.yml up -d
docker-compose -f service2/docker-compose.yml up -d

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํŒŒ์ผ (-path)์— ์”๋‹ˆ๋‹ค ๐Ÿ˜‰

๋‚˜๋Š” ํฌ๊ธฐํ•œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ณ ๊ฐ ๊ธฐ๋ฐ˜์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋‹น์‹ ์—๊ฒŒ ํ•œ ์ œ์•ˆ์— ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

์ฒ˜์Œ์—๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์— ๋งž๊ฒŒ ์›Œํฌ ํ”Œ๋กœ๋ฅผ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ 2 ๋…„ ๋™์•ˆ ์šฐ๋ฆฌ ํŒ€ ์ค‘ ๋ˆ„๊ตฌ๋„ ์‹ค์ˆ˜๋กœ ์Šคํƒ์„ ์ฃฝ์ธ ๊ธฐ์–ต์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์•ฝ 1.000 ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ์™€ 1.000 ๊ฐœ์˜ ์ž๋™ ๋˜๋Š” ์ˆ˜๋™ ์žฌ๋ฐฐํฌ๋กœ 200 ๊ฐœ ์ด์ƒ์˜ ์Šคํƒ์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ... ์ €ํ•ญ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ "์†”๋ฃจ์…˜"๊ณผ ์กด์žฌ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•œ "์˜ฌ๋ฐ”๋ฅธ"์†”๋ฃจ์…˜ ์‚ฌ์ด์—๋Š” ๋งค์šฐ ์ค‘์š”ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•˜๋Š” ๊ฒƒ์€ "์˜ฌ๋ฐ”๋ฅธ"์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๊ฝค ๋ถ„๋ช…ํ•˜์ง€๋งŒ ์ผ๋ถ€๋Š” ์—ฌ์ „ํžˆ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ schmunk42 & @mikehaertl

์ง€๋‚œ 2 ๋…„ ๋™์•ˆ ์šฐ๋ฆฌ ํŒ€ ์ค‘ ๋ˆ„๊ตฌ๋„ ์‹ค์ˆ˜๋กœ ์Šคํƒ์„ ์ฃฝ์ธ ๊ธฐ์–ต

๋ฌผ์–ด๋ด์•ผ ๊ฒ ์–ด. ๋‘ ๋ถ„ ๋ชจ๋‘ codemix ์กฐ์ง์˜ ์ผ์›์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋™๋ฃŒ์ž…๋‹ˆ๊นŒ? ๋’ค์—์„œ ๋‘ ์‚ฌ๋žŒ์ด rotfl์ธ์ง€ ๊ถ๊ธˆํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ (์šฐ์„  ์ˆœ์œ„์— ๋”ฐ๋ผ ์ •๋ ฌ) :

  1. -p์˜ ๊ฐ’
  2. ํ™˜๊ฒฝ์˜ COMPOSE_PROJECT_NAME ๊ฐ’
  3. .env ํŒŒ์ผ์˜ COMPOSE_PROJECT_NAME ๊ฐ’
  4. ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„

์•…๋งˆ์˜ ์˜นํ˜ธ์ž๊ฐ€๋˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์„ค์ •์— 5 ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚ด๊ฐ€๋ณด๊ธฐ์— ๋ฌธ์ œ๋Š” ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ _ ๋ชจ๋“  ๋‹จ์ผ ๊ฐ’ _์€ _environment-specific_์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๋ณ„ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.

1 + 2. ๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  1. _ ๊ณต์œ  ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์‹ค์ œ๋กœ .env ๋Š” ๋ฌด์‹œํ•˜๊ณ  ์ •๋‹นํ•œ ์ด์œ ๋กœ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ( .env.example ๊ณต์œ ํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ถ”๊ฐ€ ์ˆ˜๋™ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.)
  2. ์‚ฌ์‹ค์ƒ ๋ฌด์ž‘์œ„์ด๋ฉฐ ์‚ฌ์šฉ์ž / ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (๋˜ํ•œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ _needs_ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ํด๋ฐฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๊ฐ™์€ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ถฉ๋Œํ•˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ์ข‹์€ ํด ๋ฐฑ๋„ ์•„๋‹™๋‹ˆ๋‹ค.)

์ œ ์ƒ๊ฐ์—,์ด ์Šค๋ ˆ๋“œ์˜ ๋งŽ์€ ๊ฒƒ๋“ค์€ 3๊ณผ 4 ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ _can_์€์ด ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋˜๋Š” docker-compose ํŒŒ์ผ์— ์ œ๊ณต๋˜๊ณ  ์ฒซ ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์ฒด. ์ด ๊ฐ’์€์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์˜ต์…˜ 1-3์€ ํ•ด๋‹น ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๊ณ  ์˜ต์…˜ 4๋Š” ์ œ๊ณต๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

@benjaminwood ์•„๋ฌด๋„์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์›ƒ๊ณ  ์žˆ์ง€

๋ฟก ๋นต๋€จ

  1. ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ .env๋Š” ๋ฌด์‹œํ•˜๊ณ  ์ •๋‹นํ•œ ์ด์œ ๋กœ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์—์„œ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์Šคํ…Œ์ด์ง• ๋ฐ ํ”„๋กœ๋•์…˜ ์Šคํƒ ์ „์šฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ๋Š”์ด๋ฅผ ๋ฌด์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker-compose.yml ์—์„œ ์ปค๋ฐ‹ ๋œ ์ด๋ฆ„์„ ๊ณต์œ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ .env ๋„ ์ปค๋ฐ‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ด ํŒŒ์ผ์€ docker-compose ๋ช…๋ น ์—๋งŒ ํ•ด๋‹น ๋˜๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ์€ ์—†์Œ).

  1. ์‚ฌ์‹ค์ƒ ๋ฌด์ž‘์œ„์ด๋ฉฐ ์‚ฌ์šฉ์ž / ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

docker-compose.yml ์˜ ๊ฐ’๋ณด๋‹ค ๋” ๋งŽ๊ฑฐ๋‚˜ ๋œ ์ž„์˜์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ์Šคํƒ ๊ตฌ์„ฑ์„ ๋‹จ์ผ ํŒŒ์ผ์ด ์•„๋‹Œ ํด๋”๋กœ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด .env ์ด๋ฆ„์„ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ํด๋” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์—ฌ๋Ÿฌ๋ถ„ ๋ชจ๋‘๋ฅผ์œ„ํ•œ ๋งˆ์ง€๋ง‰ ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

docker stack deploy -c docker-compose.yml the-project-name

(*) ์Šค์›œ ๋ชจ๋“œ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์•ž์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด yml ํŒŒ์ผ์— ๋ฐฐ์น˜ ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์Šคํƒ ์ •์˜ ๊ฐœ๋…๊ณผ ์™„์ „ํžˆ ๋ชจ์ˆœ

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ schmunk42. ๋‚˜๋Š” ๋‹น์‹ ๊ณผ ๋‚˜๋Š” ๋‹น์‹ ์ด์ด ์Šค๋ ˆ๋“œ์— ํ‘œ์‹œ๋œ ๋ชจ๋“  ๊ฐ•๋ ฅํ•œ ์˜๊ฒฌ ์ค‘์—์„œ ์ผ์„ ์•„์ฃผ ์ž˜ ์ฒ˜๋ฆฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์„ค์ •์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜์žˆ๋Š” ์—„์ฒญ๋‚œ ์›์ธ์ด๋ฉ๋‹ˆ๋‹ค.

๋ฌธ์ง€๋ฆ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์—์„œ ๋ฌด์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šคํ…Œ์ด์ง• ๋ฐ ํ”„๋กœ๋•์…˜ ์Šคํƒ ์ „์šฉ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ๋Š”์ด๋ฅผ ๋ฌด์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š”์ด ๊ธฐ๋Šฅ์€ ๋น„์ •์ƒ์ ์ธ ์ €์žฅ์†Œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ง์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์ž…ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๊นŒ?

docker-compose.yml ์—์„œ ์ปค๋ฐ‹ ๋œ ์ด๋ฆ„์„ ๊ณต์œ ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ .env ๋„ ์ปค๋ฐ‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ด ํŒŒ์ผ์€ docker-compose ๋ช…๋ น ์ „์šฉ์ด๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ์€ ์—†์Œ).

์Œ, ๋‚ด .env ํŒŒ์ผ์˜ ์œ ์ผํ•œ ๊ฒƒ์ด COMPOSE_PROJECT_NAME ์ด๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋งŽ์€ _secure_ ๋ณ€์ˆ˜๋กœ ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  environment ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ docker-compose๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ .env ํŒŒ์ผ์˜ ์šฉ๋„์ž…๋‹ˆ๋‹ค.

๋‚ด ์ œ์•ˆ์—์„œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜จ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋งŒ ์žฌ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์„ค์ •์„ ๊นจ๋œจ๋ฆฌ๋Š” ์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ์˜์กดํ•œ๋‹ค๋ฉด (๋‹น์‹ ์˜ ์ €์žฅ์†Œ๊ฐ€ ๋ณต์ œ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์™€ ๋ฐ˜๋Œ€๋กœ ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ ๋œ ๋””๋ ‰ํ† ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์—), ์–ด๋–ป๊ฒŒ docker-compose.yml ์„ค์ •์— ์˜ํ•ด ์žฌ์ •์˜ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ (์ปค๋ฐ‹๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์˜ ์ €์žฅ์†Œ์—; ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค)?

@ schmunk42 ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์€ "๋‚˜๋Š” ๋” ์ด์ƒ ๋‚ด ํ”„๋กœ์ ํŠธ ์„ค์ •์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค"์ž…๋‹ˆ๋‹ค.

์ •๋ง? ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด์—†์ดํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด์„œ : ๋‚˜๋„ ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ข…๊ฒฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋…ผ์˜๋Š” ๋ฌด์˜๋ฏธ ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š”์ด ๊ธฐ๋Šฅ์€ ๋น„์ •์ƒ์ ์ธ ์ €์žฅ์†Œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ง์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์ž…ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๊นŒ?

์ถ”๊ฐ€ ์˜ค๋ฅ˜ ์›์ธ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์šฐ๋ ค๋ฅผ ํ‘œ๋ช…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด .env ํŒŒ์ผ์˜ ์œ ์ผํ•œ ๊ฒƒ์ด COMPOSE_PROJECT_NAME์ด๋ผ๋ฉด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ปค๋ฐ‹ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋งŽ์€ ๋ณด์•ˆ ๋ณ€์ˆ˜๋กœ ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™˜๊ฒฝ ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ docker-compose๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์šฉ๋„ secrets.env ์‚ฌ๋žŒ๋“ค๊ณผ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ฌ env_file .
์›Œํฌ ํ”Œ๋กœ์šฐ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ๊นŒ์š”?

์ด๊ฒƒ์€ .env ํŒŒ์ผ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

์‚ฌ์‹ค ...ํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” docker-compose ๊ฐ€ .env ํŒŒ์ผ์„ ํƒˆ์ทจ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

docker-compose.yml ์™€ ๊ฐ™์ด IMAGE_VERSION docker-compose.yml ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ์™€ docker-compose.env ๋ผ๋Š” ํŒŒ์ผ์— ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”?

๋‚˜๋Š” ๊ฐํžˆ COMPOSE_COMMAND_ENV_FILENAME=.env ์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜๋‹ค-์ง€๊ธˆ๊นŒ์ง€ :)

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹น์‹ ์˜ ์„ค์ •์„ ์–ด๋–ป๊ฒŒ ๊นจ๋œจ๋ฆด ๊ฒƒ์ธ์ง€ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ฆ‰์‹œ ์ค‘๋‹จ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ์š”์ ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฉฐ ๋” ๋งŽ์€ ์˜ต์…˜์„ ์†Œ๊ฐœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์‹ญ์‹œ์˜ค -f docker-compose.A.yml -f docker-compose.B.yml , A๊ฐ€ ํ”„๋กœ์ ํŠธ์ด๊ณ  ๋””๋ ‰ํ† ๋ฆฌ๋ณ„๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜์กดํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค (์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•˜๋ฏ€๋กœ ๊ทธ๋ ‡๊ฒŒํ•ฉ๋‹ˆ๋‹ค!). ๋ฐ˜๋ฉด B๋Š” ์™€ ์ถ”๊ฐ€ ์„œ๋น„์Šค ์„ธํŠธ project_name: extra ํ•œ ํด๋”์— ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ, ์‹ค์ˆ˜๋กœ ๋„์ž… .env ์™€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ฎ์–ด ํŒŒ์ผ COMPOSE_PROJECT_NAME=testing .

๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ .env ํŒŒ์ผ์—†์ด ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์€ extra ์ž…๋‹ˆ๋‹ค. ๐Ÿ’ฅ

์—ฌ๋Ÿฌ ๊ฐœ์˜ *.env ํŒŒ์ผ์„ ํฌํ•จํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ˆ˜์ค€์—์„œ ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋งค์šฐ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

์ •๋ง? ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด์—†์ดํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๊ฒฝ๊ณ  : ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚œ ์ฃผ์ œ์ด์ง€๋งŒ ์—ฌ์ „ํžˆ ๋„์ปค์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค ...

@mikehaertl ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ณด๋Š” ๊ฒƒ์ด ์ •๋ง ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.)

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

์šฐ๋ฆฌ๋Š”์ด ์Šค๋ ˆ๋“œ์—์„œ ์—ด์ •์  ์ธ ํ† ๋ก ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค (์˜ˆ์˜ ๋ฐ”๋ฅด๊ณ  ์นœ์ ˆํ•˜๊ฒŒ ์ง€์ผœ ์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!). ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด Compose ํŒŒ์ผ์— ์†ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฏฟ๊ณ  ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” PR : # 5378์œผ๋กœ ํ•ฉ๋ฆฌ์ ์ธ ์ค‘๊ฐ„ ์ง€์ ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ท€ํ•˜์˜ ์š”๊ตฌ์— ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Compose ํŒŒ์ผ์— x-project-name ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ‚ค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ (๋˜๋Š” .env ํŒŒ์ผ)์— COMPOSE_X_PROJECT_NAME ๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด Compose๋Š” Compose ํŒŒ์ผ ๋‚ด์˜ x-project-name ํ•ญ๋ชฉ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ฒ€์ƒ‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ์˜ต์…˜์€ COMPOSE_PROJECT_NAME ๋ฐ --project-name ๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์Šต๋‹ˆ๋‹ค.

์ด์™€ ๊ด€๋ จ๋œ ์งˆ๋ฌธ์ด๋‚˜ ์šฐ๋ ค ์‚ฌํ•ญ์„ ๊ธฐ๊บผ์ด ํ•ด๊ฒฐํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@ shin- ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด COMPOSE_X_PROJECT_NAME ์„ 1 ๋กœ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด COMPOSE_ENABLE_X_PROJECT_NAME ๋„ ์ƒ๊ฐํ•  ์ด๋ฆ„์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๊ฑด ๋‚ด 2 ์„ผํŠธ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜„

@ schmunk42 ๋ชจ๋“  "์ง„์‹ค"๊ฐ’์ด ์ž‘๋™ ํ•˜์ง€๋งŒ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค.

@matsaman Cool, ์œ ์šฉํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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

์†”์งํžˆ, ๊ทธ๋ฆฌ๊ณ  ์ง„์ •์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์–ด๋–ค ์‹ ์œผ๋กœ๋“  ์ด๊ฒƒ์„ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ƒ๊ฐํ•œ ๋ฐฉ๋ฒ•์„ ์ƒ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ shin-์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์œ ์šฉํ•œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž‘์„ฑ ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ž์ฒด์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™๋“ฑํ•œ {์ž‘์—…๋Ÿ‰, ์žŠ์–ด ๋ฒ„๋ฆด ์œ„ํ—˜์„ฑ ๋ฐ ํŽธ์˜์„ฑ}์ž…๋‹ˆ๋‹ค.

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

BC๋ฅผ ๊นจ์ง€ ์•Š๊ณ  ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณ‘ํ•ฉ ์ค‘์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ข‹์€ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž‘์„ฑ ํŒŒ์ผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ž์ฒด์— ๋Œ€ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™๋“ฑํ•œ {์ž‘์—…๋Ÿ‰, ์žŠ์–ด ๋ฒ„๋ฆด ์œ„ํ—˜์„ฑ ๋ฐ ํŽธ์˜์„ฑ}์ž…๋‹ˆ๋‹ค.

์ด ์„ค์ •์€ ํ™˜๊ฒฝ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด ์„ค์ •์€ ํ™˜๊ฒฝ์—์„œ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

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

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

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ
์ด๋Š” .env ํŒŒ์ผ ์†”๋ฃจ์…˜์ด ์˜ต์…˜์ด ์•„๋‹Œ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ compose ํŒŒ์ผ์ด์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„ ๋•๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ํ•ญ์ƒ ์ผœ์ ธ ์žˆ์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ .env ํŒŒ์ผ, .profile ๋˜๋Š” x-project-name ๊ฐ€ ํ•ญ์ƒ ์‚ฌ์šฉ๋˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์œ„์น˜์—์„œ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์ •์—.

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

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

๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์™„์ „ํžˆ ๊ด€๋ จ์ด์—†๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์›์น˜ ์•Š๋Š” ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์…ธ์—์„œ COMPOSE_X_PROJECT_NAME ์„ค์ •๋งŒ์œผ๋กœ ์›์น˜ ์•Š๋Š” ๋™์ž‘์„ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์™œ .env ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์•„๋ฌด๋„ ๋ฒ„์ „ ๊ด€๋ฆฌ์— .env ์ €์žฅ์„ ๊ธˆ์ง€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ, ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Œ).

์ฒ˜์Œ์—๋Š” .env ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋Œ€ํ™”๋ฅผ ๋ถ„๋ช…ํžˆ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

@matsaman ์ง„์ง€ํ•˜๊ฒŒ ํƒœ๋„๋ฅผ

ํ˜ผ๋ž€์„ ๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด

๋‹น์‹ ์€ ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

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

๋‚˜๋Š” ๋‹น์‹ ์ด ์ปดํ“จํ„ฐ์—์„œ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ์‰˜์—์„œ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์™„์ „ํžˆ ๊ด€๋ จ์ด์—†๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์›์น˜ ์•Š๋Š” ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

"๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ"๋ฅผ ๊ทธ๋Œ€๋กœ ์˜๋ฏธํ•œ๋‹ค๋ฉด "๊ตฌ์„ฑ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ด๊ฒƒ์„ ์ฝ๊ณ  ๊นจ์งˆ ์ˆ˜์žˆ๋‹ค"๋Š” ๊ฒƒ์€ ํ˜„์‹ค์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์…ธ์—๋Š” ๋งŽ์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” "COMPOSE_X_"๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

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

๋‘˜ ๋‹ค ์•„๋‹Œ ๊ฒฝ์šฐ ๋ช…ํ™•ํžˆํ•˜์‹ญ์‹œ์˜ค.

๋˜ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฒ„์ „ ์ œ์–ด์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์„ ๋•Œ ํ˜ผ๋ž€์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

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

Compose ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋„ฃ์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ฃผ์žฅ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด compose ํŒŒ์ผ์— ์žˆ์œผ๋ฉด ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ชจ๋‘ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฆ„์€ ์ด๋ฏธ ์‚ฌ์šฉ์ค‘์ธ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์•Œ๊ณ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ 1 ๋…„ ์ „์— ์ด๋ฏธ ์–ธ๊ธ‰ ํ•œ ์ด์œ ๋กœ ๋‚˜์—๊ฒŒ๋„ ๋„์›€์ด๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์†”๋ฃจ์…˜์€ ์ฒ˜์Œ์— ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฏฟ๊ธฐ โ€‹โ€‹์–ด๋ ค์šธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ„ฐ๋ฏธ๋„ ๋‚ด๋ถ€์—์„œ ์ผํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ €์žฅ์†Œ์— .env๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

docker-compose์˜ ์•„๋ฆ„๋‹ค์›€์€ up ์ž…๋‹ˆ๋‹ค. ํ†ตํ™” ์„ค์ • ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ €์žฅ์†Œ์— .env๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

@ shin- ๊ทธ๋ž˜, ๋ฌธ์ œ ์—†์–ด.

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

.env ์—๋Š” ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด .env ๋‚ด๋ถ€์˜ ์ผ๋ถ€ ๋ณ€์ˆ˜๋Š” SMTP์™€ ๊ฐ™์€ ์™ธ๋ถ€ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋Š” ์ž์ฒด .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ ์ž์ฒด ์—”๋“œ ํฌ์ธํŠธ๋กœ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. .env ๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ CSS ๋งŒ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ธฐ์ˆ ์ด ์ ์€ ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ .env ํŒŒ์ผ ์—†์ด๋„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ํด๋”์˜ ์ด๋ฆ„์„ ๋™์ผํ•˜๊ฒŒ ์ง€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. :)

๋ณ„๋กœ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ „๊ตญ์— ๊ฑธ์ณ์žˆ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž ๋ฐ ๋””์ž์ด๋„ˆ์™€ ํ•จ๊ป˜ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฐ„๋‹จํ• ์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.

Docker๋Š” ๋‚ด ์‚ถ์„ ํ›จ์”ฌ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋ฉฐ์ด ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋งค์šฐ ๊ฐ์‚ฌํ•˜์ง€๋งŒ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์ขŒ์ ˆ๊ฐ์— ๊ณต๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@fiveanddone ํ†ต์ฐฐ๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋”ฐ๋ผ์„œ .env ํŒŒ์ผ์ด docker-compose.env (๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ์ด๋ฆ„)์œผ๋กœ ๋Œ€์‹  ๋ถˆ๋ ธ๋‹ค๋ฉด ์šฐ๋ ค ์‚ฌํ•ญ์ด ์™„ํ™”๋ฉ๋‹ˆ๊นŒ?

@์ •๊ฐ•์ด-

์˜ˆ, ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

Docker Compose์—์„œ env ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ docker-compose.env ์ž๋™์œผ๋กœ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@nhooey env ํŒŒ์ผ ์ด๋ฆ„์ด .env ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ env ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

env ํŒŒ์ผ์€ ์ด๋ฆ„์ด .env ์ธ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ env ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์„œ nitpicker๋Š” ์•„๋‹ˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์ •ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  IMHO๋Š” ์ „์ฒด ์ฃผ์ œ์— ๋Œ€ํ•œ ์˜คํ•ด์˜ ๊ฐ€์žฅ ํฐ ์›์ฒœ์ž…๋‹ˆ๋‹ค.

.env ์˜ ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ

env_file: 
  - .env

๋˜๋Š”

environment:
  - VAR_FROM_DOTENV
  - FOO=${ANOTHER_VAR_FROM_DOTENV}

.env ํŒŒ์ผ์€ ์ž๋™์œผ๋กœ๋กœ๋“œ๋˜์ง€๋งŒ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์—†์ด๋Š” ์ด๋Ÿฌํ•œ Compose CLI ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ docker-compose.env ๋กœ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๊ฐ•๋ ฅํžˆ ์ง€์› ํ•˜๊ณ  ๋” ๋‚˜์€-๊ทธ์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ์ด๋ฏ€๋กœ ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ENV-var๋ฅผ ์„ค์ •ํ•˜๋Š” BC ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์˜ˆ์˜ ๋ฐ”๋ฅด๊ณ  ๋”ฐ๋œปํ•œ ๋งˆ์Œ์œผ๋กœ ์ง€์ผœ ์ฃผ์‹  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!)

๋‚˜๋Š” ๋‹น์‹ ์˜ ๋ง์„ ๋“ฃ๊ณ  ๋‚˜๋Š” ํ•ญ์ƒ ๋‚ด ํ‰์ •์„ ์œ ์ง€ํ•˜์ง€ ์•Š์€ ๊ฒƒ์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ์œ ์ฃ„์ž…๋‹ˆ๋‹ค. ๊ทธ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋Œ“๊ธ€์€ ๋•Œ๋•Œ๋กœ ๋‚˜๋ฅผ ์‹œ์ž‘ํ•˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด compose ํŒŒ์ผ์— ์žˆ์œผ๋ฉด ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜์—ฌ ๋‘ ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ชจ๋‘ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

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

@ shin- docker-compose.yml ๋Š” ํ•ญ์ƒ ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์ด๊ณ  ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ˜๋“œ์‹œ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” docker-compose.yml ๊ณต์œ  ํ•˜์ง€ ์•Š์ง€๋งŒ ๋กœ์ปฌ ์‚ฌ์šฉ์ž ์ •์˜ (์˜ˆ : ๊ฐœ๋ฐœ ์„ค์ •, ํŠธ๋ผ์ด ์•„์›ƒ ๋“ฑ)๋กœ ๋กœ์ปฌ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ์€ ์ œ์•ˆ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๊ณ  docker-compose.yml V4์—์„œ .env ์‚ฌ์šฉ์„ ์ค‘๋‹จํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํ•˜๋‚˜๋Š” project_name ์˜ docker-compose.yml ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์ด๋ฆ„ ๋งŒ ํฌํ•จํ•˜๊ณ  ์ ˆ๋Œ€ ์ €์žฅ์†Œ์— ์ œ์ถœํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” .dockerproject ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ํŒŒ์ผ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  ์ˆœ์œ„์— ๋Œ€ํ•œ ๋‚ด ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (๊ฐ€์žฅ ๋†’์€ ๊ฒƒ๋ถ€ํ„ฐ).

  • -p CLI ์ธ์ˆ˜
  • .dockerproject ํŒŒ์ผ
  • project_name ์˜ docker-compose.yml ( docker-compose.yml ๊ฐ€ ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ๋ฐฐํฌ๋˜๋Š” ๊ฒฝ์šฐ ํ”ผํ•ด์•ผ ํ•จ)
  • ํ™˜๊ฒฝ์—์„œ COMPOSE_PROJECT_NAME
  • COMPOSE_PROJECT_NAME .env (์ง€์› ์ค‘๋‹จ๋จ)
  • ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฐฐํฌ ๋œ docker-compose.yml ์—์„œ ํ•˜๋“œ ์ฝ”๋”ฉ ํ•œ ๊ฒฝ์šฐ์—๋„ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ .dockerproject ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ํ•ญ์ƒ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋‚ด๊ฐ€ ์‚ฌ์šฉ ๋ผ์ด๋ธŒ๋„ ํ•  ์ˆ˜ .dockerenv ๋˜๋Š” docker.env ๋Œ€์‹  .dockerproject . ๊ทธ๋Ÿฌ๋‚˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋” ๋†’์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์žˆ๋Š” ์ผ๋ถ€๋Š” docker-compose.yml ์—์„œ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์žฌ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

์šฐ์„ ,์ด ์ผ€์ด์Šค๋ฅผ ์ฐพ์•„ ์ฃผ์‹  @dnephin ๊ณผ @ shin-์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. @ shin-์ด ์ œ์ถœ ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ๋‹จ๊ณ„๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ PR 5378์„ ๊ฒ€์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. A default project name defined by the project, that can be checked in (https://github.com/docker/compose/issues/745#issuecomment-282858900). ์ด๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” git repo๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค : https://github.com/estarter/compose_745

์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” PR # 5378์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์†”๋ฃจ์…˜์— COMPOSE_X_PROJECT_NAME env ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…:

  1. ํ”„๋กœ์ ํŠธ์˜ ํด๋”์— env ๋ณ€์ˆ˜๋ฅผ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. .env ํŒŒ์ผ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ docker-compose๊ฐ€ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ํ˜ธ์ถœ๋˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ( ๋ช…๋ น ์˜ˆ์ œ ์ฐธ์กฐ, ํŒŒ์ผ ์ž‘์„ฑ ).
  2. COMPOSE_X_PROJECT_NAME์„ ์ „์—ญ์œผ๋กœ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค (.profile ๋˜๋Š” ์ด์™€ ๋™๋“ฑํ•œ). ์ž‘๋™ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์‚ฌ์šฉ ์‚ฌ๋ก€ defined by the project, that can be checked in ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.
  3. ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฐ”๋ผ๊ฑด๋Œ€ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฃจ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌ์ž ์—ฌ๋Ÿฌ๋ถ„, docker-compose ํŒŒ์ผ์— ์„ ํƒ์  project_name ์†์„ฑ์„ ๋„์ž… ํ•œ PR # 5369์— ์˜ํ•ด ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ด ์†์„ฑ์€ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋‚ฎ์ง€ ๋งŒ ํ™˜๊ฒฝ์ด๋‚˜ ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ์˜ต์…˜์€ docker-compose --project-directory <PATH> (๋Œ€์ฒด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •). .env ํŒŒ์ผ์—์„œ๋„ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฏน์Šค์— ๋˜ ๋‹ค๋ฅธ ๋ฏธ๋ฌ˜ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด :
๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” ๋‘ ๊ฐœ์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ (๋นŒ๋“œ / ๋ฐฐํฌ์— ์‚ฌ์šฉ๋จ) ์šฉ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” devop ์šฉ (Dockerfile, docker-compose.yml ๋“ฑ ํฌํ•จ) ์šฉ์ž…๋‹ˆ๋‹ค.
ํ˜„์žฌ ์„ค์ •์—์„œ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ๋Š” ๋ฃจํŠธ ./์— ์žˆ๊ณ  devops ์ €์žฅ์†Œ๋Š” ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ./devops/์— ์ฒดํฌ ์•„์›ƒ๋ฉ๋‹ˆ๋‹ค.

์ด ์„ค์ •์—์„œ .env ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

docker-compose ๋ช…๋ น์ด ์‹คํ–‰๋˜๋Š” ํด๋” (ํ˜„์žฌ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ)์— ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ฌธ์„œ ์ฐธ์กฐ)

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker-compose -f devops/docker-compose.yml
๋ฌผ๋ก  ์—ฌ๊ธฐ์— -p ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‚ฌ๋žŒ์˜ ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

.env (๋˜๋Š” ์ œ์•ˆ ๋œ docker-compose.env) ํŒŒ์ผ์„ docker-compose.yml์ด์žˆ๋Š” ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฑฐ๊ธฐ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

docker-compose.yml ๋‚ด์—์„œ env_file ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น env ๋ณ€์ˆ˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ์ด ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—๋งŒ ์ ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

์ด ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค docker-compose --project-directory(๋Œ€์ฒด ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •). .env ํŒŒ์ผ์—์„œ๋„ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ schmunk42 ๋Š” ์ข‹์€ ์ƒท์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ --project-directory ๋Š” .env ํŒŒ์ผ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ๋„ํ–ˆ์ง€๋งŒ .env ํŒŒ์ผ์ด ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ( project files ).

docker-compose -f PR_5378/docker-compose.yml -f PR_5378/docker-compose2.yml --project-directory PR_5378 down

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

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

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

์ž‘์„ฑ ํŒŒ์ผ์— project_name ์ถ”๊ฐ€์‹œ
์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ด์— ๋Œ€ํ•œ ์ž…์žฅ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์ด์œ ์— ๋Œ€ํ•ด์„œ๋Š” Daniel์˜ ์ตœ๊ทผ ์˜๊ฒฌ ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์–ด๋ ค์šด ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์ •๋‹นํ™”ํ•˜๊ธฐ์—๋Š” ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ํ’ˆ์งˆ์ด ๋„ˆ๋ฌด ๋งŽ์ด ๋–จ์–ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์ด ํ˜•์‹์œผ๋กœ). ํ˜„์‹ค์ ์œผ๋กœ ๋งํ•˜๋ฉด # 5378์€ ์•„๋งˆ๋„ ์˜ตํŠธ ์ธ ๋ฐ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜์žˆ๋Š” ์ตœ์ƒ์˜ ์–‘๋ณด ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํŽธ์ง‘ : ๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋‚ด์—์„œ ํ•ด๋‹น ์ œ์•ˆ์„ ๊ฐœ์„ ํ•˜๋Š” ์ œ์•ˆ์— ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค).

--project-directory
์•ฝ๊ฐ„์˜ ์ ‘์„ ์ด์ง€๋งŒ ์ง€๊ธˆ์€์ด ์˜ต์…˜์ด ์•ฝ๊ฐ„ ๊ณ ์žฅ๋‚œ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ์ด์ผœ ๋ณด๋ฉด ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „ํ˜€ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ณ ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ •๋ง ๋ฏฟ์„ ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์ƒํ•œ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


ํ•˜์ง€๋งŒ docker-compose.env + # 5378์ด ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š์€ ์†”๋ฃจ์…˜์ด์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์ด ์„ ํ˜ธํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ, ๋‹น์‹ ์ด ๋Œ€์ฒ˜ํ•  ์ˆ˜์žˆ๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์–‘๋ณด๋ฅผํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค.

๋†๋‹ด์€ ์ œ์ณ๋‘๊ณ  ...

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

ํ”„๋กœ์ ํŠธ์˜ "์ด๋ฆ„"์ด ํˆด๋ง์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์— ๊ธฐ๋ณธ์ด๋˜๊ธฐ ๋•Œ๋ฌธ์— project-name (๋˜๋Š” ๋‹ค๋ฅธ) ํ•„๋“œ๋ฅผ ์›ํ•˜๋Š” ์บ ํ”„๊ฐ€ ์ •๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์บ ํ”„์˜ ์‚ฌ๋žŒ๋“ค์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋˜๋Š” ํ”Œ๋ž˜๊ทธ์™€ ๊ฐ™์€ ๋ช…๋ น๊ณผ ๊ฐ™์€ ๋” ๋งŽ์€ ์ž„์‹œ ์†”๋ฃจ์…˜๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์ด ์ด๋ฆ„์„ ๋Œ ์–ด๋”˜๊ฐ€์— ๊ฐ„๋‹จํžˆ ์ ์–ด๋‘๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ฑด์„ค ์ ์ด๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@estarter ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ PR_5378 ๋””๋ ‰ํ† ๋ฆฌ์˜ .env ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

docker-compose --project-directory PR_5378 -f docker-compose.yml -f docker-compose2.yml down

Compose ํŒŒ์ผ์— project_name ์ถ”๊ฐ€์‹œ

@ shin- ์ด๋ฏธ ๊ฒฐ์ •๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฐฐ๊ฒฝ์„ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ „์— ์ด๊ฒƒ์„ ๋ฌผ์—ˆ๊ณ  ๋Œ€๋‹ต์„ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค (์ด๊ฒƒ์ด ํ† ๋ก ์ด ๋‚˜์—๊ฒŒ ๋„ˆ๋ฌด ์งœ์ฆ๋‚˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค).

์šฐ๋ฆฌ๊ฐ€ ์™œ ๋‹น์‹ ์€ ๋‚˜๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ๊ธฐ์˜๊ฒŒ ํ•  ์ˆ˜ container_name ๋„ ๋ฐ network ์—์„œ docker-compose.yml ? ์ฒซ ๋ฒˆ์งธ๋Š” ์ž ์žฌ์  ์ธ ๊ฐˆ๋“ฑ์˜ ์›์ธ์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” ๋งค์šฐ ํ˜ธ์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋…ผ๋ฆฌ์— ๋”ฐ๋ผ ๊ทธ ๋‘˜ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๊ฒƒ)๋„ ๊ฑฐ๊ธฐ์— ์žˆ์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. project_name ์˜ ์ฐจ์ด๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์งˆ๋ฌธ์„ ๋‹ค์‹œ ๋ฌด์‹œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

@ michael-k project_name ์ด container_name ์™€ (๊ณผ) ๋™์ผํ•˜๋‹ค๋Š” ๋ง์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ตฌ์„ฑ ๋  ์ˆ˜ ์žˆ์Œ์„ ์•Œ๋ ค ๋“œ๋ฆฌ๊ณ ์žํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ์˜คํ•ด ํ–ˆ์Šต๋‹ˆ๊นŒ?

network ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํ˜ธ์ŠคํŠธ์— ํ•œ์ •๋˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์ค‘์•™ ๊ฒฉ๋ฆฌ ๋„คํŠธ์›Œํฌ๊ฐ€ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ตฌ์„ฑ์€ docker-compose.yml ๋ฉ๋‹ˆ๋‹ค.

@AyushyaChitransh ๋‹น์‹ ์€ ์˜คํ•ด. ์งˆ๋ฌธ์€ : container_name , network ๋ฐ docker-compose.yml ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€์žˆ๋Š” ๋ฐ˜๋ฉด project_name ๋Š” ์—ฌ๊ธฐ์— ์žˆ์œผ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋“ค์€ ๋ชจ๋‘ ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ๋™์ผํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ํ˜ธ์ŠคํŠธ ํŠน์ • ๊ตฌ์„ฑ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

@aanand ๋‚˜๋Š”์ด ๊ธฐํšŒ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์— ๋Œ€ํ•ด์„œ๋„ ๋˜‘๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์ง€๋งŒ compose ํŒŒ์ผ์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„์„ ์„ค์ •ํ•  ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ,ํ•˜์ง€๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ด€๋ จ ํ† ๋ก  ์—์„œ docker-compose ํŒŒ์ผ์— ๋„คํŠธ์›Œํฌ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค .

@estarter ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฒ„๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@ schmunk42 ๋‚˜๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜ ์ฃผ์„ ์—์„œ On --project-directory ์™€ # 4709, # 4933 ๋ฐ # 4841์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‹ค์ œ๋กœ PR_5378 ๋””๋ ‰ํ† ๋ฆฌ์˜ .env ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.
docker-compose --project-directory PR_5378 -f docker-compose.yml -f docker-compose2.yml down

--project-directory -f ๋งค๊ฐœ ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„ ์ค€๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์‹ค ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.์ด ๋ช…๋ น์€ IOError: [Errno 2] No such file or directory: u'./docker-compose.yml'

--project-directory ๊ฐ€ -f ์˜ํ–ฅ์„์ฃผ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด --project-directory ๋ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ docker-compose ํŒŒ์ผ์„ ๋ชจ๋‘ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•…๋ชฝ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.

๋‚ด๊ฐ€ ํ•ด๊ฒฐ ๋œ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ณ ๋ฏผ์„ํ•˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ๋งค์šฐ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋ณธ ์šฐ์„  ์ˆœ์œ„์ž…๋‹ˆ๋‹ค.

  1. ํ•˜๋“œ ์ฝ”๋”ฉ
  2. cli ์˜ต์…˜
  3. ํ™˜๊ฒฝ
  4. project.rc
  5. ์ •์ƒ์ ์ธ ๊ธฐ๋ณธ

project_name ํ˜„์žฌ ์˜ต์…˜ # 1 ๋˜๋Š” ์˜ต์…˜ # 4๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ์ง๋ฉด ํ•œ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ด๋ฉฐ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋„์›€์ด๋˜์ง€ ์•Š์„ ์ˆ˜๋„์žˆ๋Š” ์ˆœ์ˆ˜์„ฑ์— ๋Œ€ํ•œ ์ฒ ํ•™์  ์ฃผ์žฅ์„ํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ OSS ๊ณ„๋‹จ์‹ ๊ตฌ์„ฑ ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋„์›€์ด๋˜์ง€ ์•Š์„ ์ˆ˜๋„์žˆ๋Š” ์ˆœ์ˆ˜์„ฑ์— ๋Œ€ํ•œ ์ฒ ํ•™์  ์ฃผ์žฅ์„ํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

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

์™œ ์šฐ๋ฆฌ๊ฐ€ docker-compose.yml์— container_name๊ณผ ๋„คํŠธ์›Œํฌ๊ฐ€ ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋„๋ก ๋„์™€ ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ฒซ ๋ฒˆ์งธ๋Š” ์ž ์žฌ์  ์ธ ๊ฐˆ๋“ฑ์˜ ์›์ธ์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” ๋งค์šฐ ํ˜ธ์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ๋…ผ๋ฆฌ์— ๋”ฐ๋ผ ๊ทธ ๋‘˜ (๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๊ฒƒ)๋„ ๊ฑฐ๊ธฐ์— ์žˆ์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. project_name์˜ ์ฐจ์ด์ ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

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

์ œ๊ฐ€ ์–ธ๊ธ‰ ํ•œ 4 ๋ฒˆ ์˜ต์…˜์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋กœ์ปฌ ๋””๋ ‰ํ† ๋ฆฌ ํŠน์ • ์„ค์ •์— ๋Œ€ํ•ด .docker-compose ์„ ๋„์ž…ํ•˜๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ _x_ ํ™˜๊ฒฝ ํ”Œ๋ž˜๊ทธ (์—ฌ์ „ํžˆ ํ™˜๊ฒฝ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•จ)๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋ฐ”๋žŒ์งํ•ฉ๋‹ˆ๋‹ค (imo).

๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# <my-project-dir>/.docker-compose
project_name: foobar

์œ„๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์˜ต์…˜๊ณผ ๋‹ค๋ฅด๋ฉฐ ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์—์„œ ๋” ๋‚ฎ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ฉ‹์ง€๊ฒŒ ํ•ด๊ฒฐํ•˜๊ณ  ๋ชฉ๋ก์—์„œ ๋‹ค๋ฅธ ํ‘œ์ค€ ๊ตฌ์„ฑ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

@thedeeno ์šฐ๋ฆฌ ๋งˆ์Œ ์†์—์„œ .env ํŒŒ์ผ ๋‚ด์˜ COMPOSE_PROJECT_NAME ๋Š” ์ด๋ฏธ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค (๊ฐœ์š”์—์žˆ๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์šฐ์„  ์ˆœ์œ„๋กœ). ๊ทธ๋Ÿฌ๋‚˜ .env ์— ๋Œ€ํ•ด ์ž˜๋ชป๋œ ์ด๋ฆ„ ์„ ํƒ์ด๋ผ๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ docker-compose.env ๋ฅผ ๋Œ€์•ˆ์œผ๋กœ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹น์‹ ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ ๋งˆ์Œ์— .env ํŒŒ์ผ ๋‚ด์˜ COMPOSE_PROJECT_NAME์€ ์ด๋ฏธ

@ shin- ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ .env ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋กœ์ปฌ ๋น„๋ฐ€ ๋ฐ ๊ธฐํƒ€ ๋กœ์ปฌ ํ•˜๋“œ์›จ์–ด ํŠน์ • ๊ตฌ์„ฑ์„ ๋„ฃ๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์œ„์˜ number 3 ํ™˜๊ฒฝ ๊ธฐ๋ฐ˜ ๊ตฌ์„ฑ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์†Œ์œ ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•  ๋•Œ ์ด์Šค์ผ€์ดํ”„ ํ•ด์น˜ ( number 4 )๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ์ž ์ž์‹ ์˜ .env ํŒŒ์ผ (VC ์•„๋‹˜)์„ ๊ฐ–๊ฒŒ๋ฉ๋‹ˆ๋‹ค. docker-compose.yaml ์— ์ฃผ์ž… ํ•  ๋น„๋ฐ€์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ๋„ˆ๋ฌด ์ข‹์•„.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋„๊ตฌ์™€ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .env ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€์ด ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ COMPOSE_PROJECT_NAME ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋น„๋ฐ€์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ฒ˜๋Ÿผ _one thing_์ž…๋‹ˆ๋‹ค.

์Šฌํ”„๊ฒŒ๋„ ์•„๋‹ˆ์š”, .env ์˜ ๊ธฐ๋ณธ ์†Œ์Šค ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์—ฌ๊ธฐ์„œ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ .env ์ด ์ž๋™์œผ๋กœ ์†Œ์‹ฑ๋œ๋‹ค๋Š” ์ ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค์Šต์—์„œ ํ•œ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์—ฌ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

.env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๊ณ  ์ด์ƒํ•œ sed / awk / perl / whatever ๊ตฌ๋ฌธ ๋ถ„์„์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด CI์˜ ๊ฐ’์„ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.

    echo APP_VERSION=$CI_COMMIT_REF_NAME > .env
    docker-compose pull
    docker-compose up -d

๋‚˜์ค‘์— docker-compose.yml ์—์„œ ์ด๋ฏธ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

    image: my.registry.example.net/app:${APP_VERSION}

์ด์ œ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ณ€์ˆ˜๊ฐ€ ๋” ํ•„์š”ํ•˜๋ฉด ์—ฌ๋Ÿฌ .env ํŒŒ์ผ์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ํ•œ ์ผ๋ถ€ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ docker-compose.env.d/* ๋˜๋Š” .docker-compose.env.d/* ๋˜๋Š” docker-compose.d/* ์™€ ๊ฐ™์€ "๋””๋ ‰ํ† ๋ฆฌ"์ง€์›์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ glob์€ ํŽธ์ง‘๊ธฐ ๋ฐฑ์—… ( *~ , *.bak )๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฆ‰์‹œ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋Œ€์‹  ์ผ๋ถ€ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. docker-compose.env.d/*.sh

...ํ•˜์ง€๋งŒ ๋‹ค์‹œ docker-compose.yml ๋ฃจํŠธ ์ˆ˜์ค€์˜ .env ํŒŒ์ผ์ด๋กœ๋“œ๋˜๋Š” docker-compose.yml ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์น˜ํ‚จ-๋‹ฌ๊ฑ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ตฌ์„ฑ ํŒŒ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. :)

์•ฝ๊ฐ„์˜ ์ฃผ์ œ๋ฅผ ๋ฒ—์–ด ๋‚ฌ์ง€๋งŒ COMPOSE_PROJECT_NAME env๋Š” ์ ‘๋‘์‚ฌ๋ฅผ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. A-Za-z0-9_ ์™€ ์ผ์น˜ํ•˜๋„๋ก ์—ฌ์ „ํžˆ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ์— - ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. (์ง€๊ธˆ์ด ๋ฌธ์ œ๋ฅผ ์‹ ๊ณ  ํ•œ ์œ„์น˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ ์•„ํŒŒ ํฌ๋Š” ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค)

docker ์ž์ฒด๊ฐ€ ์ œํ•œํ•˜๋Š” ๋™์ผํ•œ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

@glensc ํ™˜๊ฒฝ์„ ๊ด€๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ๋งŽ์€ ์ธํ”„๋ผ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๊ฒƒ์ด docker-compose ์˜ ์ฑ…์ž„์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ๋ดค๋˜ ๊ฒƒ์€ ์ž๋™์œผ๋กœ .env ์†Œ์‹ฑํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

@glensc @thedeeno ์ด์ƒ์ ์œผ๋กœ๋Š” ๋‘ ๊ฐœ์˜ *.env ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ๊ณต์œ ํ•˜๊ธฐ์œ„ํ•œ ๊ฒƒ์ด๊ณ , ํ•˜๋‚˜๋Š” ๋น„๊ณต๊ฐœ๋กœ ์œ ์ง€๋˜๊ณ , ๋‘ ํŒŒ์ผ์ด ๋™์ผํ•œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ ํ•  ๋•Œ ํ›„์ž๋Š” ์ „์ž๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๊นŒ?

์ง€๋‚œ์ฃผ ๋‚ด ๋Œ“๊ธ€ ์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ .env ์ด๋ฆ„์„ ์–ธ๊ธ‰ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฐœ docker-compose.env (๋น„๊ณต๊ฐœ .env ) ์ž๋™ ์†Œ์‹ฑํ•˜๋Š” ๋™์•ˆ)๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ rc ํŒŒ์ผ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜๊ณ  ์†Œ์Šค ์ œ์–ด๋ฅผ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

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

@thedeeno @glensc ๊ณต๊ฐœ ๋œ ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๋Š” ๋น„๊ณต๊ฐœ ENV ํŒŒ์ผ์ด ํ•„์š”ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ณด์•ˆ ๋น„๋ฐ€์€ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ž๋™ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ docker-compose.env ์ •์˜ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ .env ํŒŒ์ผ์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š”๋Œ€๋กœ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ docker-compose ์™€ ์Šคํƒ์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์„ค์ •์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

@ schmunk42 ๋‚˜๋Š” ๊ทธ ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ฑฐ๊ธฐ์—์„œ ๋งŽ์€ ๋„์›€์„๋ฐ›์ง€ ๋ชปํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ ์ œ์–ด์— project_name ๋ฅผ ์ปค๋ฐ‹ํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. docker-compose.env ์ด์ด๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋‹จ๋ฝ์„ ๋”ฐ๋ฅด๋Š” ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ .env ๋น„๋ฐ€ ๋ฐ ์ˆ˜๋™์œผ๋กœ ๊ทธ๋“ค์„ ์ฃผ์‚ฌํ•œ๋‹ค docker-compose.yaml .

@ schmunk42 https://github.com/docker/compose/issues/745#issuecomment -346491062

image ๊ฐ’์— ๋Œ€ํ•ด ${variables} ๋ฅผ ์ •์˜ ํ•  ์œ„์น˜ ๋งŒ .env ํŒŒ์ผ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@glensc ๋™์˜ํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์‹  yml ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜„์žฌ ์žฌ์ •์˜ ๊ธฐ๋Šฅ์— ๋งž๊ฒŒ docker-compose.override.env ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

docker-compose.env
docker-compose.override.env
docker-compose.override.yml
docker-compose.yml

๋‘ ๋ฒˆ์งธ ๋‹จ๋ฝ์„ ๋”ฐ๋ฅด๋Š” ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€์— .env๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ˆ˜๋™์œผ๋กœ docker-compose.yaml์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

@thedeeno ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

environment:
  - ${SECRET_VAR_FROM_DOTENV}

docker-compose.override.env ์—์„œ๋„ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

env_file:
  - .env

๋” ๋งŽ์€ docker-compose ํŠน์ •์„ ์œ„ํ•ด .env๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ํ†ต๋กœ?

.env์˜ ์ž๋™ ์†Œ์‹ฑ์„ ๊ฑด๋„ˆ ๋›ฐ๋ฉด ๋‚ด
ํŒ€์˜ ์›Œํฌ ํ”Œ๋กœ์šฐ. ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์œ„ํ•ด์ด ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋๋‚ ๊ฑฐ์•ผ
์šฐ๋ฆฌ์˜ ๋น„๋ฐ€์„ ๋‘ ๊ฐœ (.env์™€ ๋‹น์‹ ์ด ์ œ์•ˆํ•˜๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ)์— ๋„ฃ๊ธฐ
docker-compose๊ฐ€ .env๋ฅผ ๋ณด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์žฅ์†Œ.

2017 ๋…„ 11 ์›” 23 ์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 1:15 Tobias Munk [email protected]
์ผ๋‹ค :

@glensc https://github.com/glensc ๋™์˜ํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์‹  docker-compose.override.env๋ฅผ ์ œ์•ˆํ•˜์—ฌ
yml ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜„์žฌ ์žฌ์ •์˜ ๊ธฐ๋Šฅ.

docker-compose.env
docker-compose.override.env
docker-compose.override.yml
docker-compose.yml

๋‘ ๋ฒˆ์งธ ๋‹จ๋ฝ์„ ๋”ฐ๋ฅด๋Š” ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€์— .env๋ฅผ ์‚ฌ์šฉํ•˜๊ณ 
docker-compose.yaml์— ์ˆ˜๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜์‹ญ์‹œ์˜ค.

@thedeeno https://github.com/thedeeno ๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค :

ํ™˜๊ฒฝ:

  • $ {SECRET_VAR_FROM_DOTENV}

docker-compose.override.env์—์„œ๋„ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋‹น์‹ 
ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค :

env_file :

  • .env

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/745#issuecomment-346538315 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/AAFIdxtbI7y3wW2TFa401Go6Msj0gC74ks5s5Q1vgaJpZM4DLBNs
.

๋” ๋งŽ์€ docker-compose ํŠน์ •์„ ์œ„ํ•ด .env๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ํ†ต๋กœ?

๋ฐ˜๋“œ์‹œ ๊ทธ๋ ‡์ง€๋Š” ์•Š์ง€๋งŒ BC docker-compose ๊ฒฝ์šฐ fig.yml ์™€ ๋™์ผํ•˜๊ฒŒ ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด .env ๊ณ„์† ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.env
docker-compose.env
.env
docker-compose.override.env
.env
docker-compose.env
docker-compose.override.env

.env ๋Š” ๋งˆ์ง€๋ง‰ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๋Š” .env ๋ฅผ ๋Œ€์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋Š” ๋Œ€์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ ๋‘ ๊ฐœ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ .env๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ์˜๋ฏธ๊ฐ€์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
๋” ๋„“์€ ์ƒํƒœ๊ณ„์—์„œ.

์„ธ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‚ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์†Œ์Šค ์ œ์–ด์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฟ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š”ํ•˜์ง€ ์•Š๋Š”๋‹ค
ํŠนํžˆ ๋” ์ •๊ตํ•œ ๊ณ„๋‹จ์‹ ํ™˜๊ฒฝ์— ๊ด€์‹ฌ
์กฐ์น˜. ์‚ฌ์‹ค์ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์ „๋žต์€
ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

๊ตฌ์„ฑ ํŒŒ์ผ์ด ํ…Œ์ด๋ธ”์„ ๋ฒ—์–ด ๋‚ฌ๊ณ  ๋‚ด ์ปค๋ฐ‹ ๋ฐฉ๋ฒ•์ด์žˆ๋Š” ๊ฒฝ์šฐ
project_name์ด env ์บ์Šค์ผ€์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๊บผ์ด ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜!

2017 ๋…„ 11 ์›” 23 ์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 1:31 Tobias Munk [email protected]
์ผ๋‹ค :

๋” ๋งŽ์€ docker-compose ํŠน์ •์„ ์œ„ํ•ด .env๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ํ†ต๋กœ?

๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ BC docker-compose๋Š” ์—ฌ์ „ํžˆ .env๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๊ฒƒ์€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉฐ, fig.yml๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋น„๋ก ๊ทธ๊ฒƒ์€
๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค ๋กญ์Šต๋‹ˆ๋‹ค.

.env
docker-compose.env

.env
docker-compose.override.env

.env
docker-compose.env
docker-compose.override.env

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

โ€”
๋‹น์‹ ์ด ์–ธ๊ธ‰ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/745#issuecomment-346539891 ๋˜๋Š” ์Œ์†Œ๊ฑฐ
์‹ค
https://github.com/notifications/unsubscribe-auth/AAFId95kZQIsiWp488JyPQOtGJju0OPbks5s5RFbgaJpZM4DLBNs
.

๋„คํŠธ์›Œํฌ์— ๊ด€ํ•ด์„œ๋Š” ๊ทธ๊ฒƒ์ด ๋‹น์‹ ์˜ ๋งˆ์Œ์—์„œ ์–ด๋–ป๊ฒŒ ๋น„๊ต๋˜๋Š”์ง€ ์™„์ „ํžˆ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๊นŒ?

@์ •๊ฐ•์ด-

services:
    web:
        build: ./
        networks:
            - my_project_network_on_my_localhost
networks:
    my_project_network_on_my_localhost:
        external: true

docker-compose.yml ์„ ๋‚ด ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ํ•ญ์ƒ ํ˜ธ์ŠคํŠธ ๋ณ„ ์„ค์ •์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๊ฐœ๋ฐœ์—์„œ ์ƒ๋‹นํžˆ ๋‹ค๋ฅธ ๋‚ด์šฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ˜•์‹ ๋Œ€์‹  docker-project.yaml ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ "4 project.rc"์˜ ํŒฌ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์›๋ž˜ ๋ฌธ์ œ๊ฐ€ ์„ค๋ช…ํ•˜๋Š” ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์šฐ๋ คํ•˜๋Š” ํ•œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž‘์„ฑ ํŒŒ์ผ์— ๋„ฃ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‚ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์†Œ์Šค ์ œ์–ด์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ฟ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์š”๊ตฌํ•  ์ด์œ ๊ฐ€ ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ์ด๋ฆ„์„ ์˜ˆ์ƒํ•˜๋Š” ์™ธ๋ถ€ ๋„๊ตฌ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋„๊ตฌ๊ฐ€ docker-compose ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

my_project_network_on_my_localhost ์ด (๊ฐ€) ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ž‘์„ฑ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„๊ณผ ์ผ์น˜ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

my_project_network_on_my_localhost๊ฐ€ ๋‚˜์—๊ฒŒ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹จ์ง€ ์˜ˆ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„์™€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ์ปดํ“จํ„ฐ์— ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด docker-compose.yml ๋‹ค๋ฅธ ๋งŽ์€ ์„ค์ •๋„ ์ •๊ธฐ์ ์œผ๋กœ ํ”„๋กœ๋•์…˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ์ ํŠธ ํŠน์ • ํ•ญ๋ชฉ์„ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ดํ•ดํ–ˆ๋“ฏ์ด, ์ฒ˜์Œ์— docker-compose (๋˜๋Š” ๋” ๋‚˜์€ fig )์˜ ๊ธฐ๋ณธ ์•„์ด๋””์–ด๋Š” ๋ณต์žกํ•œ ์ปจํ…Œ์ด๋„ˆ ์„ค์ •์„ ์œ„ํ•ด ๊ธด docker ๋ช…๋ น ์ค„ ์˜ต์…˜์„ ๋ชจ๋‘ ๋ฉ‹์ง€๊ฒŒ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ yaml ํŒŒ์ผ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์˜ต์…˜ ์ด ๋น ์ง„ ๊ฒƒ์ด ๋„ˆ๋ฌด ์ด์ƒํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ๋” ์ด์ƒ ์ฃผ์š” ์•„์ด๋””์–ด๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ๋“  ๋†“์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด docker-compose.yml์˜ ๋‹ค๋ฅธ ๋งŽ์€ ์„ค์ •๋„ ์ •๊ธฐ์ ์œผ๋กœ ํ”„๋กœ๋•์…˜๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœ์ ํŠธ ํŠน์ • ํ•ญ๋ชฉ์„ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ํด๋”์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(cd tests && docker-compose up -d)
(cd tests && docker-compose ps)
(cd tests && docker-compose run php codecept run)

ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ... ๋˜๋Š” ์ด๊ฒƒ

(cd production && docker-compose logs -f --tail 100)

ํ”„๋กœ๋•์…˜ ์šฉ (๋ณด๋„ˆ์Šค : ํ”„๋กœ๋•์…˜์—์„œ DOCKER_HOST ๋ฅผ ์ •์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ docker-compose ๋งŒ์œผ๋กœ ๊ฐ€๋Šฅ).

๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ, ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ํด๋”์ž…๋‹ˆ๋‹ค. ๋‘ ๊ณณ์—์„œ cp .env-dist .env ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž˜๋ชป๋œ ์ž‘์„ฑ ํŒŒ์ผ๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋Š”์ด IMHO ๊น”๋”ํ•œ ์›Œํฌ ํ”Œ๋กœ์šฐ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋‚ด๊ฐ€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ์ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์š”๊ตฌํ•  ์ด์œ ๊ฐ€ ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€๋œ ์ด๋ฆ„์„ ์˜ˆ์ƒํ•˜๋Š” ์™ธ๋ถ€ ๋„๊ตฌ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋„๊ตฌ๊ฐ€ docker-compose๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@dnephin ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ํŽธ๋ฆฌํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํ•˜๋“œ ์ฝ”๋”ฉ ๋œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๋„์›€์ด๋˜๋Š” ํ•œ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค. traefik์˜ docker ๊ตฌ์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ <service>.<project>.<domain> ํ˜•์‹์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ํ˜ธ์ŠคํŠธ ๊ทœ์น™์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ํ˜•์‹์€ ๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ docker-compose ์„œ๋น„์Šค์— ๋™์ผํ•œ fqdns๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ ์ตํ•ฉ๋‹ˆ๋‹ค. ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ a) ๋ณต์ œ๋ณธ์— ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œ b) traefik์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ˆ˜๋™์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ œ๋กœ ๊ตฌ์„ฑ ์„ค์ •์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ์งœ์ฆ๋‚˜.

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

์—ฌ๋Ÿฌ๋ถ„, ๋„ˆ๋ฌด ๋งŽ์€ ํ† ๋ก  ...์ด ์ƒํƒœ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? .docker-compose ํŒŒ์ผ์— ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์•„๋‹ˆ๋ฉด์ด ์Šค๋ ˆ๋“œ์—์„œ ๋” ๋งŽ์€ ํ† ๋ก ์ด ํ•„์š”ํ•˜์‹ญ๋‹ˆ๊นŒ?

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ docker-compose.yml ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ PyCharm๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ๋งค์šฐ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ YAML ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ๊ธฐ๋ณธ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๋‹จ์ˆœํžˆ ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (_naively_๋ผ๊ณ  ๋งํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?). ์ด๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ์ด๋ฆ„ ๊ณต๊ฐ„ (๊ณ„์ธต ์ )์„ ํ”Œ๋žซ ์ด๋ฆ„์œผ๋กœ ํšจ๊ณผ์ ์œผ๋กœ ์••์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฆ„ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋กœ ์ธํ•ด ~/fooproject/master ๋ฐ ~/barproject/master ์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ˆ์งˆ๊ธด ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ Git์— ์ปค๋ฐ‹ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ .env ์ „์— .env.default ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ์ด ์ด๊ฒƒ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ… ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ค๋ž˜๋œ # 210๋„ ์ฒ˜๋ฆฌ ํ•  BTW)?

Docker-compose ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‚ด ํ•จ์ˆ˜๋กœ ๋ž˜ํ•‘ํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ ์–ด๋””์„œ๋‚˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด .env ํŒŒ์ผ์ด๋กœ๋“œ๋˜๊ณ  ์–ด๋””์—์„œ๋‚˜ ์˜ฌ๋ฐ”๋ฅธ ๋„์ปค ์ž‘์„ฑ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์ด๊ฒƒ์„ ํ™•์žฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ๊ธฐ๋Šฅ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์ด์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์•„์ง ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

DEFAULT_DOCKER_COMPOSE=~/my-project

function dcompose() {
    pushd $DEFAULT_DOCKER_COMPOSE &> /dev/null;
    /usr/local/bin/docker-compose $@;
    popd &> /dev/null;
}
## maintain auto complete
function _dc {
    pushd $DEFAULT_DOCKER_COMPOSE &> /dev/null;
    _docker_compose;
    popd &> /dev/null;
}

complete -F _dc dcompose

์ด๋ฏธ์ง€ ์ถฉ๋Œ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๋…ผ๋ฆฌ์ ์ด๊ณ  ์ข์•„ ๋ณด์ด๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— docker-compose.yml์—์„œ project_name์„ ์„ค์ •ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ์ •๋ง ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์€ ๋‚˜์œ ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ ํ”„๋กœ์ ํŠธ ํด๋”๋Š” / home / project1 / repository, / home / project2 / repository ๋“ฑ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ์šฐ docker๋Š” repository_app๊ณผ ๊ฐ™์€ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@vedmant docker-compose.yml ์—์„œ ์ด๋ฏธ์ง€ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. image ๋ฐ build ๋ฉ๋‹ˆ๋‹ค.

์ž .. ์ด์ œ ๊ฐ™์€ ์ด๋ฆ„์˜ ํด๋”์—์„œ ํ”„๋กœ์ ํŠธ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

docker-compose -f /foo/bar up -d
docker-compose -f /foo/foo/foo/bar down

์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ด๋ฏธ ์ œ์•ˆ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์™œ์˜ ์ฃผ์š” ๋ณ€๊ฒฝํ•˜์ง€ version: 4 ๊ณผ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ docker-compose.yml ?

๋‚ด .docker-compose / project-name์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ...
-ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ์ž‘๋™ ํ•จ

docker-compose.yml์—์„œ๋„ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์›น ์•ฑ๊ณผ postgress ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๊ฐ€์žˆ๋Š” docker-compose.yml ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ ์ž„์‹œ ์ž‘์—…์— ๋Œ€ํ•ด ๋ณ„๋„์˜ docker-compose.yml ํŒŒ์ผ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ docker-compose๋กœ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์€ ์ž„์‹œ ์ž‘์—…์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ž„์‹œ ์ž‘์—…์€ ์ฃผ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์„œ๋น„์Šค / ๋„คํŠธ์›Œํฌ / ๋ณผ๋ฅจ์„ ํ™œ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

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

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

docker-compose.yml ๋ฐ docker-compose.adhoc.yml projectname ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด-์›ํ•˜๋Š”๋Œ€๋กœ ๊ตฌ์กฐํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ (๋ณ„๋„์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋„ฃ์„ ์ˆ˜๋„ ์žˆ์Œ) ํ•„์š”์—†์ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์†์ ์œผ๋กœ ์ถ”๊ฐ€ ๋ช…๋ น ์ค„ ์ธ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ง„์งœ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๊ตฌ์กฐ์— ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

/company
    /ab   # project prefix
        /backend   # actual project
        /webapp
    /cd
        /backend
        /webapp

์ด์ œ ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ์—์„œ docker-compose๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด backend_default ๋„คํŠธ์›Œํฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  backend_ ๋ช…์‹œ ์ ์œผ๋กœ ์ด๋ฆ„์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉด ์˜ค๋ฅธ์ชฝ ํด๋”๋กœ ๋Œ์•„๊ฐ€์„œ ๋จผ์ € docker-compose down ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ์—์„œ ์ƒˆ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ๋„๋ฉด orhans์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ๋„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ๊ณ  ๋‹จ์ผ ์‹œ์Šคํ…œ์˜ ๋™์  ๋ฐ๋ชจ ์Šคํƒ ๋“œ, ์ง€์  ๋‹น ์Šคํƒ ๋“œ์— docker-compose๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

/project-1
    /dev # docker-compose.yml inside
    /master # docker-compose.yml inside
    /feature
        /new-feature # docker-compose.yml inside
/project-2
    /dev # docker-compose.yml inside
    /master # docker-compose.yml inside

๋”ฐ๋ผ์„œ "๋งˆ์Šคํ„ฐ"์™€ "๊ฐœ๋ฐœ์ž"๋Š” ํ”„๋กœ์ ํŠธ๊ฐ„์— ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. .docker-compose ํŒŒ์ผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@simplesmiler ๋ฐ˜๋ณต ํ•  ์œ„ํ—˜์ด ์žˆ์ง€๋งŒ .env ๋Š” ์ด๋ฏธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

@ shin- .env ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ์—์—†๋Š” ๋น„๋ฐ€์— ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

@simplesmiler ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ .env ๋ฅผ ๋ฒ„์ „ ์ œ์–ด _ ์™ธ๋ถ€์— ์œ ์ง€ํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ฒ„์ „ ์ œ์–ด์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, ์ด๊ฒƒ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.

@thedeeno ๋Š” ๊ฒŒ์‹œ๋ฌผ์ด ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•จ๊ป˜ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋ช…์‹œ ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ ์ด์ƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

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

์ปคํ”ผ๋ฅผ ๋งˆ์‹ค ์ˆ˜ ์žˆ๋„๋ก ํ•จ๊ป˜ ์ผํ–ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”. ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฉ์ฒญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„๋งˆ๋„์ด ์Šค๋ ˆ๋“œ๋ฅผ ์ž˜๋ชป ๊ธฐ์–ตํ•˜๊ณ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .env ๋ฌด์‹œํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ฒ„์ „ ์ œ์–ด์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

.env๋ฅผ ๋ฌด์‹œํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ฒ„์ „ ์ œ์–ด์— ์ปค๋ฐ‹ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์—ฌ์ „ํžˆ ๋ˆ„๋ฝ ๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๊นŒ?

ํ˜„์žฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ช‡ ๋‹ฌ ์ „์— ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ^ 1, ๊ณ„ํš์€ ๋ฒ„์ „ ์ œ์–ด์— ํฌํ•จ๋  ์ˆ˜์žˆ๋Š” ๋ณด์กฐ ํ™˜๊ฒฝ ํŒŒ์ผ๋กœ docker-compose.env ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์—์„œ ๋‹ค์†Œ ๋ฏธ๋„๋Ÿฌ์กŒ์ง€๋งŒ ๊ณง ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

1 / https://github.com/docker/compose/issues/745#issuecomment -345054893

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค! PR ์ˆ˜๋ฝ?

์˜ค๋ž˜ ์ „์— ํฌ๋ง์„ ํฌ๊ธฐํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์žˆ๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด์ด ์„ค์ •์„ ์œ„ํ•ด ๋‘ ๋ฒˆ์งธ ํŒŒ์ผ์„ ์œ ์ง€ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์—ฌ์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

๋…ผ๋ฆฌ์ ์œผ๋กœ๋„ ๋ง์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker-compose.yml ์—์ด ์„ค์ •์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋ช…๋ฐฑํ•ด์„œ ๋งค๋‰ด์–ผ์—์„œ์ด ์˜ต์…˜์„ ์ฐพ์„ ๋•Œ์ด ์˜ต์…˜์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์˜ ๊ฑฐ์˜ ๋ชจ๋“  ์ธก๋ฉด์„ ์—ฌ๊ธฐ์—์„œ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ๊ตฌ์„ฑ ๋กœ์ง์˜ ๋ช…๋ฐฑํ•œ ๋‹จ์ ˆ์ž…๋‹ˆ๋‹ค.

docker-compose.yml (๊ฑฐ์˜) ๋ชจ๋“  ์„ค์ •์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ "๋ฒ”์œ„ ์ง€์ •"๋œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 4841์—์„œ ์ œ์•ˆํ–ˆ๋“ฏ์ด ์‚ฌ์šฉํ•  .env ํŒŒ์ผ (์˜ˆ : --env-file )์„ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

@roipoussiere ์ฐธ์กฐ https://github.com/docker/compose/issues/4841#issuecomment -414543951

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ schmunk42.
๊ทธ๋Ÿฌ๋‚˜ ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

.
โ”œโ”€โ”€ project_a
โ”‚ย ย  โ”œโ”€โ”€ .env
โ”œโ”€โ”€ project_b
โ”‚   โ”œโ”€โ”€ .env

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋” ์‰ฌ์šด ๊ฒƒ ๋Œ€์‹ ์— :

.
โ”œโ”€โ”€ a.env
โ”œโ”€โ”€ b.env

์˜ˆ, https://github.com/docker/compose/issues/745#issuecomment -345054893 ์ฐธ์กฐ- ๊ฐ€๋” ์—ฌ๊ธฐ์— ์ˆจ๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ ์ฐฝ์—์„œ ์—ด์–ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค . : nerd_face :

์ €๋Š” --env-file ์ œ์•ˆ์„ ๋‘ ๋ฒˆ์งธ๋กœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ํ‹ฐ์ผ“์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์„ ์›ํ•œ๋‹ค๋ฉด ๊ฐ€์„œ ์ข‹์•„ํ•˜์‹ญ์‹œ์˜ค .

๊ทธ๋ž˜์„œ ์ €๋Š”์ด ๋ฒ„๊ทธ / ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐœ์˜ ๋Œ“๊ธ€ ๋งŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ† ๋ก ์ด ๊ณ„์†๋˜๊ณ  ์—ด๋ ค ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ด๊ฒƒ์ด ์ฒ˜์Œ์œผ๋กœ ์—ด๋ฆฐ ์ง€ 4 ๋…„์ด๋˜์—ˆ๊ณ  ์•„์ง ํ•ด๊ฒฐ์ฑ…์ด ์—†๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ๋ถ€๋ถ„์ ์ธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฐ ํ›„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์„๊นŒ์š” ..?

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

ํ•˜์ง€๋งŒ Stripe๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.์ด ์ž‘์—…์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ํ‚ค์™€ ๋ผ์ด๋ธŒ ํ‚ค AKA๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—… ํ•  ํ‚ค 2 ์„ธํŠธ. ๊ฐœ๋ฐœ ์ค‘์—๋Š” ํ…Œ์ŠคํŠธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ฉฐ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ๋ผ์ด๋ธŒ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์ž๋™์œผ๋กœ .env ์ž์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€ ๊ฐ’์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ™˜๊ฒฝ์— ๋‹ค๋ฅธ ํ‚ค๊ฐ€ ์žˆ๊ณ  ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ํŒŒ์ผ์˜ ๊ฐ’์„ ์ „ํ™˜ ํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. dev ๋˜๋Š” prod์˜ ์•ฑ (๋ฏธ์นœ ๊ฒƒ์ด๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค).

์ตœ์ข…์ ์œผ๋กœ๋Š” .env ๋ฐ .env.prod ํŒŒ์ผ์„ ๋ชจ๋‘ ๋งŒ๋“ค๊ณ  ๋ฒ„์ „ ์ œ์–ด์—์„œ ๋‘˜ ๋‹ค ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๊ฐœ๋ฐœ์—์„œ ํ…Œ์ŠคํŠธ / ๊ฐœ๋ฐœ ํ‚ค๋ฅผ ๋ณด์œ ํ•œ ๋‹ค์Œ ๊ฐœ๋ฐœ ์ž‘์„ฑ ํŒŒ์ผ์—์„œ env_file ๋กœ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๋•์…˜์—์„œ ํ”„๋กœ๋•์…˜ ์ž‘์„ฑ ํŒŒ์ผ์—์„œ .env ๋ฐ .env.prod ๋ฅผ ๋ชจ๋‘ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ์•„์‹ญ๋‹ˆ๊นŒ? ํ˜„์žฌ Docker Compose์—์„œ๋Š” ์„ ํƒ์  env_file ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Docker Compose๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ ํ•˜๋ฉด Docker Compose๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ env_file ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด๋ผ๋ฉด ์ž๋™์œผ๋กœ .env ํŒŒ์ผ์ด ์žˆ์–ด์•ผํ•˜๋ฉฐ ์ด๊ฒƒ์€ Stripe์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์›น ํ”„๋ ˆ์ž„ ์›Œํฌ์—๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ๊ฐœ๋ฐœ๊ณผ ํ”„๋กœ๋•์…˜ ๋ชจ๋‘์—์„œ ๋ณ€๊ฒฝ ๋  ์ˆ˜์žˆ๋Š” ํŠน์ • ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ : Flask์˜ ๊ฒฝ์šฐ SERVER_NAME ).

์ฆ‰, ๋ฒ„์ „ ๊ด€๋ฆฌ์— ์ปค๋ฐ‹ํ•˜๋Š” .env_example ํŒŒ์ผ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋กœ ์ œํ•œ๋˜๊ณ  ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ํŒŒ์ผ์˜ ์ด๋ฆ„์„ .env ๋กœ ๋ณ€๊ฒฝ ํ•œ ๋‹ค์Œ์ด ํŒŒ์ผ ๋‚ด๋ถ€์— ์šฐ๋ฆฌ ์˜ค๋žœ ์นœ๊ตฌ COMPOSE_PROJECT_NAME .

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

์ผ๋ถ€ ๋กœ๋“œ๋งต์—์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด์— ๋Œ€ํ•œ ์œ ์Šค ์ผ€์ด์Šค๋Š” ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ docker-compose ํŒŒ์ผ์ด์žˆ๋Š” ๊ฒฝ์šฐ COMPOSE_PROJECT_NAME์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ˆ : dev, test, ์•„๋งˆ๋„ base, ์•„๋งˆ๋„ ํ…Œ์ŠคํŠธ ๋กœ์ปฌ ๋“ฑ) ์„œ๋กœ ๋ถ„๋ฆฌ ๋œ 2 ๊ฐœ์˜ ๋งค์šฐ ๋‹ค๋ฅธ ํ™˜๊ฒฝ.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ makefile์— COMPOSE_PROJECT_NAME์„ ์ƒ์„ฑํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋„์ปค ๊ตฌ์„ฑ ์ œํ•œ์„ ์šฐํšŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

compose yaml ์ž์ฒด ๋‚ด์—์„œ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์•„์ง ์—ด๋ ค ์žˆ์Šต๋‹ˆ๊นŒ? ์„ธ์ƒ์—...

๊ตฌ๋…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ compose yaml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์˜์›ํ•˜๋‹ค ๐Ÿคฆโ€โ™‚

์ด ๊ธฐ๋Šฅ์ด ์žˆ์œผ๋ฉด ๋งค์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์ œ๊ฐ€ ์ž‘์—…์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ๋งค์šฐ ํ™˜์˜๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข‹์•„, ๊ทธ๋ž˜์„œ์ด ๊ธด ์Šค๋ ˆ๋“œ์—์„œ ์šฐ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด docker-compose.yml ํŒŒ์ผ์— ์—†์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์ธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด์— ๋ฐ˜๋Œ€ํ•˜๊ณ  ๊ทธ๋Ÿฌํ•œ ํ’€ ์š”์ฒญ์„ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ์ด ๋ฌธ์ œ์˜ ๋งจ ์œ„์—์žˆ๋Š” ์›๋ž˜ ์ œ์•ˆ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์˜๊ตฌ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ .docker-compose ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ .docker-compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์นจ๋‚ด ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ์ง„์ „์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋Œ€์•ˆ ๋ชฉ๋ก์— ENV ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ถˆ์ผ์น˜์˜ ๊ทผ๋ณธ์ ์ธ ์›์ธ์€์ด ์Šค๋ ˆ๋“œ / ๋ฌธ์ œ๊ฐ€ ENV ๋ณ€์ˆ˜์— ์žˆ์œผ๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ repo์— ์ปค๋ฐ‹ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค (๋ฌผ๋ก  ์„ ํƒ ์‚ฌํ•ญ, ํ‘œ์ค€ ๊ถŒ์žฅ ์‚ฌํ•ญ์€ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

yaml์˜ ๋‚ด์šฉ์ด ์•„๋‹Œ ENV๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๊ฐ„์— yaml ํŒŒ์ผ์„ ๊ณต์œ ํ•˜๋Š” ์ฒ ํ•™๊ณผ ๋ชจ์ˆœ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค : https://docs.docker.com/compose/extends/ (์˜ˆ๋ฅผ ๋“ค์–ด "์˜ˆ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€"์ฐธ์กฐ). ๋‹จ์ผ ๊ธฐ๋ณธ yaml ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  dev, test ๋ฐ prod์— ๋Œ€ํ•œ ํŒŒ์ผ์„ ์žฌ์ •์˜ํ•˜๊ณ  god๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ENV / cli๋กœ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. N์ด ์œ ํšจํ•œ ๋™์•ˆ N * N ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋Ÿฌํ•œ ํ† ๋ก  ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด ๋ณด์•˜๊ณ  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ YML ํŒŒ์ผ์—์„œ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์™œ ๊ทธ๋ ‡๊ฒŒํ•ด์„œ๋Š” ์•ˆ๋˜๋Š”์ง€๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋‹จ ํ•˜๋‚˜์˜ ์ฝ”๋ฉ˜ํŠธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋…ผ์˜๋Š” ๋จผ ๊ธธ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค.

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

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

services:
  my_service:
    container_name: {project_name}_{service_name}_{instance_number} # default value

์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด

services:
  my_service:
    container_name: fixedprojectname_{service_name}_{instance_number}

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

๋ฟก๋ฟก

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

services:
  my_service:
    container_name: {project_name}_{service_name}_{instance_number} # default value

์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด

services:
  my_service:
    container_name: fixedprojectname_{service_name}_{instance_number}

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

๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์„ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์ด ์ถฉ๋Œ ๋ฌธ์ œ๋ฅผ ๊ณ ์น  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ, COMPOSE_PROJECT_NAME ๋ณ€์ˆ˜๋ฅผ .env ํŒŒ์ผ์—์„œ ๊ณ ์œ  ํ•œ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์ €๋Š” ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์†”๋ฃจ์…˜์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ํ’€ ์š”์ฒญ์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ์•Œ๊ฒŒ๋˜๋ฉด ์ˆ˜์ • ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ "๊ฑฐ๋ถ€ ๋จ"์ด์™ธ์˜ ํ”ผ๋“œ๋ฐฑ์€ ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/docker/compose/issues/745#issuecomment -345054893
https://github.com/docker/compose/issues/745#issuecomment -346487757

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ ์ฃผ์„์„ ์ฝ๋Š” ๊ฒƒ์กฐ์ฐจ ์ธ์ •ํ•ด์•ผํ•œ๋‹ค. ๋‚˜๋Š” ์™œ ๋‹จ์ง€ yaml ํŒŒ์ผ์— project_name์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”์ง€ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค. docker-compose.yaml ํŒŒ์ผ์„ ๋œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŒ๋“ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ yaml ํŒŒ์ผ์— ์ด๋ฆ„์„ ๋„ฃ์ง€ ๋ง์•„์•ผํ•˜์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š”, ๋‹ค๋ฅธ ๋Œ“๊ธ€์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ฝ์œผ๋ ค๊ณ  ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์˜ณ์€ ๋‚ด์šฉ์„ ์ฝ๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋‚ด์šฉ์„ ์–ป๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋Š” ์ฐธ์กฐ ์™ธ์—๋„ ์ฐธ์กฐ์˜ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜๋Š” ์งง์€ ๊ด‘๊ณ ๋ฌธ์„ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€๋ณด๊ณ ์žˆ๋Š” ์šฐ๋ ค ์‚ฌํ•ญ์„ ์š”์•ฝ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ช…ํ™•ํžˆํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ํ•ด๊ฒฐํ•ด์•ผ ํ•  ์šฐ๋ ค์— ๋Œ€ํ•ด ๋™์˜ ํ•  ์ˆ˜์žˆ์„ ๋•Œ๊นŒ์ง€ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ๋ณด๋ฅ˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๊นŒ?

(4) ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ (๊ฐ’์˜ ์šฐ์„  ์ˆœ์œ„ / ์ˆœ์„œ)

(1) ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ YML ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•˜๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ•˜๋‚˜์˜ YML ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ฑฐ๋‚˜ ์ ์–ด๋„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋œ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๊ตฌ์„ฑ์„ ๊ธฐ๋ณธ ๋ฐ ํŒŒ์ผ๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์ƒ์†ํ•˜๋Š” ๊ณต์‹์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค-https: //docs.docker.com/compose/extends/. ๊ธฐ๋ณธ ๊ตฌ์„ฑ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ €์—๊ฒŒ ์ œ๊ฐ€ ์ฐพ๊ณ ์žˆ๋Š” ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ํ”„๋กœ์ ํŠธ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋กœ์ปฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค (๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๋“ฑ).

ํ•ด๊ฒฐ์ฑ…์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๊ฒฝ๋กœ ์ˆœํšŒ๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

my-project ์™€ ๊ฐ™์ด yaml ํŒŒ์ผ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ๋ช…์‹œ ์ ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ์˜ ๋‹จ์ผ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๊ฑฐ๋‚˜ docker ํด๋”์— ๋ชจ๋“  ๋„์ปค ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ.

.
โ”œโ”€โ”€ project_a
โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name: my-project)
โ”œโ”€โ”€ project_b
โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name: some-other-project)

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋™์ผํ•œ ํ”„๋กœ์ ํŠธ์˜ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ๋„์›€์ด๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฝ๋กœ ํƒ์ƒ‰์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

project_name: ../(*) ๊ทธ๋ž˜์„œ ๊ฐ™์€ ์˜ˆ์—์„œ

.
โ”œโ”€โ”€ project_a
โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name=project_a)
โ”œโ”€โ”€ project_b
โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name=project_b)
โ”œโ”€โ”€ project_b_copy
โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name=project_b_copy)

์œ ์‚ฌํ•˜๊ฒŒ project_name: ../(../*)

.
โ”œโ”€โ”€ dev
โ”‚   โ”œโ”€โ”€ project_a
โ”‚   โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name=dev_project_a)
โ”œโ”€โ”€ test
โ”‚   โ”œโ”€โ”€ project_a
โ”‚   โ”‚   โ”œโ”€โ”€ docker
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ docker-compose.yml (project_name=test_project_a)

์ˆœํšŒ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‚ด ์—„์ง€ ์†๊ฐ€๋ฝ๋ณด๋‹ค ์ข€ ๋” ์‹ฌ์ธต์ ์œผ๋กœ ์ƒ๊ฐํ•ด์•ผํ•˜์ง€๋งŒ ์ ์–ด๋„ ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜์žˆ๋Š” ์œ ์—ฐ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜ ๋†๋‹ด์œผ๋กœ : ๋‚ด docker-compose.yml์—์„œ ๊ณ ์ • ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์„ ๋งŒ๋“  ๋‹ค์Œ project_name: name-of-the-file-named-like-the-name-i-want ?

ํ˜„์žฌ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— docker-compose ํŒŒ์ผ์ด๋กœ๋“œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. dc-work.yml , dc-server.yml ๋“ฑ๊ณผ ๊ฐ™์ด ๋ชจ๋‘ ์„œ๋กœ ๋‹ค๋ฅธ ๊ด€๋ จ์—†๋Š” ์„œ๋น„์Šค๋ฅผ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

docker-compose up dc-A.yml ๋ฅผ ์‹คํ–‰ ํ•œ ๋‹ค์Œ docker-compose up dc-B.yml ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Docker๋Š” ์‹คํ–‰์ค‘์ธ ๊ณ ์•„ ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๋‚˜์—๊ฒŒ ์ž”์†Œ๋ฆฌ๋ฅผํ•ฉ๋‹ˆ๋‹ค (๋ฌผ๋ก  ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €์ฃผ๋ฐ›์€ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค).

์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์ •๋ง๋กœ ์—†์Šต๋‹ˆ๊นŒ? ๊ฐ dc-A|B|C|etc.yml ํŒŒ์ผ์„ ์ž์ฒด ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ ํ•œ ๋‹ค์Œ ๊ฐ ํŒŒ์ผ์„ ํƒ์ƒ‰ํ•˜์—ฌ ๋ชจ๋“  ์„œ๋น„์Šค๋ฅผ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„ ๋‚ญ๋น„์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋ญ”๊ฐ€ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ช…ํ™•ํ•˜๊ณ  ์ง์ ‘์ ์ธ ์†”๋ฃจ์…˜์€ @ cr7pt0gr4ph7์ด https://github.com/docker/compose/issues/745#issuecomment -182296139์—์„œ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ฐฌ์„ฑํ‘œ๋ฅผ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์šฐ๋ ค ์‚ฌํ•ญ์ด ๋…ผ์˜์—์„œ ๋‹ค๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์˜ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?

๋˜ํ•œ ๋ชจ๋“  ๋„์ปค ๊ด€๋ จ ํ•ญ๋ชฉ์ด ํฌํ•จ ๋œ .docker ํด๋”๊ฐ€์žˆ๋Š” ๊ณ ์ • ๋œ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋งŽ์€ .docker ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์ž‘์—… ์ค‘์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค ...ํ•˜์ง€๋งŒ์ด ์ž‘์€ ๊ฒƒ์ด ๊ณ„์† ๋ฐฉํ•ด๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.-> ๋˜ํ•œ PHPStorm ๋“ฑ์—๋Š” -p /-project-dir ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ๋ฏฟ์œผ์‹ญ์‹œ์˜ค. ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์žŠํ˜€ ์งˆ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ .env๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด docker-compose ํŒŒ์ผ์— ์†์„ฑ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

๊ฐœ๋ฐœ์ž ์—ฌ๋Ÿฌ๋ถ„, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ์š”์•ฝ์ž…๋‹ˆ๋‹ค.
https://github.com/docker/compose/issues/745#issuecomment -182296139

๋งŽ์€ ๋…ผ์˜๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋…ผ์˜ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์ž๋Š” ์Šค๋ ˆ๋“œ (๋ณต์ˆ˜)๋ฅผ ์ฝ๊ณ  ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์ด๋‹ค : https://github.com/docker/compose/issues/745#issuecomment -248644429

๋‚˜์—๊ฒŒ๋Š” ์—ฌ์ „ํžˆ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค : # 745 (์ฝ”๋ฉ˜ํŠธ)

์˜ˆ, ๊ธฐ์กด์— ์žˆ์ง€๋งŒ ์ข‹์ง€ ์•Š์€ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜๊ฒฌ์€ ํˆฌํ‘œ์—์„œ ์ œ์™ธ๋˜์—ˆ์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฌธ์ œ๋ฅผ ๋ถ„๋ช…ํžˆ ๋ฐํ˜”์Šต๋‹ˆ๋‹ค. ๋งํฌ ๋œ ๋Œ“๊ธ€์€ ์ด๋Ÿฌํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์ œ๊ธฐ ๋œ ๋Œ€๋ถ€๋ถ„์˜ ํ•ฉ๋ฒ•์  ์ธ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Tbh, ๊ทธ๊ฒƒ์€ ์ผ์ข…์˜ ๋…ผ์Ÿ ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด docker-compose ์œ ํ˜• ๊ธฐ๋Šฅ์„ ์œ„ํ•ด Kubernetes๋กœ ์ด๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„ ์žฅํ™ฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘๋™ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰ ์—…์ฒด์—์„œ ์ž˜ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/745#issuecomment -182296139์— ์„ค๋ช… ๋œ๋Œ€๋กœ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์„ค์ •ํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋ช…๋ น ์ค„ ์ธ์ˆ˜.
  2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (.env ํŒŒ์ผ)
  3. ํŒŒ์ผ ์ž‘์„ฑ์—์„œ ์ง์ ‘
  4. ํด๋” ๊ฒฝ๋กœ

์ด์˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด container_name ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋น„์Šทํ•˜์ง€๋งŒ docker-compose.yml ์ผ๋ถ€๊ฐ€๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ด์‹์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ์„ค์ •๊ณผ ๋™์ผํ•œ ๊ตฌ์„ฑ์„ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์›Œํฌ ํ”Œ๋กœ๊ฐ€ ํด๋” ๊ฒฝ๋กœ์— ์˜์กดํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋“  project-name ๊ฐ€ ๊ตฌ์„ฑ์— ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์„ฑ ํŒŒ์ผ, ํ…œํ”Œ๋ฆฟ ๋“ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์Šคํƒ์„ ๋ฎ์–ด ์“ฐ๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฃ„์†ก ํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ด๊ฒƒ์€ wontfix .. (ํŽธ์ง‘)๋กœ

๋ฟก๋ฟก

์›Œํฌ ํ”Œ๋กœ๊ฐ€ ํด๋” ๊ฒฝ๋กœ์— ์˜์กดํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋“  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๊ตฌ์„ฑ์— ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์„ฑ ํŒŒ์ผ, ํ…œํ”Œ๋ฆฟ ๋“ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์Šคํƒ์„ ๋ฎ์–ด ์“ฐ๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

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

  1. compose ํŒŒ์ผ์ด git repo์—์„œ ๋‹ค์šด๋กœ๋“œ๋˜๋ฉด ๋‹ค์Œ ์ปค๋ฐ‹์—์„œ repo ์†Œ์œ ์ž๊ฐ€ ํŒŒ์ผ์„ ๋‹ค๋ฅธ ํ•˜์œ„ ํด๋”๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ํด๋” ์ด๋ฆ„์„ ๋ณ€๊ฒฝ ํ–ˆ์Šต๋‹ˆ๊นŒ? ํŒŒ์ผ์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ณ  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์›Œํฌ ํ”Œ๋กœ์— ๋Œ€ํ•œ ์˜ํ–ฅ์€ ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  2. ํŠน์ • ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (.env ํŒŒ์ผ)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Docker compose๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋ช…๋ น ์ค„ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์„ฑ ํŒŒ์ผ (์–ด๋–ค ์ด์œ ๋กœ ์ถ”๊ฐ€ ๋œ ๊ฒฝ์šฐ).

์ด๊ฒƒ์„ wontfix๋กœ ๋‹ซ๋Š” ๊ฒƒ์€ ์œ„์˜ ๋‚ด์šฉ์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•˜์ง€ ์•Š๊ณ ๋Š”๋ณ„๋กœ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์›Œํฌ ํ”Œ๋กœ (๋˜๋Š” ์ „์ฒด ํŒ€์˜ ์›Œํฌ ํ”Œ๋กœ)๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•˜๋Š” ํด๋”์˜ ์ด๋ฆ„์— ์ข…์†๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

.env ํŒŒ์ผ ์†”๋ฃจ์…˜์˜ ์ฃผ์š” ๋ฌธ์ œ์ ์€์ด ํŒŒ์ผ์ด ๋ช…๋ น ์‹คํ–‰์˜ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด docker-compose๋Š” ์ž‘์„ฑ ํŒŒ์ผ์„ ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ (A) ๋™์ผํ•œ ์ด๋ฆ„์˜ ํด๋”๋กœ ์ฝ”๋“œ๋ฅผ ์ฒดํฌ ์•„์›ƒํ•˜๊ฑฐ๋‚˜ (์ฝ”๋“œ ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ์—์žˆ๋Š” docker-compose.yml ํŒŒ์ผ์„ ๊ฐ€์ •) (B)์—์„œ docker-compose ๋ช…๋ น ๋งŒ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ ํด๋”๊ฐ€ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ถฉ๋Œํ•˜๋Š” ์Šคํƒ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ (C) ์Šคํƒ ์ด๋ฆ„์ด ๋‹ค๋ฅด๋ฉฐ ๋ชจ๋“  ๋ฌธ์„œ ๋ฐ ์Šคํฌ๋ฆฝํŠธ๋Š” replace stack name here ๋ผ๊ณ  ๋งํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

(C)๊ฐ€ docker๊ฐ€ ๊ถŒ์žฅํ•˜๋Š” 'ํœด๋Œ€์šฉ'์†”๋ฃจ์…˜์œผ๋กœ ์ œ์•ˆํ•˜๋Š” ๊ฒฝ์šฐ docker-compose CLI๋Š” docker CLI ๋ช…๋ น์œผ๋กœ ๊ธฐ๋Šฅ์ด ์™„์ „ํ•ด์•ผํ•˜๋ฉฐ, ๊ทธ๋ž˜๋„ ์—ฌ์ „ํžˆ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์›Œํฌ ํ”Œ๋กœ๊ฐ€ ํด๋” ๊ฒฝ๋กœ์— ์˜์กดํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ๋“  ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด ๊ตฌ์„ฑ์— ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ ๋ณ‘ํ•ฉ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์„ฑ ํŒŒ์ผ, ํ…œํ”Œ๋ฆฟ ๋“ฑ์„ ํ†ตํ•ด ๊ธฐ์กด ์Šคํƒ์„ ๋ฎ์–ด ์“ฐ๋Š” ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด docker-compose ํŒŒ์ผ์— ์ถ”๊ฐ€๋˜๋ฉด ๋ถ„๋ช…ํžˆ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๋„์ปค ์ž‘์„ฑ ํŒŒ์ผ์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์ค„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ). ์Šฌํ”„๊ฒŒ๋„ ์ง€๊ธˆ์€ ์ฒดํฌ ์•„์›ƒ ํ•œ ํด๋”์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์กฐ์ฐจ๋„ (git์—์„œ ์ถ”์  ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ) ์‹œ์Šคํ…œ์ด ์†์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

@ dc-pm์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค. "Given Kubernetes๋Š” ์ด์ œ Docker๋ฅผ์œ„ํ•œ ์‚ฌ์‹ค์ƒ์˜ ๋ฐฐํฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค."

์ด์ œ ๋” ์ด์ƒ docker-compose ํŒŒ์ผ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒ์‚ฐ์„ ๋ณด์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด์„œ๋Š” ์ถฉ๋ถ„ํ•œ ์ด์ต์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฟ  ๋ฒ„๋„ค ํ‹ฐ์Šค๋„ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰ ์—…์ฒด์—์„œ ๋„๋ฆฌ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค ๋‚ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์กฐ์ฐจ ๋งค์ผ ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ ๋กญ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค.

@ dc-pm ์ž‘์„ฑ :

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด 2020 ๋…„์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฏฟ์„ ์ˆ˜ ์—†์œผ๋ฉฐ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ์ด ๊ฑฐ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •๋˜์ง€ ์•Š์•˜์„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ ๊ทน์ ์œผ๋กœ ์ˆ˜์ •์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

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

์นœ์ ˆํ•œ ์•Œ๋ฆผ ...
์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์ž๋Š” "์ง์› / ๋Œ€ํ•™"์ด ์•„๋‹ˆ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„ ๋ฌด๋ฃŒ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.
๋ถ„๋ช…ํžˆ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์„๋‚ด์–ด ํ•ด๊ฒฐ์ฑ…์„ ์กฐ์‚ฌํ•˜๊ณ  PR์„ ํ‘ธ์‹œํ•˜์‹ญ์‹œ์˜ค.

๋น„๋‚œ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค.

https://github.com/docker/code-of-conduct/blob/master/code-of-conduct-EN.md

๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋Œ€ ํ•  ๋•Œ ๋ณ€ํ™”๋ฅผ ๋ฐ€์–ด ๋ถ™์ด๋Š” ๊ฒƒ์€ ๊ฝค ์–ด๋ ต์Šต๋‹ˆ๋‹ค ...

ํ† ์š”์ผ, 2020 ๋…„ 3 ์›” 14 ์ผ 03:19, Antoine Gravelot [email protected]
์ผ๋‹ค :

์นœ์ ˆํ•œ ์•Œ๋ฆผ ...
๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์ž๋Š” "์ง์› / ๋Œ€ํ•™"์ด ์•„๋‹™๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๋ฌด๋ฃŒ๋กœ ์ผํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ถ„๋ช…ํžˆ ๋ฌธ์ œ๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์„๋‚ด์–ด ํ•ด๊ฒฐ์ฑ…์„ ์กฐ์‚ฌํ•˜์‹ญ์‹œ์˜ค.
PR์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

๋น„๋‚œ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค.

https://github.com/docker/code-of-conduct/blob/master/code-of-conduct-EN.md

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/compose/issues/745#issuecomment-598991880 ๋˜๋Š”
๊ตฌ๋… ์ทจ์†Œ
https://github.com/notifications/unsubscribe-auth/ABAXP2DRD7H4YI7KQ7B2URLRHLLQ5ANCNFSM4AZMCNWA
.

@agravelot ๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€ PR์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด์ƒ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ํ† ๋ก  ์†Œ์œ ์ž๋Š”์ด ๊ธฐ๋Šฅ์„ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ธฐ๋Œ€๋ฅผ ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋”ฉ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@agravelot ์ง€์—ฐ์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š” ์—ฌ๊ธฐ์— ๊ธฐ์—ฌํ•˜๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ์žฌ๋Šฅ์žˆ๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์„ ๋ฌด๋ก€ํ•˜๊ฒŒ ์—ฌ๊ธฐ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋…ธ๋ ฅ ๋ถ€์กฑ์„ ๋น„๋‚œํ•˜๋Š” ๊ฒƒ๋„ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ด๋ฏธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ pull ์š”์ฒญ์ด ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์ƒํ™ฉ์— ๋„์›€์ด๋œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ž‘์„ฑ์„ ๋งค์šฐ ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋” ๊ฑด์„ค์ ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด๋ฏธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ pull ์š”์ฒญ์ด ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์ƒํ™ฉ์— ๋„์›€์ด๋œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ž‘์„ฑ์„ ๋งค์šฐ ๊ธฐ์˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๊ฐœ๋ฐœ์ž๋Š” ๊ฒ€ํ† ๋ฅผ ๊ณ„์†ํ•˜๊ฑฐ๋‚˜ "์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ"์œผ๋กœ ์ข…๋ฃŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋…ผ์Ÿ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ). ๊ณต์‹์ ์ธ ํ”ผ๋“œ๋ฐฑ์—†์ด ๋ช‡ ๋…„ ๋™์•ˆ ๊ณต๊ฐœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ์—ฌ์ž์˜ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๊ฐ€์žฅ ๋„“์€ ์˜๋ฏธ์—์„œ ). ์ด๊ฒƒ๋„ ๋ฌด๋ก€ํ•ฉ๋‹ˆ๋‹ค, IMO.

์—ฌ๋Ÿฌ๋ถ„, ์ €๋Š” ์‚ฌ์šฉ์ž๋กœ์„œ ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 2 ๊ฐœ์˜ docker-compose.yml ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ ํ•˜๋‚˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์šฉ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ”„๋กœ๋•์…˜ ์šฉ์ž…๋‹ˆ๋‹ค. ๊ฐ™์€ ํด๋”์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค "๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค"๋ผ๋Š” ์ด๋ฆ„์ด ๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‘ ์„œ๋น„์Šค๋ฅผ ๋™์‹œ์— ๋ฐฐํฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ด์•ผ๊ธฐํ•˜๊ณ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆํ™”์ด๊ณ  ์›ํ•˜๋Š”๋งŒํผ ํ™•์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "container_name"๊ฐ’์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

macbook@fuck-fuck autocat-server % docker-compose -f ./compose-dev.yml up -d database
Creating network "autocat-server_autocat-dev" with the default driver
Creating database-dev ... done
macbook@fuck-fuck autocat-server % docker-compose -f ./compose-prod.yml up -d database
Creating network "autocat-server_autocat-prod" with the default driver
Recreating database-dev ... done

"prod"ํ”„๋กœ์ ํŠธ์—์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์–ธ๊ธ‰ํ•˜๋ฉด์„œ "Recreating database-dev"๊ฐ€ ์–ด๋–ป๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค. ์‹ค์ œ๋กœ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ›„์ž๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.

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

macbook@fuck-fuck autocat-server % COMPOSE_PROJECT_NAME=autocat-prod docker-compose -f ./compose-prod.yml up -d database
Creating network "autocat-prod_autocat-prod" with the default driver
Creating database-prod ... done
macbook@fuck-fuck autocat-server % COMPOSE_PROJECT_NAME=autocat-dev docker-compose -f ./compose-dev.yml up -d database
Creating network "autocat-dev_autocat-dev" with the default driver
Creating database-dev ... done

๋‹จ์ผ ๋ช…๋ น ๋ฐฐํฌ์— ๋„ˆ๋ฌด๋‚˜๋„ ๋งŽ์€ ๋†๋‹ด์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์— .yml์€์ด ์ปจํ…์ŠคํŠธ์—์„œ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ธฐ์— ์ข‹์€ ๊ณณ์ž…๋‹ˆ๋‹ค.

๋˜๋Š” "database-dev"๋ฐ "database-prod"๋ผ๋Š” ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์ง€์ •ํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋‹จ์ผ ํ”„๋กœ์ ํŠธ์— ๋ฐฐ์น˜ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ docker-compose.yml์—์„œ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „์— ์ธ์Šคํ„ด์Šคํ™” ๋œ ์„œ๋น„์Šค๊ฐ€ ๊ณ ์•„๊ฐ€๋œ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

macbook@fuck-fuck autocat-server % docker-compose -f ./compose-prod.yml up -d database-prod                
Creating network "autocat-server_autocat-prod" with the default driver
Creating database-prod ... done
macbook@fuck-fuck autocat-server % docker-compose -f ./compose-dev.yml up -d database    
WARNING: Found orphan containers (database-prod) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
Creating database-dev ... done

์ด๊ฑด ๋ง๋„ ์•ˆ ๋ผ์š”, ์™œ ์ด๋ ‡๊ฒŒ๋˜์–ด์•ผ ํ•˜์ฃ ? ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

EDIT1 : @ dc-pm @CharlieReitzel ๋ฌด์Šจ ์ƒ๊ฐ? ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์˜๊ฒฌ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? :)
EDIT2 : ๋‘ ํŒŒ์ผ์„ ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์™€ ์งœ์ž”์— ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

sooo?

๊ด€๋ฆฌ์ž, ์—ฌ๊ธฐ ๋ˆ„๊ตฌ ์—†๋‚˜์š”?
๊ฐœ๋ฐœ์ž๋“ค์€ 6 ๋…„ ๋™์•ˆ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค!

์•ˆ๋…•ํ•˜์„ธ์š”! compose-spec์— ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ compose ํŒŒ์ผ์— ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹compose ์Šคํ‚ค๋งˆ์— ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์†์„ฑ์ด compose ์‚ฌ์–‘์— ์ถ”๊ฐ€๋˜๋ฉด docker-compose์—์„œ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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