Moby: ๋ฐฐ๊ด€์ด ์•„๋‹Œ ๊ฒฝ๋กœ๋กœ dockerfile์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2013๋…„ 10์›” 08์ผ  ยท  160์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moby/moby

docker build -t my/thing -f my-dockerfile . ๋ฅผ ์ง€์ •ํ•˜์—ฌ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ dockerfile์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

docker build -f Dockerfile.dev . ์ž…๋‹ˆ๊นŒ? ํŽธ์ง‘: ๋„ค

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

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์กฐ์‚ฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค

์‚ฌ์šฉ๋ฒ•: ๋„์ปค ๋นŒ๋“œ [์˜ต์…˜] ๊ฒฝ๋กœ | URL | -

๊ทธ๋ž˜์„œ ๋‹น์‹ ์ด ์‹คํ–‰ํ•˜๋ฉด

๋„์ปค ๋นŒ๋“œ -t my/thing my-dockerfile

tar ํŒŒ์ผ์ด ๋„ˆ๋ฌด ์งง๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

'PATH' ์˜ต์…˜์ด ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์œผ๋ฏ€๋กœ ์ผ๋ถ€ ๋ ˆ๊ฑฐ์‹œ ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ž˜์„œ - PATH๊ฐ€ ํŒŒ์ผ์ด๊ณ  Tarfile์ด ์•„๋‹Œ์ง€ ๊ฐ์ง€ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๋Š” Dockerfile ์„ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉฐ, ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์ „์ฒด ์ปจํ…์ŠคํŠธ๋„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น PATH๋Š” ํŠน์ • Dockerfile์ด ์•„๋‹Œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

์˜ค, ๊ทธ๋Ÿฐ ๋‹ค์Œ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Tars๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฉ‹์ง€๊ตฐ์š”!

isafile์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ tar๋กœ ๋งŒ๋“  ๋‹ค์Œ ํ•ด๋‹น tarball์˜ Dockerfile์„ ์ง€์ •๋œ ํŒŒ์ผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋˜๋Š” -f๋ฅผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ - Dockerfile ์ •์˜๊ฐ€ ํŽ˜์ด๋กœ๋“œ์™€ ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋„๋ก ํ—ˆ์šฉ

์ด์ œ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•ด ๋ณด๊ณ  ๋‚˜์—๊ฒŒ ๋งž๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์•„๋ฌด ๊ฒƒ๋„ tarํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค - PATH๋Š” Dockerfile ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ๊ทธ PATH๋กœ ํ•˜๋Š” ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค - ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด, '์ปจํ…์ŠคํŠธ'๋Š” ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ฌด๊ฒŒ๋ฅผ ์ธก์ •ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

(๊ทธ๋ž˜, ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์—ฌ์ „ํžˆ go๋ฅผ ๋ชจ๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์ง€๋‚œ ๋ช‡ ๋ถ„ ๋™์•ˆ๋งŒ ์ฝ”๋“œ๋ฅผ ์ฝ์—ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ADD๋ฅผ ํ†ตํ•ด ์ฐธ์กฐ๋˜๋Š” ๋ชจ๋“  ๋น„์›๊ฒฉ ํŒŒ์ผ๋„ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ๋ชฌ์ด ํ•ด๋‹น ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค:

docker build -t my/thing fooproj
docker build -t my/thing -f debug-dockerfile fooproj

2108(Dockerfiles์— include ์ง€์‹œ๋ฌธ ์ถ”๊ฐ€) ํฅ๋ฏธ๋กœ์šด ์ฃผ๋ฆ„ ์ถ”๊ฐ€

ํฌํ•จ์ด ์ง€์ •๋œ dockerfile ๋˜๋Š” PATH์— ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ.

์žฌ๋ฏธ์žˆ๋Š”:

docker build -t my/thing fooproj
docker build -t my/thing -f ../../debug-dockerfile fooproj
docker build -t my/thing -f /opt/someproject/dockerfiles/debug-dockerfile fooproj

์ถ”๊ฐ€ ๋ณด๋„ˆ์Šค๋กœ - ์•„์ง CmdBuild ํ…Œ์ŠคํŠธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋จผ์ € ๋ฌด์—‡์„ ๋ฐฐ์šธ์ง€ ์ถ”์ธกํ•ด ๋ณด์„ธ์š”. :)

@SvenDowideit ์ด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ค๋Š˜ ํ•ดํ‚นํ• ๊นŒ ์ƒ๊ฐ์ค‘์ด์—ˆ๋Š”๋ฐ

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

๋‚ด๊ฐ€ ํ•  ๊ฒƒ์ด๋‹ค :)

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

๊ทธ๋ž˜์„œ: ๋‚˜์—๊ฒŒ์„œ +1!

์ด๊ฒƒ์€ #1618๊ณผ ๋™์ผํ•œ ์ตœ์ข… ๋ชฉํ‘œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋น„๋ก ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์žˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ). ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ์—ฌ๋Ÿฌ Dockerfile ๋ฐ ํฌํ•จ ์‹œ์Šคํ…œ๊ณผ ๋น„๊ตํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ TAG ๋ช…๋ น์ด ์žˆ๋Š” ๋‹จ์ผ Dockerfile์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ?

Dockerfile์„ ํŒŒ์ดํ”„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒฝ๋กœ๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. #1618์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์‹ถ์ง€๋งŒ ์ด๊ฒƒ์ด ๋” ๋งŽ์€ ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค : https://github.com/peterbraden/docker/compare/2112-specify-dockerfile?expand=1

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

๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์•„์ด๋””์–ด

๋„์ปค ๋นŒ๋“œ ๋„์ปค ํŒŒ์ผ


์ปจํ…์ŠคํŠธ ์—…๋กœ๋“œ ์ค‘

2013/12/11 21:52:32 ์˜ค๋ฅ˜: ๋นŒ๋“œ ์˜ค๋ฅ˜: Tarball์ด ๋„ˆ๋ฌด ์งง์Šต๋‹ˆ๋‹ค.

@bscott ๋Œ€์‹  docker build . ๋ฅผ) ์‹œ๋„ํ•˜์‹ญ์‹œ์˜ค. ๋นŒ๋“œ๋Š” ํŒŒ์ผ์ด ์•„๋‹Œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด๊ฒƒ์ด "๋นŒ๋“œ ์ปจํ…์ŠคํŠธ"์ž…๋‹ˆ๋‹ค. :)

์ž‘์—… Thx!, ๋‹ค๋ฅธ Docker ํŒŒ์ผ ์ค‘์—์„œ ์„ ํƒํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ์„œ +1.

๋‚ด ์†Œ์Šค์—์„œ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ด๋ฏธ์ง€๋Š” ๋™์ผํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ๋ณ„๋„์˜ ๊ด€์‹ฌ์‚ฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ Dockerfile์„ ์˜ค์—ผ์‹œํ‚ค๋Š” ๊ฒƒ(#1618์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ)์€ ์—‰๋šฑํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด ์†Œ์Šค์— 3๊ฐœ์˜ ๊ฐœ๋ณ„ <image-name>.docker ํŒŒ์ผ์„ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊นจ๋—ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๋Ÿฐ ๊ฒƒ์ด ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ฒ˜์Œ์— ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ./Dockerfile ๊ฐ€ ๊ฝค ๋งŽ์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ์กฐ์‚ฌ ํ›„์— ์ตœ์†Œํ•œ ๋‹ค์Œ ํŒŒ์ผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

api/client.go
archive/archive.go
buildfile.go
server.go

client ์šฉ๋„ archive ํƒ€๋ฅด build context ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ณด๋‚ด๋Š” server ํ›„ ์‚ฌ์šฉํ•˜๋Š” archive ํ’‰๋‹ˆ์— build context ๋ฐ”์ดํŠธ๋ฅผ buildfile .

๊ฐ€์žฅ ์‰ฌ์šด ๊ตฌํ˜„์€ client ๋ฐ archive ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์ด ์˜ต์…˜์„ ํ†ตํ•ด ์ง€์ •๋œ ํŒŒ์ผ๋กœ tar์˜ ./Dockerfile ๋ฅผ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋” ์กฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@thedeeno ์ •๋ง ๋นจ๋ฆฌ ์‚ดํŽด๋ณด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„

๋‚˜์—๊ฒŒ์„œ +1!

๋‚˜๋Š” # 1618๊ณผ # 2112๋ฅผ ๋ชจ๋‘ ๋”ฐ๋ผ ์™”์œผ๋ฉฐ ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

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

#2745์˜ ๋Œ€์•ˆ์œผ๋กœ +1.

+1

Dockerfile ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ๊ณ  ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ฐ•์ œ๋กœ Dockerfile์˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋˜๋ฉฐ ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋กœ๋„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์— ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ ๋ฐ ๋ฐฐํฌ ๋„๊ตฌ๋กœ์„œ์˜ Docker์˜ ์œ ์šฉ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

+1
๋‚˜๋Š” ๊ทธ ๋ณ€ํ™”์— ๊ฐ์‚ฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

+1
์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

5033์€ ์ด ๊ธฐ๋Šฅ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. cc/@crosbymichael

@shykes ์ด ๋ณ€ํ™”์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์„ธ์š”? ๋‚˜๋Š” ๋‹น์‹ ์ด ๋™์˜ํ–ˆ๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฃผ์ €ํ•œ๋‹ค.

ํ•œํŽธ์œผ๋กœ ๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ž์‹ ์˜ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉ์ž ์ •์˜ํ•˜๋Š” ๋Šฅ๋ ฅ์„ ์ œํ•œํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— _run -v /host:/container_ ๋ฐ _expose 80:80_๊ณผ ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚ ๊นŒ ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ž์‹ ์ด ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋Š” 1%๋Š” ๋ฉ‹์ง„ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ณ  ๋‚˜๋จธ์ง€ 99%๋Š” ์ž์‹ ์˜ ๋ฐœ์— ์ด์„ ์  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ฐ˜ ๋ณผ๋ฅจ ๋Œ€์‹  ํ˜ธ์ŠคํŠธ ํƒ‘์žฌ ๋ณผ๋ฅจ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ƒˆ๋กœ์šด Docker ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ˆ๋ฌด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ •๋‹นํ•œ ์ด์œ  ์—†์ด ํ˜ธ์ŠคํŠธ๋‹น ํ•œ ๋ฒˆ ์ด์ƒ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฒŒ์‹œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— _expose 80:80_ ๊ตฌ๋ฌธ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ œ ์งˆ๋ฌธ์€: _docker build๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๋Š” ๋งŽ์€ ์†Œ์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

_, ์ด์ œ 'docker build -f ./path/to/my/dockerfile'์„ ์‹คํ–‰ํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ผ๋Š” README๋ฅผ ์ฝ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ Dockerfile์„ ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ? ์•„๋‹ˆ๋ฉด ๋‹น์‹ ์ด ์ดˆ๋ณด์ž์ด๊ณ  ๋น„๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์—์„œ ํ•ด๋‹น ๊ธฐ์ˆ ์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@shykes ์ด Dockerfile ์ œํ•œ ๋•Œ๋ฌธ์— _because_ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

  1. ์•„ํ‹ฐํŒฉํŠธ(์ด ๊ฒฝ์šฐ JAR ํŒŒ์ผ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” Docker ๊ธฐ๋ฐ˜ ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ํ™˜๊ฒฝ์€ ์‹คํ–‰ ํ™˜๊ฒฝ(๋‹ค๋ฅธ ์ข…์†์„ฑ, ๋” ํฐ ์ด๋ฏธ์ง€ ๋“ฑ)๊ณผ ๋‹ค๋ฅด๋ฏ€๋กœ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ๋Ÿฐํƒ€์ž„์œผ๋กœ ์ƒ์†ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Dockerfile ๋นŒ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. JAR ์ฃผ๋ณ€์—์„œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.๋”ฐ๋ผ์„œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰ํ•˜๊ณ  JAR์„ ์ƒ์„ฑํ•˜๋Š” ๋ณ„๋„์˜ Dockerfile.build ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ Dockerfile์„ ์ง€์ •ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— scripts/build docker build < Dockerfile.build ๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ w/ docker run -v ... ๋ฅผ ๋งˆ์šดํŠธํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” scripts/build ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  docker build -t foobar/builder -f Dockerfile.build , docker run foobar/builder , docker build -t foobar/runtime , docker run foobar/runtime ํ•˜๊ณ  ๋‘ Dockerfile์—์„œ ๋ชจ๋‘ ADD ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  2. ONBUILD ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด FROM ๋ช…๋ น์–ด์— ๋ฃจํŠธ Dockerfile์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ๋ฅผ ๊ทธ๋“ค์˜ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ. ์ด๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ๊ตฌ์„ฑ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ Dockerfile์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ์šฉํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ ๋‚˜๋จธ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋‹ค๋ฅธ ๋ณ€ํ˜•์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ "Dockerfile ์œ„์น˜/์ด๋ฆ„"์—์„œ "๋นŒ๋“œ ์ปจํ…์ŠคํŠธ"์˜ ๊ฐœ๋…์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ๋ฐฉ๋ฒ•์€ ๋งŽ์ด ์žˆ์ง€๋งŒ ๋‚˜์—๊ฒŒ๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@cap10morgan ํ˜น์‹œ ๊ท€ํ•˜์˜ ์˜ˆ 1์ด๋‚˜ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋†€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@shykes https://github.com/shykes ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ด์‹์„ฑ์˜ ๊ฟˆ์ด ์•„๋‹™๋‹ˆ๊นŒ?
์ด๋ฏธ์ง€ ์ธ๋ฑ์Šค๋Š” ๋ฌด์—‡์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•œ ์ด์œ 
ํœด๋Œ€์šฉ์œผ๋กœ๋„?

์ผ๋ถ€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—๋Š” ๋ฐ”๋‹๋ผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋„์ปคํŒŒ์ผ. ๋˜ํ•œ ์ปจํ…์ŠคํŠธ๋‹น ํ•˜๋‚˜์˜ Dockerfile์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค(์ด๋Š”
์ด ์š”์ฒญ์€ ์ˆ˜์ •์„ ๋ชฉํ‘œ๋กœ ํ•จ)์ด ๋งค์šฐ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์šฐ๋ฆฌ ํŒ€์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์„ค์ •์—์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ
๋™์ผํ•œ "์ปจํ…์ŠคํŠธ"์˜ ์ด๋ฏธ์ง€. --file ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด
์šฐ๋ฆฌ๊ฐ€ ์ •๋ง๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ - foo.docker ์™€ bar.docker
์šฐ๋ฆฌ์˜ ์ €์žฅ์†Œ ๋ฃจํŠธ์—. ๋Œ€์‹  ๋ณต์‚ฌํ•  bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ปจํ…์ŠคํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์ด๋ฆ„์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด ์ž„์‹œ ์œ„์น˜์— ์ˆ˜๋งŽ์€ ํŒŒ์ผ
๋ช…๋ช…๋œ ๋„์ปค ํŒŒ์ผ์„ Dockerfile ๋งˆ๋ฒ•์ฒ˜๋Ÿผ docker build ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผํ•˜๋‹ค.

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

2014๋…„ 4์›” 7์ผ ์›”์š”์ผ ์˜คํ›„ 4์‹œ 23๋ถ„์— Solomon Hykes [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@cap10morgan https://github.com/cap10morgan ์ง€์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ
๋‚˜๋Š” ๋‹น์‹ ์˜ ์˜ˆ 1, ๋˜๋Š” ๊ทธ๊ฒƒ์„ ๊ทผ์‚ฌํ•˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋†€ ์ˆ˜ ์žˆ๋‹ค
์šฐ๋ฆฌ๊ฐ€ ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHubhttps://github.com/dotcloud/docker/issues/2112#issuecomment -39778691์—์„œ ํ™•์ธํ•˜์„ธ์š”.
.

@shykes ์ด๊ฒƒ์ด '๊ณ ์ •๋˜์ง€ ์•Š์€' ๊ฒƒ์ฒ˜๋Ÿผ

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

์ด ๋ฌธ์ œ์™€ .dockerignore ๋ฌธ์ œ(https://github.com/dotcloud/docker/pull/3452)(๋‚ด ์ „์ฒด .git ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์— ๋ณต์‚ฌ)๋Š” ๋„์ปค๋ฅผ ์‚ฌ์šฉํ•ด ๋ณผ ๋•Œ ์ฒ˜์Œ ๋ถ€๋”ชํžˆ๋Š” ๋‹ค์†Œ ์ค‘์š”ํ•œ ๊ณ ์ถฉ์ž…๋‹ˆ๋‹ค. ์ง€๋‚œ ๋ฉฐ์น  ๋™์•ˆ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์—ˆ๊ณ  ๋‚˜์—๊ฒŒ๋Š” ๋ณ„ ์ƒ๊ฐ์ด ์—†์–ด ๋ณด์ด์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐ˜๋ฐœ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ๋„ ํ•„์š”ํ•˜๋‹ค๋Š” ์ ์—์„œ +1 - ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ธ ๋‹จ์ผ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€์—๋Š” services/base/* ๋ฐ services/fooservice/* ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. services/base/* ๋ฐ services/barservices/* ๋ฐ staticfiles/*๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹ค๋ฅธ ์ด๋ฏธ์ง€.
Docker๊ฐ€ ํ•ด๋‹น ํด๋”๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋” ๊ตฌ์กฐ์—์„œ ์ƒ์œ„์— ์žˆ๋Š” ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— Dockerfile์„ ์„œ๋น„์Šค ํด๋” ์•ˆ์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ Dockerfile์€ ์ด๋ฆ„์ด ๊ฐ™์œผ๋ฏ€๋กœ ๋ฃจํŠธ์— ๋‘˜ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ Dockerfile์„ ์„œ๋น„์Šค ํด๋”์— ๋ฐฐ์น˜ํ•œ ๋‹ค์Œ ์„ ํƒํ•œ Dockerfile์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ถ”๊ฐ€ํ•  ๊ฒฝ๋กœ(๋ชจ๋‘ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋Œ€ํ•ด ์ง€์ •๋จ)๋ฅผ ๊ฒฐ์ •ํ•œ ๋‹ค์Œ ์ƒˆ ํด๋”์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž„์‹œ ํด๋”์—์„œ ์„ ํƒํ•œ Dockerfile์„ ์ƒˆ ํด๋”์˜ ๋ฃจํŠธ์— ๋ณต์‚ฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ "docker build tempfolder"๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ •๋ง ํ•„์š”ํ•œ๊ฐ€์š”?
Dockerfile์ด ์–ด๋””์— ์žˆ๊ณ  ์ปจํ…์ŠคํŠธ๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ณ„๋„๋กœ "๋„์ปค ๋นŒ๋“œ"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด .. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

+1, ์ด ์ œํ•œ ์‚ฌํ•ญ์„ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์€ ํฐ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์™€ ๋ณ„๋„๋กœ Dockerfile ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” -f ํ”Œ๋ž˜๊ทธ์˜ ๊ฒฝ์šฐ +1

Docker๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ์ด์ง€๋งŒ ์ปจํ…์ŠคํŠธ์™€ ํŠน์ • Dockerfile์˜ ๊ธด๋ฐ€ํ•œ ๊ฒฐํ•ฉ์€ ํ™•์‹คํžˆ Docker ํŒ€์„ ์•ฝ๊ฐ„ ์˜ค์—ผ์‹œํ‚ต๋‹ˆ๋‹ค. ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๊ฐ€ ํ•ญ์ƒ '์ปจํ…Œ์ด๋„ˆ/ํ•˜์œ„ ์‹œ์Šคํ…œ' ๊ตฌ์กฐ๋ฅผ ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ณ ์น˜๊ธฐ ์–ผ๋งˆ๋‚˜ ํž˜๋“ค๊นŒ์š”? ๊ทธ๋ฆฌ๊ณ  ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ PR์ด ์žˆ์—ˆ์ง€๋งŒ ๋ฌด์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋กœ ์ธํ•ด ์‹ค์ œ๋กœ ์ง€๊ธˆ์€ Docker๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ  Vagrant + Ansible๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ‹์ง„.

@davber .dockerignore๋Š” -> #6579์— ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

/cc @shykes @creack @crosbymichael @vieux

-f ํ”Œ๋ž˜๊ทธ์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋นŒ๋“œ ์„ค์ •์„ ์žฌ์ •์˜ํ•˜๋Š” DOCKERFILE ํ™˜๊ฒฝ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

@jakehow ๋„ค, ํ™•์‹คํžˆ ์••๋„๋‹นํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฉ”์ธํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์ ์–ด๋„ 1,000๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์ ๊ทน์ ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์š”์ฒญํ•˜๊ณ  ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์ด์œ ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •๋ง ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ์žˆ์œผ๋ฉฐ #docker ๋ฐ #docker-dev irc ์ฑ„๋„์„ ๋ฐฉ๋ฌธํ•˜๋ฉด Firehose๋ฅผ ์ง์ ‘ ๋ชฉ๊ฒฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

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

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

@davber ๋‚˜๋Š” Vagrant๊ฐ€ ํ”„๋กœ์ ํŠธ๋‹น 1๊ฐœ์˜ ์„ค๋ช… ํŒŒ์ผ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ œํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค(์•„๋งˆ๋„ ๋น„์Šทํ•œ ์ด์œ ๋กœ). Vagrant๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๊นŒ?

@gabrtv ๋‹ค์ค‘ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๊ฐ€์ ธ์˜ค์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ž ์ •์ ์ธ ์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

$ ls | grep Dockerfile
Dockerfile
db.Dockerfile
frontend-prod.Dockerfile
frontend-dev.Dockerfile
$ docker build -t shykes/myapp .
Successfully built shykes/myapp/db
Successfully built shykes/myapp/frontend-dev
Successfully built shykes/myapp/frontend-prod
Successfully built shykes/myapp
$ docker build -t shykes/myapp2 --only frontend-dev .
Successfully built shykes/myapp2/frontend-dev

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

@shykes ๋‚˜๋Š” Dockerfile ํ˜•์‹์˜ ๋ณต์žก์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•˜๋‚˜์˜ Dockerfile์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์น˜ ์žˆ๋Š” ์ ˆ์ถฉ์•ˆ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด makefiles - ํ”„๋กœ์ ํŠธ์— 'Makefile'์ด ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์ผ๋ฐ˜์ ์ด์ง€๋งŒ make๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด '-f'๋กœ ๋‹ค๋ฅธ makefile์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์†Œ์Šค ํด๋”์™€ ์ด๋ฏธ์ง€ ๊ฐ„์˜ 1:1 ๋งคํ•‘์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋œ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œ, ๋”ฐ๋ผ์„œ ๋” ์ž‘์€ ์ด๋ฏธ์ง€.

"๊ทธ๋ž˜์„œ ๋‚ด ์งˆ๋ฌธ์€: docker build๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์—†๋Š” ๋งŽ์€ ์†Œ์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฐ€์งˆ ์œ„ํ—˜์ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?"

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

๋‚˜๋Š” ๋˜ํ•œ --only ์ œ์•ˆ์„ ํŠนํžˆ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œํ•  ๋•Œ /want/ ๋ชจ๋“  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŠน์ • ์ปจํ…์ŠคํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. docker ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ /only/ Dockerfile ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋˜ํ•œ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์‹ค์— ์žˆ์Šต๋‹ˆ๋‹ค.
Dockerfile ํŒŒ์ดํ•‘(cat Dockerfile | docker build -) ์ž‘์—…์„ ๋Š์Šจํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
ADD ๋ฐ CP์šฉ ๋””๋ ‰ํ† ๋ฆฌ.

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

cat Dockerfile | docker build --cwd=~/my_docker_data_files -

์ด ์ œ์•ˆ์—์„œ --cwd ํ”Œ๋ž˜๊ทธ๋Š” ADD ๋ฐ CP์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ํด๋”๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
๋ช…๋ น.

2014-06-29 19:42 GMT+10:00 Peter Braden [email protected] :

๋‹น์‹ ์€ "๊ทธ๋ž˜์„œ ๋‚ด ์งˆ๋ฌธ์€: ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์€ ์†Œ์Šค๋ฅผ ๊ฐ€์งˆ ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜์ง€ ๋ง๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
docker build๋กœ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†๋Š” ์ €์žฅ์†Œ"

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

๋‚˜๋Š” ๋˜ํ•œ --only ์ œ์•ˆ์„ ํŠนํžˆ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ธฐ๋ณธ
์‚ฌ๋žŒ๋“ค์ด ๊ตฌ์ถ•ํ•  ๋•Œ /์›ํ•˜๋Š”/์€ ํŠน์ • ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ตฌ์ถ•๋˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค - ๋„์ปค ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ /only/ Dockerfile์ด
์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.
์„ธ์›Œ์ง.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotcloud/docker/issues/2112#issuecomment -47449994.

@llonchj๋Š” ์‹ค์ œ๋กœ https://github.com/dotcloud/docker/pull/5715๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์ด๋ฏธ ๋งˆ์Šคํ„ฐ์— ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@shykes๋Š” ํ™•์‹คํžˆ ๋‹ค๋ฅธ ๋‹ค์ค‘ ์ด๋ฏธ์ง€ PR์— ์—ด๋ ค ์žˆ์ง€๋งŒ #5715๋ฅผ ๋ณด๊ณ  ์ด ํŠน์ • PR์ด ๋” ์ด์ƒ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@peterbraden ์˜ ์›๋ž˜ ์˜๊ฒฌ์— ๋”ฐ๋ผ ...

ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์—ฌ๋Ÿฌ dockerfile์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก [command redacted]๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@cap10morgan ๋‹น...

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ "Dockerfile ์œ„์น˜/์ด๋ฆ„"์—์„œ "๋นŒ๋“œ ์ปจํ…์ŠคํŠธ"์˜ ๊ฐœ๋…์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ”๋กœ #5715๊ฐ€ ํ•˜๋Š” ์ผ ์•„๋‹Œ๊ฐ€์š”? ๋‚ด๊ฐ€ ์ดํ•ดํ•œ ๋Œ€๋กœ:

$ cd myapp
$ ls Dockerfile
Dockerfile
$ docker build -t gabrtv/myimage
Successfully built gabrtv/myimage
$ ls subfolder/Dockerfile
Dockerfile
$ tar -C subfolder -c . | docker build -t gabrtv/myotherimage -
Successfully built gabrtv/myotherimage

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

@gabrtv #5715๋Š” ํ•ญ์ƒ ์ž‘๋™ํ•˜๋Š” ๋‹จ์ผ ๋ช…๋ น์„ ๊ฐ–๋Š” @shykes ๊ธฐ์ค€์— ๋งž์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. tar -C subfolder -c . | docker build -t gabrtv/myotherimage - ๋Š” ๋‚˜์—๊ฒŒ ๋งค์šฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ @shykes ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์ œ์•ˆ์„ ์•„์ฃผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ .dockerfile(๋‹จ์ง€ .docker๊ฐ€ ์•„๋‹Œ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?) ํŒŒ์ผ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋‘ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์ผ์ด ์žˆ์–ด๋„ ํ•˜๋‚˜์˜ ๋ช…๋ น์œผ๋กœ ์‰ฝ๊ฒŒ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚˜์ค‘์— ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@rattrayalex ๋Š” ์ €๋ฅผ ๋ฏฟ์œผ์„ธ์š”. ์ €๋Š” "ํ•ญ์ƒ ์ž‘๋™ํ•  ๋‹จ์ผ ๋ช…๋ น์„ ๊ฐ–๋Š” ๊ฒƒ"์ด๋ผ๋Š” ๋ชฉํ‘œ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  PR์„ ์ œ์ถœํ•˜๊ฒŒ ๋  ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. :๋ˆˆ์ง“:

์ œ ์š”์ ์€ ํ”„๋กœ์ ํŠธ ์กฐ์ง์˜ ๊ด€์ ์—์„œ Allow specifying of a dockerfile as a path, not piping in ๋ผ๋Š” ์ œ๋ชฉ์˜ ๊ธฐ๋ฐœํ•œ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋…ผ์˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์—ฌ๊ธฐ์„œ ๋…ผ์˜์˜ ๋Œ€๋ถ€๋ถ„์€ https://github.com/dotcloud/docker/issues/2112#issuecomment -47448314์˜ @shykes ์ƒˆ๋กœ์šด ์ œ์•ˆ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.
  2. ์›๋ž˜ ๊ธฐ๋ณธ ๋ฌธ์ œ(Dockerfile์—์„œ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๋ถ„๋ฆฌ)๋Š” #5715๋กœ ํ•ด๊ฒฐ๋˜์ง€๋งŒ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@llonchj ์ธ์šฉ...

๋‚ด ์ดํ•ด์— ๋”ฐ๋ฅด๋ฉด ์—ฌ๊ธฐ์˜ ๋ฌธ์ œ๋Š” Dockerfile(cat Dockerfile | docker build -)์„ ํŒŒ์ดํ•‘ํ•  ๋•Œ ADD ๋ฐ CP์— ๋Œ€ํ•œ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋Š์Šจํ•˜๊ฒŒ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•ด์„œ, docker build -t <image> -f <path-to-dockerfile> ์— ๋Œ€ํ•ด ๊ดœ์ฐฎ๋‹ค๋ฉด @shykes ์ œ์•ˆ์„ ์œ„ํ•œ PR์„ ํ•จ๊ป˜ ๋„ฃ์„ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋Šฅ์ ์œผ๋กœ ๋™๋“ฑํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ tar -C <path-to-context> -c . | docker build -t <image> - ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ซ๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ƒˆ๋กœ์šด ํ† ๋ก ์„ ์‹œ์ž‘ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค(๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ? ์ƒˆ๋กœ์šด ์ด์Šˆ?).

์˜ค๋Š˜ ์ด ๋ฌธ์ œ์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@shykes ์ถ”๋ก 

@gabrtv ์—ฌ๊ธฐ ์žˆ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๋…ผ์˜๊ฐ€ ํŠนํžˆ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๋งˆ์นจ๋‚ด ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ์˜ ์ œ๋ชฉ๊ณผ ์ผ๋ถ€ '๋ฐœ๊ฒฌ' ๊ฒŒ์‹œ๋ฌผ์€ ์•ฝ๊ฐ„ ๊ด€๋ จ์ด ์—†์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ ๋˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊นจ๋—ํ•œ ์‹œ์ž‘์˜ PR์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@shykes ์˜๊ฒฌ์˜ ์ œ์•ˆ์€ ๋‚˜์—๊ฒŒ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์–ด๋”˜๊ฐ€์—์„œ ์ด์— ๋Œ€ํ•œ ์ด์ „ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

"Dockerfile.frontend-prod"๊ฐ€ ๋” ์ข‹์ง€ ์•Š์•„ ๋ชจ๋“  Dockerfile์ด
๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ•จ๊ป˜ ์ •๋ ฌ๋ฉ๋‹ˆ๊นŒ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ, ๊ทธ๊ฑด ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ €์žฅ์†Œ๊ฐ€ 100๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ๋นŒ๋“œํ•œ๋‹ค๋ฉด ๋ฃจํŠธ์— 100๊ฐœ์˜ Dockerfile์„ ๊ฐ–๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์˜ˆ์‹œ: dotCloud PAAS repo.)

100๊ฐœ ์„น์…˜์ด ์žˆ๋Š” ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ Dockerfile๋„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

100๊ฐœ์˜ Dockerfile์ด ํ•„์š”ํ•˜๊ณ  ๋ณ„๋„์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

(์•„๋‹ˆ์š”, ๊ฑฐ์˜ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๊ฐ ์„œ๋น„์Šค ๋””๋ ‰ํ† ๋ฆฌ์˜ _์™ธ๋ถ€_์— ์žˆ๋Š” ๊ณตํ†ต ์ฝ”๋“œ์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ž์ฒด ๋””๋ ‰ํ† ๋ฆฌ์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.)

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, Dockerfile์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๋Š” ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋Š” ์ด์œ (๊ธฐ๋ณธ๊ฐ’์€ Dockerfile )๊ฐ€ ์™œ ๊ทธ๋ ‡๊ฒŒ ํฐ ๋ฌธ์ œ์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ํ˜„์žฌ ์ œ์•ˆ( <imagename>.Dockerfile )์€ ์ž๋™ํ™”๋œ ๋นŒ๋“œ์˜ ํ˜„์žฌ ๋””์ž์ธ๊ณผ ์ „ํ˜€ ๋งคํ•‘๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ๋นŒ๋“œ ์‹œ์Šคํ…œ ์ค‘ ํ•˜๋‚˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์†์ƒ๋˜๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ๋‚ด ๋ชจ๋“  ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...?

@jpetazzo ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ธ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ ๋‚˜๋Š” ์˜๊ฒฌ ๋ถˆ์ผ์น˜๋Š” ํ™˜์˜ํ•˜์ง€๋งŒ ๋ฐ”๋ณด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์€ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ๋™๋ฃŒ์˜ ์ง€์„ฑ์„ ๋ชจ์š•ํ•˜์ง€ ์•Š๊ณ  ์ž์‹ ์˜ ์ฃผ์žฅ์„ ์ œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์‹ญ์‹œ์˜ค. ๊ฐ์‚ฌ ํ•ด์š”.

_๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, Dockerfile์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ํฐ ๋ฌธ์ œ์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ๊ตฌ์ฒด์ ์ธ ์ฃผ์žฅ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ฝ๊ณ  ๋ฐ˜๋ก ์„ ์ œ์‹œํ•˜์‹ญ์‹œ์˜ค.

Re: ๋‚œ์žกํ•จ. @gabrtv ๋Š” IRC์— ๋Œ€ํ•ด ๋™์ผํ•œ ์šฐ๋ ค๋ฅผ ๊ฐ–๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ํ† ๋ก  ํ›„์— ์šฐ๋ฆฌ๋Š” ์ด ๋Œ€์•ˆ์„ ์ƒ๊ฐํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค.

$ ls Dockerfile Dockerfiles/*
Dockerfile
Dockerfiles/frontend-prod
Dockerfiles/frontend-dev

๊ฐ™์€ ์ƒ๊ฐ์ด์ง€๋งŒ ๋ฃจํŠธ ์ €์žฅ์†Œ์— ์žˆ๋Š” ๊ฐœ๋ณ„ ํŒŒ์ผ์ด ์ ์Šต๋‹ˆ๋‹ค.

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

์ž, ์ด์ œ ์ด๋ฆ„์ด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? ์ผ๋ฐ˜ Dockerfile๊ณผ ํ•จ๊ป˜ "abc"๋ผ๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ "abc"๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. "Dockerfile.abc" ๋ฐ "Dockerfile.zzz"๊ฐ€ ํฌํ•จ๋œ "xyz" ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋นŒ๋“œ ์ด๋ฆ„์„ "xyz-abc" ๋ฐ "xyz-zzz"๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

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

์‚ฌ์‹ค ๋‚ด ๋นŒ๋“œ ํ™˜๊ฒฝ์ด ๋ชจ๋“  ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๊ฑฐ์˜ ๋™์ผํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ƒ์„ฑํ•˜๋ ค๋Š” ์„œ๋น„์Šค ๋ฆด๋ฆฌ์Šค ์ปจํ…์ŠคํŠธ tar๋ฅผ ์•Œ๋ฆด ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ๋‹จ์ผ ๋ฃจํŠธ Dockerfile๋กœ ์ด๊ฒƒ์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@shykes ๊ธ€์Ž„, ์šฐ๋ฆฌ๊ฐ€ Dockerfile/* ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€ "docker build"๊ฐ€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ํ•˜์œ„ ํด๋”์—์„œ "Dockerfile.*"์ด๋ผ๋Š” ํŒŒ์ผ์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋ชจ๋‘ ์‹คํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ if์— ์žˆ๋Š” ๋™์•ˆ "-f"์™€ ๊ฐ™์ด ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ? :)

... ๋ฐ”๋ณด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค

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

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

@aigarius ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฐ ํ•˜์œ„ Dockerfile์„ ์ž์‹ ์ด๋ฏธ์ง€์— ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋œ ๋ช…ํ™•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ./Dockerfile.* ๋ฐ ./Dockerfiles/* ์˜ ์žฅ์ ์€ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋งคํ•‘๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ./foo/Dockerfile.db ์™€ ./bar/Dockerfile.db ๊ฐ€ ์žˆ๊ณ  docker build -t shykes/myapp . ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ shykes/myapp/db ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์–ด๋–ค ๊ฒƒ์ด shykes/myapp/db๋ผ๊ณ  ๋ถ€๋ฅผ๊นŒ์š”?

์–ด๋Š ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” Dockerfile์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฏ€๋กœ "shykes/myapp/bar/db" ๋ฐ "shykes/myapp/foo/db"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถˆํŽธํ•  ์ •๋„๋กœ Java ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฐ€๊นŒ์›Œ์ง€์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ข‹์€์ง€ ๋‚˜์œ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งก๊ธธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@shykes : Vagrant์™€ ๊ด€๋ จํ•˜์—ฌ ์ €์™€ ๋‹ค๋ฅธ ๋ช‡๋ช‡ ์‚ฌ๋žŒ๋“ค์€ Docker์˜ ์ผ๋ถ€ ๊ฒน์น˜๋Š” ๊ธฐ๋Šฅ์— Vagrant๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ €๋Š” ํ˜„์žฌ ๋‹ค์ค‘ ๋จธ์‹  ๋นŒ๋“œ(Vagrant์—์„œ ๋‹ค์ค‘ ๋จธ์‹  ์ •์˜์™€ ํ•จ๊ป˜ ์ˆ˜ํ–‰)๊ฐ€ Dockerfile์„ ์‚ฌ์šฉํ•  ๋•Œ ๋” ์–ด์ƒ‰ํ•ด์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ํ™•์‹ ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” "์ปจํ…์ŠคํŠธ"๊ฐ€ Vagrant์—์„œ ํ›จ์”ฌ ๋” ์œ ์—ฐํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ณต์œ  ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์œ„์น˜์—์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฆ‰์„์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์–ธ์–ด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฏ€๋กœ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค(๋˜๋Š” ๊ธฐ๊ณ„)๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‚˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ '์œ ํ–‰/ํ”„๋กœ๋น„์ €๋‹'ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งค์ผ ๊ทธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์‹œ์Šคํ…œ์—์„œ ๋ช‡ ๊ฐ€์ง€ ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๋น„์ €๋‹ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„ฑ์žฅํ•˜๋Š” Vagrantfile์— ๋„ˆ๋ฌด ์งœ์ฆ์ด ๋‚˜๋ฉด ๊ฐœ๋ณ„ ์„œ๋น„์Šค๋‚˜ ์ธก๋ฉด์„ ์„ค๋ช…ํ•˜๋Š” ํ•˜์œ„ Vagrantfile์„ ์‰ฝ๊ฒŒ '๋กœ๋“œ'ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์„œ ๋‚ด ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  1. ๋ชจ๋“  ์„œ๋น„์Šค์— ๋Œ€ํ•ด ๊ฑฐ๋Œ€ํ•œ ์ง€์ €๋ถ„ํ•œ ํŒŒ์ผ์„ ์–ป์ง€ ์•Š์Œ
  2. ํ•ด๋‹น ํŒŒ์ผ/ํŒŒ์ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•˜๋‚˜์˜ ํŠน์ • ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Œ

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, Docker๋Š” ์ฒœ์žฌ์ ์ธ ์•„์ด๋””์–ด์ด์ž ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” ์ €์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์ด ํŠน์ • ์ข…๋ฅ˜์˜ ๊ธฐ๋Šฅ์ด๋‚˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด Vagrant๋ฅผ ํฌ๊ธฐํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์œ„์—์„œ ์ฒ ์ €ํ•˜๊ฒŒ ๋‹ค๋ฃฌ ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค๋ฉด ๋ฏธ์•ˆํ•˜์ง€๋งŒ '-f' ์˜ต์…˜์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์–ด๋–ค ์†”๋ฃจ์…˜์ด ๋” ๋‚˜์€์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ปจํ…์ŠคํŠธ ๋ฃจํŠธ์— ์žˆ๋Š” Dockerfile์— ๋Œ€ํ•œ ๋ฟŒ๋ฆฌ ๊นŠ์€ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•œ ๋ชจ๋“ˆ๋กœ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ ์ธํ•ด ์–ด๋– ํ•œ ๋‹จ์ ๋„ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

'-f' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ„์˜ Dockerfiles/ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฐ™์ด ์›ํ•˜๋Š” ๋Œ€๋กœ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ ํ•˜์œ„ Dockerfile์„ ํ™•์‹คํžˆ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, ์ •ํ™•ํ•œ ๋™์ž‘์„ ๋ชจ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๋‹จํ•œ ํ•œ ์ค„ ๋ฐฐ์…”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค...

๊ณต์œ ์™€ ์œ ์—ฐ์„ฑ ์‚ฌ์ด์— ๊ธด์žฅ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ณต์œ ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๋ฉด ์˜ˆ, ํ‘œ์ค€ dockerfile
๋งž๋Š” ๋ง์ด๋‹ค.

๊ณต์œ ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณต์œ ๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค
์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด.

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

๋ชฉ์ ์ด ์ง€์ •๋œ -f ์˜ต์…˜์€ ์šฐ๋ฆฌ์—๊ฒŒ ํ•„์š”ํ•œ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•œํŽธ,
๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์— ๋Œ€ํ•œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผํ•˜๋‹ค.
2014๋…„ 7์›” 3์ผ ์˜คํ›„ 6์‹œ "David Bergman" [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์ฒ ์ €ํ•˜๊ฒŒ ๋‹ค๋ฃฌ ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค๋ฉด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚˜๋Š” ๋ณด์ง€ ๋ชปํ•œ๋‹ค.
์–ด๋–ค ์†”๋ฃจ์…˜์ด '-f' ์˜ต์…˜์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค. ์ฆ‰, ๋ชจ๋“ˆ๋กœ
์— ๋Œ€ํ•œ ๋ฟŒ๋ฆฌ ๊นŠ์€ ์ข…์†์„ฑ์œผ๋กœ ์ธํ•œ ๊ตฌํ˜„ ๋ฌธ์ œ
์ปจํ…์ŠคํŠธ ๋ฃจํŠธ์— ์žˆ๋Š” Dockerfile, ๋‚˜๋Š” ์–ด๋–ค ๋‹จ์ ๋„ ๋ณด์ง€ ๋ชปํ•œ๋‹ค.
๊ทธ๊ฒƒ.

'-f' ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ™•์‹คํžˆ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฐ Dockerfiles/์™€ ๊ฐ™์ด ์›ํ•˜๋Š” ํ•˜์œ„ Dockerfiles/
์œ„์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ๊ทธ๋Ÿฌ๋ฉด ๊ฐ„๋‹จํ•œ ํ•œ ์ค„ ๋ฐฐ์…”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ •ํ™•ํ•œ ํ–‰๋™์„ ๋ชจ๋ฐฉ ...

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotcloud/docker/issues/2112#issuecomment -47989616.

-f ๋Š” ์ตœ์†Œํ•œ์˜ "๋†€๋ผ์›€"์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค(๊ฐœ์ธ์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ด ์Šค๋ ˆ๋“œ์— ์˜ค๊ธฐ ์ „์— ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค).
-c ๋””๋ ‰ํ† ๋ฆฌ๋‚˜ tar ์ค‘ ํ•˜๋‚˜๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋„ ํ›Œ๋ฅญํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ ์ƒ์ˆ˜ cd ๊ฐ€ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ.

๋˜ํ•œ docker build -f foo/bar/Dockerfile -c foo/ ์ง€์นจ์ด ํฌํ•จ๋œ README๋Š” ๋‚˜์—๊ฒŒ ๋ถˆ์พŒ๊ฐ์„ ์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ docker build ๊ฐ€ Dockerfile s๋ฅผ ์‰ฝ๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

-- README
-- foo/
---- Dockerfile
---- etc
-- bar/
---- Dockerfile
---- etc
---- subbar/
------ Dockerfile
-- context/
---- etc

๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ด๋ฆ„ ์ถฉ๋Œ( repo/bar/subbar )์„ ํ”ผํ•˜๊ณ  ๊ธˆ์•ก์„ ์ถ”๋ก ํ•˜๊ธฐ ์‰ฝ๊ณ  ๋งŽ์€ ๊ฐœ๋ฐœ ์ปจํ…์ŠคํŠธ์—์„œ ์˜๋ฏธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  docker build ๋งŽ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ตฌ์ถ• ํ•  ๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  docker build -f ๋ถˆํ•„์š”ํ•œ ์ƒ๋žต ํ•  ์ˆ˜์žˆ๋Š”, Dockerfile ์—์„œ ๊ฐ€์žฅ ์ปจํ…์ŠคํŠธ.

-f ๊ฐ€ Docker๊ฐ€ ํฌํ•จ๋œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์•„๋‹Œ aa ํŒŒ์ผ์ธ ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๊ฐ€ docker build ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋นŒ๋“œ๋˜์ง€ ์•Š์€ dockerfile์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ๊ทธ๊ฒƒ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ์–ด์ œ @shykes ์™€์˜ IRC ํ† ๋ก ์—์„œ ๊ทธ๋Š” ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹ค๋ฅธ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒ์„ฑํ•  ๊ฐ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด "INCLUDE foo/bar/Dockerfile AS bar-foo"์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ํ˜•์‹์˜ ๋ช‡ ์ค„๋งŒ ํฌํ•จํ•˜๋Š” ์ €์žฅ์†Œ์˜ ๋ฃจํŠธ์— ๋งˆ์Šคํ„ฐ Dockerfile์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณ„๋„์˜ ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•œ ๊ฐ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ(์˜ˆ: foo ํ•˜์œ„ ํ”„๋กœ์ ํŠธ์˜ bar ๋ชจ๋“ˆ)๋Š” foo/bar/Dockerfile์— ์ผ๋ฐ˜ Dockerfile์„ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น Dockerfile์˜ ๊ฒฝ๋กœ(ADD ๋ฐ COPY์šฉ)๋Š” ์—ฌ์ „ํžˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธ(๋งˆ์Šคํ„ฐ Dockerfile์ด ์žˆ๋Š” ์œ„์น˜)์ธ ์ปจํ…์ŠคํŠธ ๋ฃจํŠธ์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค.
  • "docker build -t mycorp/myapp ."์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ํ˜ธ์ถœ ๋ฃจํŠธ Dockerfile์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์ด ์˜ˆ์—์„œ "mycorp/myapp/bar-foo"์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • "docker build"์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ช…๋ น์ค„ ์˜ต์…˜์€ "docker build -t mycorp/myapp --only bar-foo,baz-db"์™€ ๊ฐ™์ด ์„ ์–ธ๋œ ์ด๋ฏธ์ง€ ์ค‘ ์ผ๋ถ€๋งŒ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ:

#!/bin/bash
ln -s Dockerfile-dev Dockerfile
docker build -t image/name-dev:latest .
rm Dockerfile

@์ƒค์ดํฌ์Šค ํ•‘? ํŠน์ • ์„ค๊ณ„ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ํ•ต์‹ฌ ๊ฐœ๋ฐœ์ž ์Šน์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ์„ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํ›จ์”ฌ ๋” ๋†’์Šต๋‹ˆ๋‹ค.

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

"-f"๋Š” ์ด๋ฏธ ์ฃผ์–ด์ง„ ์ด์œ ๋กœ ๊ตฌํ˜„๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” #7115๊ฐ€ ์•„๋งˆ๋„ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

#7204 ๋„ ์žˆ๋Š”๋ฐ, ์ด๊ฒƒ์€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๋งŽ์€ ๋ถ€๋ถ„์—๋„ ์ ํ•ฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

dockerfile์— ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ๋‘ ๊ฐ€์ง€ ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์ด ๋ชจ๋‘ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ๋„ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #7115๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ 'ํ…Œ์ŠคํŠธ' ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  'ํ”„๋กœ๋•ํŠธ' ์ด๋ฏธ์ง€. #7204๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. -f ๋Š” ๋นŒ๋“œ์— _configurability_๋ฅผ ํ—ˆ์šฉํ•˜์ง€๋งŒ ๋‘ ์†”๋ฃจ์…˜ ๋ชจ๋‘ _sub_builds_๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

"๋นŒ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค"์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•œ ์›์น™์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์žˆ๋Š” ๊ทธ๋Œ€๋กœ, ์ด ์ „์ฒด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„์ปค ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด make ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฏธ ํ˜ธ์ŠคํŠธ ๊ฐ„ ์‹คํ–‰ ๋ช…๋ น์„ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ -f ๋Š” ์‹ค์šฉ์ ์ธ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด dockerfile์„ ์™„์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ๋ฌธ์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์—†๋Š” ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ ํ˜ธ์ŠคํŠธ ๊ฐ„์— ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ €๋„ ์ด๊ฒƒ์ด ์™œ ์ค‘์š”ํ•œ์ง€ ๋” ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ํŒ€์€ ํ˜„์žฌ
๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋„๋ก ๊ฐ•์š” - ํ”ผํ•˜๋ ค๋Š” ์ •ํ™•ํ•œ ๊ฒƒ.

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

2014๋…„ 7์›” 28์ผ ์›”์š”์ผ ์˜ค์ „ 10์‹œ 43๋ถ„, Peter Braden [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ 2๊ฐ€์ง€ ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์„ ๋ชจ๋‘ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ํŒŒ์ผ. ์–ด๋Š ์ชฝ๋„ ๊ฐ„๋‹จํ•ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. #7115
https://github.com/docker/docker/issues/7115 ์—ฌ์ „ํžˆ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ์œ ํ˜•์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋Š” ์œ ์Šค ์ผ€์ด์Šค๋ฅผ ํ•ด๊ฒฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ
'ํ…Œ์ŠคํŠธ' ์ด๋ฏธ์ง€์™€ 'ํ”„๋กœ๋•ํŠธ' ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. #7204
https://github.com/docker/docker/pull/7204
๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•œ ์†”๋ฃจ์…˜ -f ํ—ˆ์šฉ
_configurability_๋Š” ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋ฐ˜๋ฉด ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์€ ๋ชจ๋‘
_์„œ๋ธŒ_๋นŒ๋“œ_.

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

๊ทธ๋Œ€๋กœ, ๋‚˜๋Š” ๋„์ปค ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด make๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ „์ฒด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ๊ท€ํ•˜์˜
host-to-host run-the-same ๋ช…๋ น.

๋‚˜์—๊ฒŒ -f๋Š” ์‹ค์šฉ์ ์ธ ์†”๋ฃจ์…˜์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋‹ค๋ฉด
๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ํšŒ์ „์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ์†”๋ฃจ์…˜์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
dockerfile์„ ์™„์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ๋ฌธ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/docker/issues/2112#issuecomment -50347483.

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” git repo๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  Dockerfile์ด ์žˆ๋Š” ๊ฒฝ์šฐ "docker build -t mytag"๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์•ˆ์— ์™„์ „ํ•œ ์˜ˆ์ƒ ๋นŒ๋“œ๋ฅผ ์–ป์œผ์‹ญ์‹œ์˜ค. ์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜คํ•ดํ•˜๊ฑฐ๋‚˜ ์•Œ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ์ง€์นจ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ ˆ์ถฉ์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ด๋ฏธ์ง€๊ฐ€ ์‚ฌ์ „ ์ •์˜๋œ ํ•˜์œ„ ํƒœ๊ทธ๋กœ ๋นŒ๋“œ๋œ ๋‹จ์ผ ์ปจํ…์ŠคํŠธ์—์„œ ์—ฌ๋Ÿฌ Docker ์ด๋ฏธ์ง€๋ฅผ ์ •์˜ํ•œ ๋‹ค์Œ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ์ด๋ฏธ์ง€ ์ค‘ ํ•˜๋‚˜๋งŒ ๋นŒ๋“œํ•˜๋Š” ์˜ต์…˜์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณตํ†ต ๋นŒ๋“œ ๊ตฌ๋ฌธ์ด ์œ ์ง€๋˜๋Š” ๋™์‹œ์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๊ฐ€ ๋ชจ๋‘ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. 1) ํ•˜๋‚˜์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋งŽ์€ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 2) "๊ณ ๊ธ‰" ์˜ต์…˜์œผ๋กœ ๊ทธ ์ค‘ ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•˜๋„๋ก ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
์ œ์•ˆ๋œ ๊ตฌ๋ฌธ์€ ์œ„์˜ ๋‚ด ์˜๊ฒฌ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค - https://github.com/docker/docker/issues/2112#issuecomment -48015917

@algarius ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ _INCLUDE_ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์„ค๊ณ„ ์ œ์•ˆ์„ ์—ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ์ œ์•ˆ์˜ ์˜ˆ๋Š” #6802 ๋˜๋Š” #6805๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋””์ž์ธ ์ œ์•ˆ ์ œ์ถœ
  • ๋””์ž์ธ ์ œ์•ˆ ๋…ผ์˜
  • ๋””์ž์ธ ์ œ์•ˆ์„ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค
  • ๋””์ž์ธ ์ œ์•ˆ์— ๋Œ€ํ•œ PR ๋ณด๋‚ด๊ธฐ

์†”์งํžˆ ๋งํ•ด์„œ, ๋นŒ๋“œ๋Š” ์ด์ œ ์‹ค์ œ๋กœ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด Dockerfile์— RUN apt-get update && apt-get install build-essentials ruby python whatever ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฏธ
๋‚ด๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ์‹œ์ ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ "์ตœ์‹ "์ธ ๊ฒƒ์ด ๋ฌด์—‡์ด๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ์—
์ผ์ฃผ์ผ ํ›„์— ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ์˜์กด์„ฑ.

@codeaholics ๊ทธ๋Ÿฌ๋‚˜ ๋ฒ„์ „์„ ํŽ˜๊น…ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ

์•„๋งˆ ๊ณต์ •ํ•œ ๋Œ“๊ธ€

@codeaholics ๋นŒ๋“œ์˜ ๋ฐ˜๋ณต์„ฑ์ด ์™„๋ฒฝํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๋น„๋ก ๋ฒ„์ „ ๊ณ ์ •๊ณผ ๊ฐ™์€ ์ œ์–ด ์˜ต์…˜์ด ์žˆ๊ณ  ๋” ๋งŽ์€ ๊ฒƒ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ ๋นŒ๋“œ์—๋Š” ํ•ญ์ƒ ๋™์ผํ•œ _์ง„์ž…์ _์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ–ฅํ›„ ๋” ๋‚˜์€ ๋ฐ˜๋ณต์„ฑ์„ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋นŒ๋“œ๊ฐ€ Docker ์ž์ฒด์˜ ์—…์ŠคํŠธ๋ฆผ์— ์žˆ๋Š” ํƒ€์‚ฌ ๋„๊ตฌ์— ์ข…์†๋˜๋ฉด ๋˜๋Œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ์˜ ๋ฐ˜๋ณต์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 0์ด๋ฉฐ Docker์˜ ํ–ฅํ›„ ๊ฐœ์„ ์œผ๋กœ ์ด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ณต์„ฑ๋ฟ๋งŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ _docker build_์—์„œ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์—†๋Š” ํŠน์ • ์ธ์ˆ˜ ์ง‘ํ•ฉ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ง€์ • ๋„๊ตฌ๋Š” ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๊ณ„์—์„œ ์œ ์ผํ•œ ๋นŒ๋“œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ, ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ _docker ๋นŒ๋“œ_.

#7115์˜ @peterbraden ์—์„œ ์—ฌ๋Ÿฌ PUBLISH ํ˜ธ์ถœ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ด์ œ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋นŒ๋“œํ•  ํ•˜์œ„ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์ด _Docker๊ฐ€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ ์ด๋ฏธ์ง€ ์„ธํŠธ ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@shykes > ๋นŒ๋“œ๊ฐ€ Docker์˜ ์—…์ŠคํŠธ๋ฆผ์— ์žˆ๋Š” ํƒ€์‚ฌ ๋„๊ตฌ์— ์ข…์†๋˜๋ฉด
์ž์ฒด ... ๋นŒ๋“œ์˜ ๋ฐ˜๋ณต์„ฑ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ 0์ž…๋‹ˆ๋‹ค.

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

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

๋‚˜๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋„์ปค๋ฅผ ์‚ฌ๋ž‘ํ•œ๋‹ค. ๋ฉ‹์ง„ ์ผ๋“ค! ์ด ํŠน์ • ๋ฌธ์ œ๋Š” ๊ทธ๋ƒฅ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค
ํ†ต์ฆ ํฌ์ธํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2014๋…„ 7์›” 28์ผ ์›”์š”์ผ ์˜คํ›„ 12์‹œ 25๋ถ„, Solomon Hykes [email protected]
์ผ๋‹ค:

@peterbraden https://github.com/peterbraden in #7115
https://github.com/docker/docker/issues/7115 , ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด
์—ฌ๋Ÿฌ PUBLISH ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ ์ด์ œ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‹น์‹ ์€
๋นŒ๋“œํ•  ํ•˜์œ„ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ต์‹ฌ์€ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์ด ๋‹ค์Œ ์„ธํŠธ ๋‚ด์—์„œ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Docker_๊ฐ€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•˜์œ„ ์ด๋ฏธ์ง€. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/docker/docker/issues/2112#issuecomment -50361586.

@thedeeno Dockerfile ์˜ ๋ชฉํ‘œ๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ๋ฅผ Docker๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"_a_ Dockerfile์˜ ๋ชฉํ‘œ๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ๋ฅผ Docker๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค."

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

์ œ์•ˆํ•˜๋Š” ๋Œ€์•ˆ์œผ๋กœ Dockerfile ๊ตฌ๋ฌธ์— ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด Dockerfile ์ƒ์„ฑ์ด ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ๊ตฌ๋ฌธ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. PUBLISH et al์€ ๋‚˜๋จธ์ง€ Dockerfile ๊ตฌ๋ฌธ์— ๋น„ํ•ด ์„ธ๋ จ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋„๊ตฌ ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ์•„์ด๋””์–ด๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด -f๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ž‘๋™ํ•˜๋Š”์ง€๋„ ๋ชจ๋ฅธ ์ฑ„ ์‹œ๋„ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. UI๋Š” ์ง๊ด€์ ์ด์–ด์•ผ ํ•˜๋ฉฐ ์‚ฌ๋žŒ์€ _get_ -f ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Grokking ์ƒˆ๋กœ์šด Dockerfile ๊ตฌ๋ฌธ์€ ๊ฑฐ์˜ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@peterbraden @shykes -f๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์— ์ด ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์ด์œ ๋Š” Docker๊ฐ€ ์ด๋ฏธ ์ด ๊ธฐ๋Šฅ์„ ๊ฐ–๊ณ  ์žˆ์„ ๊ฒƒ์œผ๋กœ _์˜ˆ์ƒ_ํ–ˆ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ์ž‘ํ•œ ์ฒซ๋‚ (๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ) ๊ฒ€์ƒ‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” #7115(๋น ๋ฅด๊ฒŒ)๋ฅผ ์ฝ๊ณ  ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ PR์— ๋Œ€ํ•œ ๋ฌธ์„œ์˜ ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ํ”Œ๋ž˜๊ทธ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ INCLUDE ์•„์ด๋””์–ด๋กœ ์ƒˆ๋กœ์šด ์ œ์•ˆ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค - https://github.com/docker/docker/issues/7277

๋ถ€์ˆ˜์ ์œผ๋กœ - ํˆฌ๋ฐ•ํ•œ "RUN apt-get install -y ...." ๋Œ€์‹  ๋” ํšจ์œจ์ ์ธ "APT" ๋ช…๋ น์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฐ ๋‹ค์Œ YUM, EMERGE, PACMAN ๋“ฑ).

์•„ ๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์–ด์จŒ๋“  "-f" ์˜ต์…˜์„ ์‹ค์ œ๋กœ ์‹œ๋„ํ•œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ ์†”๋ฃจ์…˜์„ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์„œ์˜ ํŽ˜์ด์ง€๋กœ ์•ˆ๋‚ดํ•˜๋Š” ๋ฉ‹์ง„ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๋ง๋กœ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋ฐฉ์— ์žˆ๋Š” ์ฝ”๋ผ๋ฆฌ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@shykes ๋Š” "์•„์›ƒ์˜ค๋ธŒ๋ฐด๋“œ(out-of-band) ์ •๋ณด ์—†์ด ์†Œ์Šค ์ฝ”๋“œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๊ณผ ์—…์ŠคํŠธ๋ฆผ ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ์–‘์— ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ณ  Docker์˜ ์ฃผ์š” ์ฐจ๋ณ„ํ™” ์š”์†Œ์ž…๋‹ˆ๋‹ค."

๋‚˜๋Š” ์ด๊ฒƒ์ด "๋””๋ ‰ํ† ๋ฆฌ์— docker build . ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ ˆ๋Œ€์ ์œผ๋กœ ํ•ญ์ƒ ์˜ณ์€ ์ผ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค docker build . ํ•  ์ผ, ํ‹€๋ ธ์–ด"

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

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

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

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

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

@algarius ์ œ ์ƒ๊ฐ์— ๋ฌธ์ œ๋Š” ์ด ์ƒ๊ฐ์ด ์‹ค์ œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋ฉฐ, ์—ฌ๊ธฐ์—์„œ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์ด ์ง„์ •์œผ๋กœ ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ฌด๋„ ์„ค๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

@drewcrawford ๋Š” Docker ์ง€์›๊ณผ ํ•จ๊ป˜ ๋ฐฐํฌ๋˜๋Š” ํ˜„์žฌ ์‹ค์ œ ์„ธ๊ณ„์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@aigarius "๋„์ปค ๋ฐฉ์‹"์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์•„์š”.

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

์ด๊ฒƒ์ด make ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์ž‘์—…์ฒ˜๋Ÿผ ๋“ค๋ฆฐ๋‹ค๋ฉด, ๋‹น์‹  ๋ง์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ์‹ค์ œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„์ปค ๋นŒ๋“œ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” Dockerfile์ด ๋นŒ๋“œ์— ์„ ํ˜ธ๋˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋  ์ˆ˜ ์—†์œผ๋ฉฐ ์˜ˆ๋ฅผ ๋“ค์–ด make ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ makelike ํŒŒ์›Œ๋กœ ๊ตฌ์ถ•์„ ์œ„ํ•œ ์„ ํ˜ธ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ด๊ฑฐ๋‚˜ ์‹ค์ œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ make ๋“ฑ์ด ์žˆ๋Š” ์ €์ˆ˜์ค€ ๋„๊ตฌ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ "์‹ค์ œ" ๋นŒ๋“œ ์‹œ์Šคํ…œ์€ ์ž„์˜๋กœ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•˜๊ณ  ๋‹จ์ˆœํ™”๋œ ๋„์ปค ๋นŒ๋“œ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋งŽ์•„๋„ ์ด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ผ์–ด๋‚  ์ผ์€ docker๊ฐ€ make ํ˜ธ์ถœํ•˜๋Š” ์ƒˆ๋กœ์šด cc ๊ฐ€ ๋˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

@shykes @drewcrawford @aigarius ์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์„ค๋ช…ํ•œ @shykes ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋‹จํ•œ -f ์˜ต์…˜์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. #7284

@drewcrawford ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ์— ์„ ํ˜ธ๋˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋˜๋ ค๋ฉด docker build ๊ฐ€ ์ตœ์†Œํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ•๋ ฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. make . 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • 1) Maven, scons, rake, ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  ์ข‹์€ ์˜ค๋ž˜๋œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ™์ด make์˜ ๋ชจ๋“  ๋ณ€ํ˜•์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๊ณผ ๊ฑฐ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๋Œ€์•ˆ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜๋Š”

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

make ํ•˜๋ฉด ์–ด๋–ค ๋ง›์˜ ๋ฉ”์ดํฌ๋ฅผ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”? ์–ด๋–ค ๋ฒ„์ „? ์ •ํ™•ํžˆ ์–ด๋–ค svn ์ฒดํฌ์•„์›ƒ์—์„œ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ๋นŒ๋“œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ์–ด๋–ค libc์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ท€ํ•˜๊ฐ€ ์–ธ๊ธ‰ํ•œ cc ๋Œ€ํ•œ ๋™์ผํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ make ์˜ ์ž„์˜ ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด ์•ฑ์ด ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์–ด์ฉŒ๋ฉด ์ค‘์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹น์‹ ๊ณผ ๋˜‘๊ฐ™์€ ๋นŒ๋“œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋‹น์‹ ์ด ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ Make์™€ Cc ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ค๋Š˜๋‚  ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ์ผ์ž…๋‹ˆ๋‹ค.

์ €๋Š” docker build ๋ฅผ ๋นŒ๋“œ ๋„๊ตฌ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ๋Š” ๋ฉ”ํƒ€ ๋นŒ๋“œ ๋„๊ตฌ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์•ˆ์ •์ ์œผ๋กœ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๋ ค์ง„ ์‹œ์ž‘์ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด #7115์˜ ๋™๊ธฐ์ž…๋‹ˆ๋‹ค.

@shykes make, Maven, rake ๋“ฑ์˜ _๋ชจ๋“ _ ๊ธฐ๋Šฅ์„ ์‹ค์ œ๋กœ ๋ณต์ œํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋Š” ์„œ๋กœ์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ๋“  ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ Dockerfile์ด ํ˜„์žฌ๋ณด๋‹ค ๋” ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ์–ธ์–ด๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(Docker๊ฐ€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ์— ์„ ํ˜ธ๋˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฒฝ์šฐ).

์ด๋ฒˆ ํ˜ธ์— ์‹ค๋ฆฐ ์ œ์•ˆ์€ ์‚ฌ์‹ค ๊ทธ ์„ ์„ ๋”ฐ๋ผ ๋‹ค์†Œ ๊ฒธ์†ํ•œ ์›€์ง์ž„์ž…๋‹ˆ๋‹ค. "make์˜ _targets_์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "์–ด๋–ค ๋ฒ„์ „์˜ make"์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ์‹ค์ œ๋กœ ๊ทธ๋ฆผ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "๋Œ€์ƒ"์˜ ๊ฐœ๋…์€ Maven, rake ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  ์ง„์ง€ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์€ ๋‹ค๋ฅด์ง€๋งŒ ๊ธฐ๋Šฅ ์ž์ฒด๊ฐ€ ๋ณดํŽธ์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์ด ๋ฌผ๊ฑด์„ ๋งŒ๋“ค ๋•Œ ์ž์ฃผ ํ•˜๋Š” ์ผ์ด๋ผ๋Š” ๋‹จ์„œ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

docker build -t my_project_builder .
# Builds the builder container
docker run my_project_builder my_target | docker build -t my_project/my_target -< Dockerfile_MyTarget
# target is built, tarballed, and sent to stdout, then piped into a new docker build as the context and custom Dockerfile name

@drewcrawford ํ™•์ธ์„ ์œ„ํ•ด docker๊ฐ€ Make target๊ณผ ๋™๋“ฑํ•œ ๊ฒƒ์„ ํ—ˆ์šฉํ•˜๋ฉด 1) ๋นŒ๋“œํ•  ๋Œ€์ƒ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. make clean; make foo , 2) ๊ธฐ๋ณธ์ ์œผ๋กœ _all_ ํƒ€๊ฒŸ์„ ๊ตฌ์ถ•ํ•˜๊ณ  3) ํƒ€๊ฒŸ์„ ์—ด๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค... ๊ทธ๊ฒŒ ๋‹น์‹ ์—๊ฒŒ ๋งŒ์กฑ์Šค๋Ÿฌ์šธ๊นŒ์š”?

๋งŒ์กฑ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค... ๋ชจ๋“  ๋Œ€์ƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋Œ€์‹  ๊ฐœ๋ฐœ์ž๊ฐ€ ์„ ํƒํ•œ ๋Œ€์ƒ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ˆ˜๋ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์•„.

@shykes @drewcrawford :+1:

์ผ์–ด๋‚  ์ผ์€ docker๊ฐ€ ์‚ฌ๋žŒ๋“ค์ด make๋กœ ํ˜ธ์ถœํ•˜๋Š” ์ƒˆ๋กœ์šด cc๊ฐ€ ๋˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ˜ธ์— ์‹ค๋ฆฐ ์ œ์•ˆ์€ ์‹ค์ œ๋กœ ๊ทธ ์„ ์„ ๋”ฐ๋ผ ๋‹ค์†Œ ๊ฒธ์†ํ•œ ์›€์ง์ž„์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ "์šฐ๋ฆฌ๋Š” make์˜ ๋ชฉํ‘œ์— ์ƒ์‘ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. "์–ด๋–ค ๋ฒ„์ „์˜ make"์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ์‹ค์ œ๋กœ ๊ทธ๋ฆผ์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "๋Œ€์ƒ"์˜ ๊ฐœ๋…์€ Maven, rake ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  ์ง„์ง€ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๋ฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์€ ๋‹ค๋ฅด์ง€๋งŒ ๊ธฐ๋Šฅ ์ž์ฒด๊ฐ€ ๋ณดํŽธ์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ์ด๊ฒƒ์ด ์‚ฌ๋žŒ๋“ค์ด ๋ฌผ๊ฑด์„ ๋งŒ๋“ค ๋•Œ ์ž์ฃผ ํ•˜๋Š” ์ผ์ด๋ผ๋Š” ๋‹จ์„œ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@drewcrawford :+1: +1,000,000

์ œ๊ฐ€ ๊ณ„์† ๊ฒช๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ์ €์žฅ์†Œ์—์„œ ๋‘ ๊ฐœ์˜ Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ํ•˜๋‚˜๋Š” ์„œ๋ฒ„์ด๊ณ  ํ•˜๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ํ•˜๋‚˜๋Š” ์„œ๋ฒ„์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” API ํ˜ธ์ถœ์„ ํ†ตํ•ด ์„œ๋ฒ„์— ๋Œ€ํ•ด ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. -f ๋ช…๋ น์€ Dockerfile๋กœ ์‚ฌ์šฉํ•  ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. Dockerfile์˜ ํ•˜์œ„ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ.

1๋ฒˆ์€ ๊ธˆ์ง€๋ผ๊ณ  ๋ฐ˜๋ณตํ•ด์„œ ๋งํ–ˆ๊ณ  2๋ฒˆ์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ํ›จ์”ฌ ๋” ์–ด๋ ต๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” "์ ์ ˆํ•œ" ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@ShawnMilo

@shykes ๋งˆ์ง€๋ง‰ ์˜๊ฒฌ์€ ์ด๊ฒƒ์ด ๋” ์ด์ƒ ์˜ˆ์ „๋งŒํผ ๋ถˆ์พŒํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ๊ธฐ์กด ์ œ์•ˆ์ด ์ ์ ˆํ•  ๊ฒƒ์ธ์ง€ ๋˜๋Š” ์ ์ ˆํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์—ฌ์ „ํžˆ ๋ถˆ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@jakehow ์—…๋ฐ์ดํŠธ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ณต์‹์ ์ธ ์ˆ˜์ •์€ ์•„์ง ๋ฉ€์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋™์•ˆ "์ข‹์€ ๋ฐฉ๋ฒ•"์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๊ฐ€์žฅ ์ข‹์€ ์•„์ด๋””์–ด๋Š” ํŒŒ์ผ์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ repo ๋ฃจํŠธ์˜ "Dockerfile"์— ๋ณต์‚ฌํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” bash ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค. ์ž‘๋™ํ•˜์ง€๋งŒ ๋”๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

@ShawnMilo ์˜ˆ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œ ๋„๊ตฌ(make, rake ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์˜ค๋ž˜๋œ bash ์Šคํฌ๋ฆฝํŒ…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์œ„์— ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด๊ฒƒ์„ ๋‹ค๋ฃจ๋Š” ๋นŒ๋” ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ์Šค๋‹ˆํŽซ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. v2 ๋ฐ v3๋ผ๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” Dockerfile.v2์™€ Dockerfile.v3์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ๋จผ์ € ln -s ./Dockerfile.v3 ./Dockerfile ํ•œ ๋‹ค์Œ docker build . ์‹ค์ œ๋กœ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๊ณ  ./build v3 ๋˜๋Š” ./build v2

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

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด PR #7995๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด (๊ธด :-)) ์Šค๋ ˆ๋“œ์—์„œ ๋…ผ์˜๋œ ์†”๋ฃจ์…˜ ์ค‘ ์ผ๋ถ€๋Š” ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ์— ๋งค์šฐ ๊ณ ํ†ต์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค. (์ €์—๊ฒŒ) Docker์˜ ๊ฐ€์žฅ ํฐ ํŒ๋งค ํฌ์ธํŠธ ์ค‘ ํ•˜๋‚˜๋Š” ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ณ ๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ๊ฝค ์‰ฌ์šด ์งˆ๋ฌธ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๋Š” ๊ฒƒ์ด ์˜ณ์ง€ ์•Š๋‹ค๊ณ  ๋Š๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋‚ด๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ "Dockerfile"์ด๋ผ๋Š” ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์ˆ ์  ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? PR์„ ๋งŒ๋“œ๋Š” ๋™์•ˆ PR์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ๊ณ  ๋ณ€๊ฒฝ์ด ์–ผ๋งˆ๋‚˜ ์‰ฌ์šด์ง€ ์ฆ๊ฒ๊ฒŒ ๋†€๋ž์Šต๋‹ˆ๋‹ค.

@duglin ๋‹น์‹ ์€ ๋‚ด ๋ชจ๋“  ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์— -f ์˜ต์…˜์ด ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

# build.sh
...
mv specialDockerfile Dockerfile
docker build -t $(PROJECT) .

-f ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ด๊ฒƒ์„ +1์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

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

+1000

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

๊ทธ๋Ÿฌ๋‚˜ repo ๋ฃจํŠธ์˜ .git ํด๋”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด repo์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด GOPATH ๊ฐ€ ์†์ƒ๋ฉ๋‹ˆ๋‹ค. ADD repo ๋ฃจํŠธ๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋‚ด ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋นŒ๋“œํ•ด์•ผ ํ•˜์ง€๋งŒ docker์—์„œ๋Š” ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์€ ํ›„ ๋นŒ๋“œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์šฐ๋ ค๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ -f ์˜ต์…˜์ด ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๋˜๋Š” ์•„๋ž˜์ชฝ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์— ์—ฌ๋Ÿฌ Dockerfile์„ ๊ฐ–๊ณ  repo ๋ฃจํŠธ์—์„œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์„ repo ๊ฒฝ๊ณ„ ๋‚ด๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .git/.hg/.foo์™€ ๊ฐ™์€ ์ˆ˜์ค€ ๋ฐ ๊ทธ ์ดํ•˜์ด์ง€๋งŒ repo ์™ธ๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค

FROM scratch
BUILD myname1 path/to/dockerfile/in/context
BUILD myname2 path/to/dockerfile2/in/context
docker build -t myimage .

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 3๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  1. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹ค์ œ๋กœ ์•„๋ฌด ๊ฒƒ๋„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” "myimage"๋ผ๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€
  2. myimage-myname1์ด๋ผ๋Š” ์ด๋ฏธ์ง€
  3. myimage-myname2๋ผ๋Š” ์ด๋ฏธ์ง€

BUILD ํ‚ค์›Œ๋“œ๋Š” Dockerfile์— ๋Œ€ํ•œ ์ด๋ฆ„๊ณผ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด Dockerfile์€ ์›๋ž˜ ์ปจํ…์ŠคํŠธ ๋‚ด์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ๋นŒ๋“œ ๋ช…๋ น์€ ๊ธฐ๋ณธ ๋นŒ๋“œ์—์„œ ์ „์ฒด ์ปจํ…์ŠคํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Dockerfile์ด ํฌํ•จ๋œ dir-tree๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

-1

์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์— dockerfeed ์™€ ๊ฐ™์ด ์ปจํ…์ŠคํŠธ ํ”ผ๋”๋ฅผ docker build - ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@itsafire ์š”์ ์€ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๊ธฐ๋Šฅ์„ Docker์— ๊ฐ€์ ธ์™€ ์ด๊ฒƒ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์ง€์›๋˜๋Š” ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ž๋™ํ™”๋œ ๋นŒ๋“œ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€ Docker์—์„œ ๊ฐ€์žฅ ์งœ์ฆ๋‚˜๋Š” ๊ฒฉ์ฐจ์ด๋ฉฐ ์ ์  ๋” ๋งŽ์€ ๋„๊ตฌ๊ฐ€ Docker๋ฅผ ๊ธฐ๋Šฅ์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•จ์— ๋”ฐ๋ผ '-f' ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ์„ ์‹ ์†ํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๊ฐ€ ์ค€๋น„๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ์ตœ์ข…์ ์ด ๋˜๊ธฐ ์ „์—... ๊ด€๋ จ: ์ด๋Ÿฌํ•œ ๊ด€๋ จ "๋ฉ”ํƒ€" ๋„๊ตฌ๋Š” ์ข…์ข… Dockerfile๋‹น _ํ•˜๋‚˜์˜_ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ค‘ ์ด๋ฏธ์ง€ Dockerfile์„ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ๋Š” ์ž˜๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ๋˜ํ•œ '-'๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋กœ ์ž˜๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์žˆ๋“ฏ์ด ๊ธฐ๋Šฅ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

๊ถŒํ•œ์ด ์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ์•„์ง ๋ณ‘ํ•ฉ๋˜์ง€ ์•Š์€ ์ด์œ  ๋˜๋Š” ์ ์–ด๋„ ์ด ๋งค์šฐ ๋ถ€์กฑํ•œ ๊ธฐ๋Šฅ์ด ์—ฌ์ „ํžˆ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŠธ์™€์ผ๋ผ์ž‡ ์กด์ฒ˜๋Ÿผ ๋Š๊ปด์ง€๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

Docker ํŒ€์ด Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹/Docker๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋งŽ์€ ๋ถ€๋ถ„์ด Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋ถˆ์ผ์น˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ‹€ ๋ ธ์œผ๋ฉด ๊ณ ์ณ์ค˜.

๋„์ปค ํŒ€์€ ๋ฐ๋น„์•ˆ ํ”„๋กœ์ ํŠธ์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์€ ์†Œํ”„ํŠธ์›จ์–ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ข‹์•„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์–ป๊ณ  ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ. ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•˜๊ณ  ๋ช…ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

Docker(์˜ˆ: .deb)๊ฐ€ ์–‘ ๋‹น์‚ฌ์ž์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํƒ€ํ˜‘์ด ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

@itsafire ๋งˆ์ง€๋ง‰์œผ๋กœ ํ™•์ธํ•œ ๊ฒฐ๊ณผ docker๋Š” Dockerfile ๋ฅผ ๋จน์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ปจํ…์ŠคํŠธ๋Š” ๋จน์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ Dockerfile์„ ์ œ๊ณตํ•˜๋ฉด ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ๋‹ซํžŒ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œ๋™์•ˆ ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ๊ธฐ๋ณธ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ค‘์— Dockerfile ๋ฐ context ๋ชจ๋‘ ์ œ๊ณตํ•˜๋Š” ๋ช…์‹œ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ์†”์งํžˆ ์ด๊ฒŒ 8๊ฐœ์›”์ด ์ง€๋‚œ ์ง€๊ธˆ๋„ ์—ด๋ ค ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์ถฉ๊ฒฉ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

@thedeeno ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
cat mystuff.tar.gz | docker build -

@ cpuguy83 ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ช…๋ น์œผ๋กœ ๋ช…์‹œ์  Dockerfile์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

@thedeeno ์˜ˆ, ์›ํ•˜๋Š” ์ปจํ…์ŠคํŠธ๋กœ ์›ํ•˜๋Š” Dockerfile์„ tar์—…ํ•ฉ๋‹ˆ๋‹ค.

@cpuguy83 @thedeeno ์•„๋‹ˆ์š”, ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Dockerfile์—์„œ ์–ป๋Š” "cwd" ๋ฒ”์œ„์— ํŒŒ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ด ์ง„์ˆ ์€ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @cpuguy83 ์˜ ์˜ˆ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

@ShawnMilo ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. tar์˜ ๋ชจ๋“  ๊ฒƒ์€ ์ปจํ…์ŠคํŠธ ๋‚ด์— ์žˆ์Šต๋‹ˆ๋‹ค.

@cpuguy83 ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ œ ์‹ค์ˆ˜์ž…๋‹ˆ๋‹ค. ์ „์ฒด tarball์ด ์•„๋‹ˆ๋ผ Dockerfile์— ํŒŒ์ดํ•‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ธ‰ํ•˜๊ฒŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค.

@cpuguy83 ์ข‹์•„์š” ! ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋‹ซ๊ธฐ ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

๋ถ€์ˆ˜์ ์ธ ์งˆ๋ฌธ, ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ์†”๋ฃจ์…˜ ํƒ€์ž„์Šคํƒฌํ”„๋Š” ๋ฌด๊ฒŒ๋ฅผ ์ธก์ •ํ•  ๋•Œ ์บ์‹œ๋ฅผ ํŒŒ์—ด์‹œ์ผฐ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์•„์ง๋„ ๋ฌธ์ œ์•ผ? ๋™์ผํ•œ ํด๋”๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ tarํ•˜๋ฉด ๋นŒ๋“œ ์‹œ ์บ์‹œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๊นŒ?

์•ž์œผ๋กœ๋„ ํž˜์จ์ฃผ์„ธ์š”!

์ „์ฒด ์ปจํ…์ŠคํŠธ๋ฅผ ํŒŒ์ดํ•‘ํ•˜๋Š” ๊ฒƒ์€ ์œ„์—์„œ ์ด์•ผ๊ธฐํ•œ ๋‚ด์šฉ์„ ์ „ํ˜€ ์™„ํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋””๋ ‰ํ† ๋ฆฌ๋ฅผ tar-ballingํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ฌธ์ œ์— ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ํŠน๋ณ„ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— ํŠน์ • Dockerfile์„ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ์ „์ฒด ์ปจํ…์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์ƒˆ Dockerfile์„ tarํ•˜๊ณ  ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ gzip์œผ๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ docker๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์˜ฌ๋ฐ”๋ฅธ Dockerfile์„ ์ œ์ž๋ฆฌ์— ๋ฐฐ์น˜ํ•˜๋Š” ์ „์ฒ˜๋ฆฌ๊ธฐ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜„์žฌ ์ฑ„ํƒํ•ด์•ผ ํ•˜๋Š” [๋งค์šฐ ๋”์ฐํ•œ] ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋ณด๋‹ค ์–ด๋–ป๊ฒŒ ์‰ฝ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Docker ์ƒํƒœ๊ณ„์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์ณค๋‚˜์š”?

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ๊ฐ„๋‹จํ•œ '-f' ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ์ œ๋ฐœ. ์ œ๋ฐœ, ์ด์˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”. ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

@davber ๋‹น์‹ ์ด ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ Docker๊ฐ€ tarballing ์ปจํ…์ŠคํŠธ์™€ Dockerfile์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์ด๊ฒƒ์— ์™„์ „ํžˆ ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ ๋นŒ๋“œ๊ฐ€ ์ด์— ๋Œ€ํ•œ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@cpuguy83 : ์˜ˆ, ๊ทธ๋ž˜์„œ Docker๊ฐ€ ์ €๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฅผ

์ค‘์ฒฉ ๋นŒ๋“œ๋Š” ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฃจํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ, 'Dockerfile'์ด๋ผ๋Š” ์ •ํ™•ํ•œ Dockerfile๊ณผ ์ปจํ…์ŠคํŠธ์˜ ์ด์ƒํ•œ ๊ฒฐํ•ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์ด์ƒ์ ์ด์ง€ ์•Š์œผ๋ฉฐ ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์›๋ณธ ํŒŒ์ผ๊ณผ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด rsync๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

@cpuguy83 : ์ค‘์ฒฉ๋œ ๋นŒ๋“œ๊ฐ€ ์ง•์ง•๊ฑฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ "์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? :-)

@davber
์ด์— ๋Œ€ํ•œ ๋‚˜์˜ ๊ฒฌํ•ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

FROM scratch
BUILD myname1 path/to/dockerfile
BUILD myname2 path/to/another/dockerfile

์ด:

docker build -t myimage .

"myimage", "myimage-myname1", "myimage-myname2"๋ผ๋Š” 3๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
๊ฐ ๋‚ด๋ถ€ ๋นŒ๋“œ๋Š” ์ „์ฒด ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€ ๊ฒฝ๋กœ๋Š” Dockerfile์— ์ƒ๋Œ€์ ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  "myimage"๋Š” BUILD ๋ช…๋ น์„ ๋„˜์–ด ์ž์ฒด์ ์ธ ๊ฒƒ์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋” ํฐ(๊ทธ๋ฆฌ๊ณ  ํ›Œ๋ฅญํ•œ!) Docker ์ƒํƒœ๊ณ„์˜ ๋งŽ์€ ์ƒˆ๋กœ์šด ๋„๊ตฌ๋Š” ๊ฐ Dockerfile์ด ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ Docker ์ด๋ฏธ์ง€์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ "๋ฌดํ™”๊ณผ"์™€ ๊ฐ™์€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Docker์— ๋Œ€ํ•œ ํŠน์ • ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๋งŽ์€ ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด ํด๋ผ์šฐ๋“œ ์†”๋ฃจ์…˜์—๋„ ์ด๋Ÿฌํ•œ ์ผ๋Œ€์ผ ๊ฐ€์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  '-f' ์˜ต์…˜์œผ๋กœ ์ƒ์„ฑ๋œ ์„ธ๊ณ„์—์„œ๋Š” ์ปจํ…์ŠคํŠธ(์˜ˆ: tar ๋ณผ)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž ์žฌ์ ์œผ๋กœ ๋ณ„๋„์˜ Dockerfile๋„ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ฐ ์—…๋กœ๋“œ๋Š” ์—ฌ์ „ํžˆ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ Docker ์ด๋ฏธ์ง€์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

Dockerfile์„ ์ปจํ…์ŠคํŠธ ๋ฃจํŠธ์—์„œ ์ž ์žฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๊ฐ€ ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์‹œ์ž‘๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Each deployment/use of a Docker image is done with an upload of either:

   1. a Dockerfile solely, when no contextual operations are needed
   2. a context tar ball only, containing the context with a top-level Dockerfile
   3. both a context tar ball and a separate Dockerfile

์ปจํ…์ŠคํŠธ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ 'Dockerfile'์˜ ๊ฐ•๋ ฅํ•œ ๊ฒฐํ•ฉ์„ ์˜ค๋ž˜ ์œ ์ง€ํ• ์ˆ˜๋ก ์ƒํƒœํ•™์— ๋” ๊นŠ์ด ๋ฟŒ๋ฆฌ ๋‚ด๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Docker ์„ธ๊ณ„๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ›Œ๋ฅญํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ์›€์ง์ด๋ฏ€๋กœ ์ง€๊ธˆ ํ–‰๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ, Dockerfile๊ณผ ์ด๋ฏธ์ง€ ์‚ฌ์ด์— ๋™ํ˜•์„ ๊ฐ–๋Š”๋‹ค๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ด๊ณ  ๊ฐœ๋…์ ์œผ๋กœ ๋งค๋ ฅ์ ์ธ ๊ฐ€์ •์ž…๋‹ˆ๋‹ค. ์ „์ž๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ์ปจํ…์ŠคํŠธ ๋””๋ ‰ํ† ๋ฆฌ(tared up...)์™€ Dockerfile์˜ ์ œํ’ˆ ๊ณต๊ฐ„์ด ๋  ๊ฒƒ์ด๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ (null, file) Dockerfile๋งŒ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ (context, context/'Dockerfile') ์ปจํ…์ŠคํŠธ๋งŒ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ.

๊ทธ๋ฆฌ๊ณ  ๋กœ์ปฌ ๋ฐฐํฌ์˜ ๊ฒฝ์šฐ์—๋„ ์ตœ์†Œํ•œ ๋กœ์ปฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์— Fig๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด๋Ÿฌํ•œ ๋‹ค์ค‘ ๋นŒ๋“œ Dockerfile์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“  ๋‹ค์Œ ๊ทธ๋ฆผ์˜ ํ•ด๋‹น ์ด๋ฏธ์ง€๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ ์ด ์•„๋‹™๋‹ˆ๋‹ค.

Dockerfile๊ณผ ์ด๋ฏธ์ง€ ๊ฐ„์˜ ๋™ํ˜•

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

@hanikesn : ๋‘ ๊ฐœ์˜ ๋Œ“๊ธ€:

  1. ๋นŒ๋“œํ•˜๊ธฐ ์ „์— Dockerfiles๋ฅผ ์ œ์ž๋ฆฌ์— ๋ณต์‚ฌํ•ด์•ผ ํ•ด์„œ ๊ทธ ๊ฐ€์ •์ด ๊นจ์ง€๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์—ฌ์ „ํžˆ ํ•˜๋‚˜์˜ Dockerfile <-> ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๊ฐ€ ๋ ๊นŒ์š”?
  2. ๋‚ด๊ฐ€ ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์€ ์ด ํ™˜๊ฒฝ์—์„œ ๋„ˆ๋ฌด ํฐ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ์กด ๋ฐ ์„ฑ์žฅํ•˜๋Š” Docker ํ™˜๊ฒฝ๊ณผ _์ž‘์—…_ํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ์†”๋ฃจ์…˜์ด ๋ฌด์—‡์ด๋“  ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋™ํ˜•๋ก ์ด ์–ธ๊ธ‰๋œ _์œ ์ง€_์— ์˜ํ•ด ๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

@davber

์ค‘์ฒฉ ๋นŒ๋“œ๋Š” ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์•ž์—์„œ ์ด๋ฏธ ์ง€์ ํ•œ ์ด ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

$ docker-pre-processor [ --options ... ] . | docker build -

๋ฐ˜๋ฉด --options ๋Š” (์—ฌ๊ธฐ) ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด docker์— ์ „๋‹ฌ๋˜๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ปจํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ์ž„์‹œ tar ์•„์นด์ด๋ธŒ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ฆ‰์„์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์†Œ์Šค ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile ๊ตฌ๋ฌธ๋ณด๋‹ค ์ „์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

@itsafire

์˜ค๋Š˜๋‚  Dockerfiles๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๋„๊ตฌ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ Amazon, Google ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ ์  ๋” ํ’๋ถ€ํ•ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Fig ๋ฐ ์œ ์‚ฌํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ‘œ์ค€ํ™”๋œ '๋„์ปค ์ „์ฒ˜๋ฆฌ๊ธฐ' ๋„๊ตฌ์™€ ์ด๋Ÿฌํ•œ ๋„๊ตฌ์˜ ์‚ฌ์šฉ์„ ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ, ๊ณต๊ธ‰์ž ๋ฐ ๋„๊ตฌ์— ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์˜ต์…˜์„ '๋„์ปค'๋กœ ์ ์ ˆํ•˜๊ฒŒ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@itsafire ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์€ ์ด๋ฏธ ์ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ข…์˜ ์ „์ฒ˜๋ฆฌ๊ธฐ ๋˜๋Š” ๋„์ปค ๋นŒ๋“œ ์ฃผ๋ณ€ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ƒํ™ฉ์„ ๋‘˜๋Ÿฌ์‹ผ ๋‹จํŽธํ™”๋Š” @docker ํŒ€์˜ ๋ช…์‹œ๋œ ๋ชฉํ‘œ์ธ '๋ฐ˜๋ณต์„ฑ'๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ๋ก ๊ณผ ๋‹ค๋ฅธ ํ† ๋ก ์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1๋…„ ์ด์ƒ ๋ฐ 130๊ฐœ ์ด์ƒ์˜ ๋Œ“๊ธ€๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ณ„์‚ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ์ผ์„ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค, ๋„์ปค!

+1

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

`-- project
     |-- deploy
     |    |-- .dockerignore
     |    |-- Dockerfile
     |    ...
     `-- src

๋‚ด ๋ฐฉ๋ฒ•์€ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ADD ../src ๋ฐ -f deploy/Dockerfile ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— Dockerfile ๋ฐ .dockerignore ๊ฐ€ ์žˆ์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

ํ•„์ž๋Š” .dockerignore ํŒŒ์ผ์ด ADD ์˜ํ•ด ๋ฌด์‹œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•œ ํŒŒ์ผ์ด ์žˆ๋Š” ํด๋”๋ฅผ ์ค€๋น„ํ•˜๊ณ  ํ‘œ์ค€ ๋ช…๋ น์ค„ docker build -t my/image . ์„ ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค ADD ...

+1 ๋‹จ์ผ ์ €์žฅ์†Œ์— ์—ฌ๋Ÿฌ Dockerfile์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€: ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋Š” ํ”„๋กœ๋•์…˜ ์‚ฌ์šฉ ๋ฐ ๋ฐฐํฌ์šฉ์ด๊ณ  ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋Š” ๋™์ผํ•œ ๋ฐฑ์—”๋“œ ๋„๊ตฌ ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ณด๊ณ  ์ธ์Šคํ„ด์Šค์ด์ง€๋งŒ ํ”„๋ก ํŠธ์—”๋“œ, ์›น, ์‹œ์Šคํ…œ ์„œ๋น„์Šค ๋˜๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ๋…์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

์ด๊ฒƒ์— ๋Œ€ํ•ด +1. ๋‹ค๋ฅธ ์„œ๋ฒ„์— ๋Œ€ํ•ด ๋™์ผํ•œ ํด๋”์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์— ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

+1 ์ง€๊ธˆ๊นŒ์ง€๋Š” Docker๋ฅผ ์ฆ๊ธฐ๊ณ  ์žˆ์ง€๋งŒ ํŒ€์ด ์„ค์ •ํ•œ ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ข‹์€ ์ฝ”๋“œ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฐํฌ ๊ฐ€๋Šฅ ํ•ญ๋ชฉ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์ •๋ง ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌ/๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— uberdocker ์ปจํ…Œ์ด๋„ˆ์— ๋ชจ๋‘ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์„ ํŠน๋ณ„ํžˆ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@jfgreen : ์›ํ•˜๋Š” ๊ณณ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ Dockerfile์„ ๋†“๊ณ  ์›ํ•˜๋Š” ๋Œ€๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ "./Dockerfile"๋กœ repo ๋ฃจํŠธ์— ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ณต์‚ฌํ•˜๊ณ  "docker build"๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์‚ญ์ œํ•˜๋Š” bash ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ํ•˜๋Š” ์ผ์ด๋ฉฐ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Dockerfile์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ๊ธฐ๋ณธ, ํ…Œ์ŠคํŠธ ๋“ฑ๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ํฌํ•จ๋œ "dockerfiles" ํด๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@ShawnMilo ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

+1

+1

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

       make [ -f makefile ] [ options ] ... [ targets ] ...

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

+1

+1(๋˜๋Š” ๊ถŒ์žฅ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํฌํ•จ๋œ ๊ณต์‹ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ)

+1

+1

@crosbymichael #9707์ด ๋ณ‘ํ•ฉ๋˜์–ด ์ง€๊ธˆ ๋‹ซ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์Šน๋ฆฌ.

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

master.dockerproject.com

@duglin ๊ฐ์‚ฌ

:๋ฐ•์ˆ˜:

๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•ด @crosbymichael ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! :+1:

์ž˜ํ–ˆ์–ด ์–˜๋“ค์•„! :๋ฐ•์ˆ˜:

docker build -f Dockerfile.dev . ์ž…๋‹ˆ๊นŒ? ํŽธ์ง‘: ๋„ค

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