Moby: Dockerfile์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

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

์˜ˆ๋ฅผ ๋“ค์–ด postgresql ํด๋ผ์ด์–ธํŠธ ์„ค์ •, ์ผ๋ฐ˜ Python ์•ฑ ํ™˜๊ฒฝ ์„ค์ • ๋“ฑ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ Dockerfile์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ์ด๋ฏธ์ง€๋ฅผ ๊ฒฐํ•ฉํ•œ ๋‹ค์Œ ๋” ๋งŽ์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” Python ์›น ์•ฑ์šฉ Dockerfile์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ฌธ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ–ˆ๋‹ค๋ฉด FROM ๋ฅผ ๋‘ ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ ์ด๋ฏธ์ง€์— ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๊นŒ?

arebuilder kinfeature

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

genericA --> specificA ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

genericA --
            \
             ---> specificAB
            /
genericB --

?

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

๋‹น์‹ ์€ ๊ทธ๋“ค์„ ์ฒด์ธ :)

์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ฐ˜ postgres ํด๋ผ์ด์–ธํŠธ์™€ ์ผ๋ฐ˜ python ์•ฑ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๋Š” Dockerfile์ด ํ•˜๋‚˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋นŒ๋“œ์˜ ๊ฒฐ๊ณผ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: mygenericenv ). ๊ทธ๋Ÿฌ๋ฉด ํ›„์† Dockerfile์€ FROM mygenericenv .

์˜ˆ๋ฅผ ๋“ค์–ด

## Dockerfile.genericwebapp might have FROM ubuntu
cat Dockerfile.genericwebapp | docker build -t genericwebapp -
## Dockerfile.genericpython-web would have FROM genericwebapp
cat Dockerfile.genericpython-web | docker build -t genericpython-web -
## and then this specific app i'm testing might have a docker file that containers FROM genericpython-web
docker build -t thisapp .

genericA --> specificA ์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

genericA --
            \
             ---> specificAB
            /
genericB --

?

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

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

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

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

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

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

Ansible, Chef ๋˜๋Š” ๊ธฐํƒ€ ๊ตฌ์„ฑ ๊ด€๋ฆฌ์— ์˜์กดํ•˜์—ฌ "๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ ์š”์†Œ"๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ˆ„์ˆ˜ ์ถ”์ƒํ™”์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์‹ค์ œ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•œ ์‹œ์Šคํ…œ์—์„œ ๋‹ค์Œ ์‹œ์Šคํ…œ์œผ๋กœ ๋ฐฑ๋งŒ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ๋นŒ๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ชจ๋“  ์ถ”๊ฐ€ ์ถ”์ƒํ™”๋Š” ๋‹น์‹ ์—๊ฒŒ ๊ฑฐ์˜ ์ด๋“์ด ๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ ์กฐ์–ธ์€ 1) ์†Œ์Šค ์ฝ”๋“œ, 2) ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‘ ๊ฐ€์ง€์— ์ค‘์ ์„ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ์‹ ๋ขฐํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ 2 ๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

2013๋…„ 12์›” 29์ผ ์ผ์š”์ผ ์˜คํ›„ 1์‹œ 46๋ถ„, anentropic [email protected]
์ผ๋‹ค:

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

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

๋” ๋งŽ์€ ๊ด€์ ์„ ์ œ๊ณตํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Dockerfiles์˜ ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋„๊ตฌ๋Š” ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ๋ผ๋Š” ๋ง์”€์ด์‹ ๊ฐ€์š”? '์šด์˜'๋ณด๋‹ค '๊ฐœ๋ฐœ'์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด ์•ฝ๊ฐ„ ์ž˜๋ชป๋œ ๋Š๋‚Œ์ด ๋“ญ๋‹ˆ๋‹ค.

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

๋ฌธ์„œ๊ฐ€ ํ˜„์žฌ Docker๋ฅผ ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์•ˆ๋‚ดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@anentropic Dockerfile์„ ์‚ฌ์šฉ ํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ Dockerfile๋กœ ์—ฌ๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. Dockerfile 1์€ Ubuntu ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ์œ„์— ์ผ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ , Dockerfile 2๋Š” Dockerfile 1์˜ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„์šฉ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ , Dockerfile 3์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ˆ˜ ์—ญํ• ์— ๋Œ€ํ•ด ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. .

docker build ๋Š” ์‹คํ–‰ํ•˜๊ธฐ ๋งค์šฐ ์‰ฌ์›Œ์•ผ ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

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

์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค ... ์œ„์˜ ASCII ์•„ํŠธ๋กœ ์š”์•ฝ ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ Docker ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋…๋ฆฝ ์ด๋ฏธ์ง€ GenericA ๋ฐ GenericB ์šฉ Dockerfile๋กœ ์‹œ์ž‘
  • ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค๋ ค๋ฉด SpecificAB ๋‚ด๊ฐ€ ๋ณต์‚ฌ์˜ ๋‚ด์šฉ์„ ๋ถ™์—ฌ ๊ฒƒ GenericB ์ƒˆ๋กœ์šด Dockerfile์— Dockerfile์„ ๊ทธ์™€ ํ•จ๊ป˜ ์‹œ์ž‘ : FROM GenericA

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

๊ณต๊ฐœ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด, "postgres"๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค... ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด๋ฏธ์ง€์˜ ์œ ์šฉ์„ฑ์„ ์–ด๋–ป๊ฒŒ ํŒ๋‹จ(๋˜๋Š” ๊ตฌ๋ณ„)ํ•ฉ๋‹ˆ๊นŒ:

?

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

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

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ https://github ์—์„œ ๊ฑฐ๋ถ€๋œ 'ํฌํ•จ' ๋ช…๋ น์— ๋Œ€ํ•œ ์ œ์•ˆ๊ณผ ๊ฐ™์ด Dockerfile์˜ ์ผ๋ จ์˜ ๋ช…๋ น์„ ๋ ˆ์‹œํ”ผ๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•(๋ณต์‚ฌ ๋ฐ ๋ถ™์—ฌ๋„ฃ๊ธฐ ์ œ์™ธ)์ด ์—†๋Š” ๊ฒƒ์ด ๋ถ€๋„๋Ÿฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@anentropic ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ postgres Dockerfile์„ ์ฐพ์•„ ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

ubuntu , centos ๋ฐ stackbrew/* ์ผ๋ถ€ ์ด๋ฏธ์ง€๋Š” ํ•„์š”ํ•œ ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€์˜ ์˜ˆ๋Š” stackbrew/registry ์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด docker pull stackbrew/registry ๋ฐ docker run -p stackbrew/registry ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ๊ฐœ์ธ Docker ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker์˜ ๋ชฉํ‘œ๋Š” ๋ฐฐํฌ๋ฅผ ๋•๊ณ  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋นŒ๋“œ๊ฐ€ ์„ ํ˜•์ด๊ณ  ์ดˆ๊ธฐ ๋นŒ๋“œ ์ค‘์—๋งŒ ์ˆ˜ํ–‰๋˜์ง€๋งŒ ๋งค๋ฒˆ ๋˜‘๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

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

์˜ค๋ž˜๋œ ์Šค๋ ˆ๋“œ๋ฅผ necroํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•˜์ง€๋งŒ IMHO๊ฐ€ ์›๋ณธ ํฌ์Šคํ„ฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์—์„œ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ๋ชจ๋‘ ๋™์ผํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ R ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. A ์„œ๋น„์Šค์™€ B ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋ณ„๋„์˜ Docker ์ด๋ฏธ์ง€์™€ ๋™์ผํ•œ Docker ์ด๋ฏธ์ง€์— ๋ชจ๋‘ ์›ํ•ฉ๋‹ˆ๋‹ค.

A ์„œ๋น„์Šค๋ฅผ ์„ค์น˜ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  B ์„œ๋น„์Šค๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ณ„๋„์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ A ์Šคํฌ๋ฆฝํŠธ์™€ B ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋œ git repo๊ฐ€ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๋  3๊ฐœ์˜ Docker ์ด๋ฏธ์ง€ ๋ชจ๋‘์— ๋Œ€ํ•œ git repos๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์—๋Š” ์‚ฌ์šฉ๋  ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋Š” git ํ•˜์œ„ ๋ชจ๋“ˆ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ Dockerfile์€ ๋‹จ์ˆœํžˆ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ADD ํ•œ ๋‹ค์Œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ RUN ํ•˜๊ณ  ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘์— ๋Œ€ํ•ด ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ๊ณ ์ •ํ•˜์„ธ์š”.

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

์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ์„ค๋ช…์„ ์œ„ํ•ด ๋‹ต๊ธ€์„ ๋‹ต๋‹ˆ๋‹ค. ๊ณต์‹ ์…€๋ ˆ๋Š„ ๋„์ปค ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ Ubuntu 11์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์šฐ๋ถ„ํˆฌ 15๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

https://github.com/SeleniumHQ/docker-selenium/blob/master/Base/Dockerfile

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

@rjurney ๋„ค, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์˜ˆ์—์„œ ์ „์ฒด Dockerfile์€ ubuntu:15.04 ๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ubuntu:11 ์—์„œ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜

Docker๋Š” ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์™€ ์ด๋ฏธ์ง€ ๊ฐ„์˜ _differences_๋งŒ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ด๋ฏธ์ง€์˜ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ "๊ต์ฒด"ํ•˜๋Š” ๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: "ํŒŒ์ผ X ์ œ๊ฑฐ", ์—ฌ๊ธฐ์„œ "ํŒŒ์ผ X"๋Š” ์›๋ž˜ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์— ์žˆ์ง€๋งŒ ์„ ํƒํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์—๋Š” ์—†์Œ). ๋˜ํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์˜ "์œ„์—" ๋นŒ๋“œ๋˜๋Š” ์ด๋ฏธ์ง€์˜ ํŒจํ‚ค์ง€/๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” _that_ ๋ฒ„์ „์šฉ์œผ๋กœ ๋นŒ๋“œ๋œ ํŒจํ‚ค์ง€์ด๋ฉฐ, ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ๋‹ค๋ฅธ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

(๋˜ํ•œ ๊ณต์‹ ubuntu:11 ์ด๋ฏธ์ง€๊ฐ€ ์—†์Œ์„ ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค)

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

2015๋…„ 12์›” 9์ผ ์ˆ˜์š”์ผ, Sebastiaan van Stijn <
[email protected]>์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@rjurney https://github.com/rjurney ์˜ˆ, ๊ทธ๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ~์—
๊ท€ํ•˜์˜ ์˜ˆ์—์„œ ์ „์ฒด Dockerfile์€ ubuntu:15.04 ๋ฅผ ์—ผ๋‘์— ๋‘๊ณ  ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
ubuntu:11 ์—์„œ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜
๊ทธ๋“ค์—? Dockerfile์—์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ฒ„์ „์˜ Ubuntu์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

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

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

์˜ˆ. ๊ณต์‹ ์ด๋ฏธ์ง€๋Š” ํ•ด๋‹น ์ด๋ฏธ์ง€์˜ ๊ด€๋ฆฌ์ž๊ฐ€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
(์ด ๊ฒฝ์šฐ Selenium์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค). ๋ณ€ํ™”๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด
์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ์—์„œ ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ทธ๋“ค์˜ ์ €์žฅ์†Œ. ํ•ด๋‹น ๊ธฐ๋Šฅ ์š”์ฒญ์ด ์ˆ˜๋ฝ๋˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ์ž์‹ ์˜ ๋ฒ„์ „์„ ๋นŒ๋“œํ•˜์‹ญ์‹œ์˜ค.

(๋˜ํ•œ ๊ณต์‹ ubuntu:11 ์ด๋ฏธ์ง€๊ฐ€ ์—†์Œ์„ ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค)

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

@rjurney ๋‹ค์ค‘ ์ƒ์†์€ ๊ฒฐ๊ณผ, ์ฝ”๋„ˆ ์ผ€์ด์Šค ๋ฐ ๋น„ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งค์šฐ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

12749๋Š” ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ์‹œ๋„์˜€์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ์ž‘์—…์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ์ƒ๋‹นํžˆ ๊ฐœ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋ฐ˜ ๋นŒ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•˜์—ฌ ๋นŒ๋”์—์„œ ์ˆ˜ํ–‰ ์ค‘์ธ ๋งŽ์€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๊ฒƒ์€ ๋‚ด ํ•„์š”๋ฅผ ์ถฉ์กฑ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ค. ์ผ๋ถ€ ์†์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ
dockerfile ์ฒด์ธ.

์ข‹์•„, ๋‹น์‹ ์ด ์ด๊ฒƒ์˜ ๊ผญ๋Œ€๊ธฐ์— ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ๋“ค์œผ๋‹ˆ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

2015๋…„ 12์›” 9์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 9์‹œ 59๋ถ„์— Brian Goff [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@rjurney https://github.com/rjurney ๋‹ค์ค‘ ์ƒ์†๋„
๋งค์šฐ ๋ณต์žกํ•˜๋ฉฐ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ, ์ฝ”๋„ˆ ์ผ€์ด์Šค ๋ฐ ๋น„ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด.

12749 https://github.com/docker/docker/pull/12749 ๊ฐ€ ์ตœ์‹ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ์‹œ๋„ -- ๊ฒฐ๊ตญ ๊ฑฐ๋ถ€๋จ
๋จผ์ € ํ•ด์•ผ ํ•  ๋‹ค๋ฅธ ์ž‘์—….
ํ™œ์„ฑํ™”๋ฅผ ํฌํ•จํ•˜์—ฌ ๋นŒ๋”์—์„œ ์ˆ˜ํ–‰ ์ค‘์ธ ๋งŽ์€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ ๊ฝค ๋งŽ์ด ์—ด ์ˆ˜ ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ ์ฃผ๋„ ๋นŒ๋“œ.

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

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

@rjurney ์ •๋ณด๋Š” ์–ด๋””์„œ ์–ป

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

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

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

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์— ๋™์˜ํ•˜๋ฏ€๋กœ +1.

2015๋…„ 12์›” 9์ผ ์ˆ˜์š”์ผ, Bill C Riemers [email protected]
์ผ๋‹ค:

@rjurney https://github.com/rjurney ์ •๋ณด๋Š” ์–ด๋””์„œ ์–ป๋‚˜์š” ?
๋‚ด๊ฐ€ ์•„๋Š” ํ•œ Java์—๋Š” ๋‹ค์ค‘ ์ƒ์†์ด ์—†์—ˆ๊ณ  ์•ž์œผ๋กœ๋„ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋งŽ์€ ์–ธ์–ด์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
์ƒ์†์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งค์šฐ ์œ ํ•ดํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์˜ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

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

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

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

์ด์ฏค๋˜๋ฉด ์ž… ๋‹ค๋ฌผ๊ฒ ์ง€๋งŒ, ์‹ค์ˆ˜๋กœ ์ด ํ‹ฐ์ผ“ ๋Œ€์‹ ์— ์•ž์„œ ์–ธ๊ธ‰ํ•œ ํ’€ ๋ฆฌํ€˜์ŠคํŠธ์— ์ด ์š•์„ค์„ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์— ์˜ฌ๋ฆฝ๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ด๊ฒƒ์„ ๊ตฌ์ถ•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. INCLUDE๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” pull์„ ์ˆ˜๋ฝํ•˜์ง€ ์•Š์œผ๋ฉด ์ด ๊ธฐ๋Šฅ์ด ์ง€์—ฐ๋˜๊ณ  ๊ตฌ์ฒดํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—ฌ๊ธฐ์—์„œ ๊ฒฐ์ •์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋„์ปค ๋‚ด๋ถ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋„์ปค ์™ธ๋ถ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

ํ•œ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ๋– ์˜ค๋ฆ…๋‹ˆ๋‹ค. Apache Pig์—์„œ ํŒ€์€ ๋ฃจํ”„์— ๋Œ€ํ•œ ๋งŽ์€ ์š”์ฒญ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ฃจํ”„๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Pig๊ฐ€ DAG ๋ฐ์ดํ„ฐ ํ๋ฆ„์— ์ ํ•ฉํ•ด์•ผ ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์ „๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹ , pig ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์Šคํฌ๋ฆฝํŒ…ํ•˜๊ธฐ ์œ„ํ•ด ํ†ตํ•ฉ์ด ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  JVM ์–ธ์–ด์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜์‹์ ์ธ ๊ฒฐ์ •์ด์—ˆ๊ณ  ๋Œ€์•ˆ์„ ์ถ”๊ตฌํ–ˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ชจ๋ธ ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

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

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

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

ํ˜น์‹œ๋ผ๋„ ์‹ ๊ฒฝ์“ฐ์‹œ๋Š” ๋ถ„์ด ๊ณ„์‹œ๋‹ค๋ฉด...

Pig์˜ ๋ฃจํ”„ ๋ฐ ๋งคํฌ๋กœ์— ๋Œ€ํ•œ ๋ฐ˜์ฏค ์ฑ„ํƒ๋œ ํ”„๋ ˆ์  ํ…Œ์ด์…˜: http://wiki.apache.org/pig/TuringCompletePig
๋ผ์ง€ ๋งคํฌ๋กœ JIRA: https://issues.apache.org/jira/browse/PIG-1793
Pig JIRA์— ๋Œ€ํ•œ API ์ธํ„ฐํŽ˜์ด์Šค: https://issues.apache.org/jira/browse/PIG-1333
Apache Hive๋ฅผ ์กด์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ์™„์ „ํžˆ ๊ฑฐ๋ถ€๋œ ๊ฒƒ... Pig์— SQL ์ถ”๊ฐ€: https://issues.apache.org/jira/browse/PIG-824

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

INCLUDE ์•„์ด๋””์–ด์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค. ์ƒ์†์„ ๊ธˆ์ง€ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋€” ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด์ œ ์ƒ์†๋ฐ›๋Š” ์ฃผ๋ฅ˜ ์ด๋ฏธ์ง€๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฌํ•จํ•˜๋Š” ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ์กด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ํ•ญ๋ชฉ์„ ์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์šด์˜ ์ฒด์ œ ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ์ด๋ฏธ์ง€๋ฅผ "ํฌํ•จ ๊ฐ€๋Šฅ"์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ๋„์ปค ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์—์„œ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ ์ ์ ˆํ•˜๊ฒŒ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์€ ์ด๋ฏธ์ง€๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ๋ง์€ ๊ทธ๊ฒƒ์„ ์ง๋ฉดํ•˜์ž๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Dockerfiles๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€๊ณ  ์žˆ๋‹ค๋ฉด ์•„๋งˆ๋„ ์ฒ˜์Œ์œผ๋กœ ๊ทธ์˜ ์ปดํ“จํ„ฐ๋ฅผ ๋ณด๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹ ๊ฒƒ์ด๋ฏ€๋กœ docker์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋ฆฌ์„์€ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ ์กฐ๊ธˆ ๋” ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•œ ์ž์œ . ์ง„์‹ฌ์œผ๋กœ, ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ณ  ๋‚ด ์•ฑ์„ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์— ์›ํ•˜๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์ •๋ง ๋Œ€๋‹จํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌํ•จ์— ๋Œ€ํ•ด +1. nginx์™€ ssh ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์™œ ์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์›Œ์•ผ ํ•ฉ๋‹ˆ๊นŒ?

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

2016๋…„ 1์›” 23์ผ ํ† ์š”์ผ ์˜คํ›„ 6์‹œ 22๋ถ„์— Vazy [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

ํฌํ•จ์— ๋Œ€ํ•ด +1. nginx์™€ ssh ์ด๋ฏธ์ง€๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์™œ
์ด๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์›Œ์•ผ ํ•ฉ๋‹ˆ๊นŒ?

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

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

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

2016๋…„ 1์›” 24์ผ ์ผ์š”์ผ Vincent Demeester [email protected]
์ผ๋‹ค:

@rjurney https://github.com/rjurney ๋นŒ๋“œ ์Šคํ•€์•„์›ƒ์„ ๊ธฐ๋‹ค๋ฆฌ์ž ;
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‘ ๊ฐ€์ง€ ์ด์ƒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ
์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋”๊ฐ€ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Œ). ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋„์ปค
์œ ์ง€ ๊ด€๋ฆฌ์ž(Docker์—์„œ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ)๋Š” ์ด์— ๋Œ€ํ•ด ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค.
์œ ์—ฐ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ณต์žก์„ฑ์ด ์ถ”๊ฐ€๋˜๊ณ 
๊ฐ„๋‹จ. ๋นŒ๋”๋ฅผ ์ถ”์ถœํ•˜๋ฉด
(์ด๋ฏธ์ง€ ๋นŒ๋“œ์™€ ์‹คํ–‰ ์‚ฌ์ด) ๋ฐ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€
์ปค์Šคํ…€ ๋นŒ๋”์—์„œ ๋” ์ž์œ ๋กญ๊ฒŒ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

+1, ์ด๋ฏธ์ง€๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. (์‹ ์ด ๊ธˆ์ง€ํ•œ) C++ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ €๋Š” boost๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์ƒ์„ ๋งŒ๋“ค๊ณ , Qt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์ƒํ•˜๊ณ , ๋ชจ๋‘ ๋™์ผํ•œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ boost์™€ Qt๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€์™€ presto๋ฅผ ๊ฒฐํ•ฉํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ตฌํ˜„ ์œ„์น˜์— ๊ด€๊ณ„์—†์ด ๋ฌธ์ œ์™€ ๋ฒ”์œ„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณ‘ํ•ฉ์œผ๋กœ ์ธํ•ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

  1. ๋ณ‘ํ•ฉ ์ถฉ๋Œ ์ฒ˜๋ฆฌ.
  2. ๋‹ค๋ฅธ ๊ธฐ๋ฐ˜ ํ•ด๊ฒฐ(Ubuntu ๋ฐ CentOS).

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

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

์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ ๋†“์นœ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณ‘ํ•ฉ ์‹œ๋„๊ฐ€ ์—†์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ... ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

๋ณด๋‹ค ํ˜„์‹ค์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ…œํ”Œ๋ฆฟ ์œ ํ˜•์˜ ์†”๋ฃจ์…˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Dockerfile _fragment_( FROM ์ ˆ์ด ์—†๊ณ  ๋ช…๋ น ๋ชฉ๋ก๋งŒ ์žˆ์Œ)๋ฅผ ์‹ค์ œ Dockerfile์— INCLUDE ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ Dockerfile์— ๋Œ€ํ•ด ์กฐ๊ฐ์„ ๊ณต์œ , ์žฌ์‚ฌ์šฉ ๋ฐ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

@thaJeztah ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด์ „์— ๊ฒŒ์‹œํ•œ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ ๊ตฌ์ฒด์ ์œผ๋กœ ๋งŒ๋“ค๋ฉด ์Šค์นผ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ์›น ์•ฑ์„ ๋นŒ๋“œํ•˜๊ณ (image A ), nginx๋กœ ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“  ๋‹ค์Œ(image B ) ssh๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (image C ) ๋ฐ ์ถ”๊ฐ€ Python ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(image D ). ๊ฐ๊ฐ์— ๋Œ€ํ•ด 4๊ฐœ์˜ Dockerfile์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์„ Docker์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ข… ์›น ์•ฑ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ(image E ?)

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

์‹œ๊ฐ„ ๋‚ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋„์ปค๋ฅผ ๋ฐฐ์šฐ๊ณ  ์žˆ๋‹ค.

@jmcejuela _images_ ๋ฅผ ๊ฒฐํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜๊ณ  ํ˜‘๋ ฅํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. "์Šคํƒ"์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/docker/example-voting-app/blob/master/docker-compose.yml (๋ฐ README, https://github.com/docker/example-voting-app/ ๋ธ”๋กญ/๋งˆ์Šคํ„ฐ/README.md)

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

@jmcejuela Docker ๋นŒ๋”๋Š” STDIN์—์„œ Dockerfile ๋‚ด์šฉ์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ "์ƒ๋Œ€์ ์œผ๋กœ" ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ปจํ…์ŠคํŠธ๊ฐ€ ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์ด tarred๋˜๊ณ  docker build ๊ณต๊ธ‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ฒฝํ—˜์— ๋”ฐ๋ฅด๋ฉด ์ด๊ฒƒ์€ ๊ตฌ์„ฑ์„ ์–ป๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฐœ๋ฐœ (์™€ ํ•จ๊ป˜ ์—ฐ์ฃผ) ์œ„์˜ ๊ฐœ๋… ๋–จ์–ด์ ธ ๋นŒ๋“œ ์ ‘๊ทผ ๋ฐฉ์‹์„. nodejs ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ TAR ํŒŒ์ผ( Dockerfile ๋ฐ ์ถ”๊ฐ€๋œ ํŒŒ์ผ ํฌํ•จ)์„ ์ค€๋น„ํ•˜๊ณ  STDOUT์— ๋คํ”„ํ•ฉ๋‹ˆ๋‹ค. STDOUT์€ docker build ๋กœ ํŒŒ์ดํ”„๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ถ€ํ’ˆ์€ NPM ๋ชจ๋“ˆ๋กœ ๋ฒ„์ „ ์ง€์ •, ํ…Œ์ŠคํŠธ ๋ฐ ์ถœ์‹œ๋ฉ๋‹ˆ๋‹ค. crond - http://pastebin.com/UqJYvxUR์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์•„์ฃผ ์งง์€ ์˜ˆ๋ฅผ ์˜ฌ๋ ธ์Šต๋‹ˆ๋‹ค.

@thaJeztah ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์—๋Š” ๊ณต๋™ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ „์ฒด ๊ฐœ๋ฐœ ์Šคํƒ์„ ๋ณด์œ ํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ prod์—์„œ๋„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. docker compose์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ INCLUDE ๋Š” ์˜ค๋ž˜์ „์— ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค( https://github.com/docker/docker/issues/735 ).

@jmcejuela ์‚ฌ์‹ค ๋Œ€๋ถ€๋ถ„์˜ ๋„์ปค ์‚ฌ์šฉ์ž๋Š” ssh๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์ž˜๋ชปํ•˜๊ณ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ docker exec ๋ช…๋ น์ด ๊ฝค ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉ๋˜์–ด ์™”์œผ๋ฉฐ ๊ทธ ์ดํ›„๋กœ ssh๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค ...

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

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

@anentropic Docker ๋กœ๋“œ๋งต ์— ๋”ฐ๋ฅด๋ฉด docker exec ํ†ตํ•ด ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ํ”„๋กœ๋น„์ €๋‹์€ ๋˜‘๊ฐ™์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”์‹ : rkt ์—”์ง„์ด v1.0์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

@rjurney , :100:

์‚ฌ๋ž‘๋ฐ›๋“  ๋ฏธ์›Œํ•˜๋“  ๋‹ค์ค‘ ์ƒ์†์€ ๋ณต์žกํ•œ ํŠน์ง•์ด๋ฉฐ ์˜์‹ฌํ•  ์—ฌ์ง€ ์—†์ด ์ €ํ•ญ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Include๋Š” ๋นŒ๋“œ ๋ ˆ์‹œํ”ผ์˜ Dockerfile์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์–ธ์–ด๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ œ์•ˆ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋งํฌ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

:+1: ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์›ํ•˜๊ณ  ์ ์–ด๋„ ๋…ผ์˜๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ œ์•ˆ๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค( https://github.com/docker/docker/issues/18596 ).

@jakirkham ๊ฐ์‚ฌ

๋„์ปค ๋‹ค์ค‘ ์ƒ์† ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ +1

ํŽธ์ง‘ํ•˜๋‹ค:

๋˜ํ•œ ์ฐธ์กฐ: https://github.com/docker/docker/issues/13026

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

2016๋…„ 3์›” 18์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 9์‹œ 1๋ถ„, Alvin Chevolleaux < [email protected]

์ผ๋‹ค:

@thaJeztah https://github.com/thaJeztah ์˜ ๋‹ต์žฅ์€ ๋งค์šฐ
๊ณ„๋ชฝ. ๋‚˜๋Š” Docker๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ณ  ์™œ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์—†๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ _์ด๋ฏธ์ง€_๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€๋งŒ Docker Compose๊ฐ€
๋‚ด๊ฐ€ ์ฐพ๊ณ  ์žˆ๋˜ ํ•˜๋‚˜์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์—ฌ๋Ÿฌ _containers_ ๊ฒฐํ•ฉ
์„์œ„ํ•œ.

๋‚ด ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ์ฒ˜์Œ์— Docker๋ฅผ ์ดํ•ดํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ์•„๊ฐ€์„œ ์ข€ ๋” ํ•ด๋ด์•ผ๊ฒ ๋‹ค
๋…์„œ!

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

๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

@rjurney ์˜ˆ, Docker Compose๋ฅผ ์กฐ๊ธˆ ๋” debian:jessie ์žˆ์ง€๋งŒ Centos ๊ธฐ๋ฐ˜ ์„ค์ •์„ ์›ํ•˜๋ฏ€๋กœ ํŠน์ • ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‚˜๋จธ์ง€ ์„ค์ •์„ ์ˆ˜๋ฝํ•˜๊ฑฐ๋‚˜ ์†Œ์Šค Dockerfile์„ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ž์‹ ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋กค๋งํ•  ๋•Œ ์ด๋ฏธ์ง€๋ฅผ ๋ฏน์Šค ์•ค ๋งค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์ง€์ ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ํ•˜๋‹ค:
๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด Ubuntu์™€ Centos ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ํ•จ๊ป˜ ํ˜ผํ•ฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ์ผ์ข…์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „์ฒด ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  ํ•œ ์ด๋ฏธ์ง€์—์„œ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

INCLUDE ๋Š” ๋‚˜์—๊ฒŒ๋„ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@RomanSaveljev ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Docker ๋กœ๋“œ๋งต ์— ๋”ฐ๋ฅด๋ฉด docker exec ํ†ตํ•ด ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๊ฒƒ์€ ๋˜‘๊ฐ™์ด ์ž˜๋ชป๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker exec ๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker exec ๋Š” ํ•ญ์ƒ ๋””๋ฒ„๊น… ๋„๊ตฌ์˜€์œผ๋ฉฐ Docker ์ปจํ…Œ์ด๋„ˆ์˜ SSH๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ์ฐธ์—ฌํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ฆฌ์„์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง€์ง€๋งŒ ๋„๋Œ€์ฒด ... ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ค์‹œ ์ œ์•ˆ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

๋ฌธ์ œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ƒ์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก INCLUDE๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? ์ฆ‰, FROM์ด ์—†๋Š” ํŒŒ์ผ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ฉ๋ฆฌ์ ์ธ ์šด์˜ ์ฒด์ œ์—์„œ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด INCLUDE ํŒŒ์ผ์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. uname์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ์ด ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ๋” ๋งŽ์€ ๊ฒƒ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

@rjurney ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ https://github.com/docker/docker/pull/12749 ๊ฐ€ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค.

@rjurney : ์–ด๋ฆฌ์„๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. INCLUDE๊ฐ€ ์ดˆ๊ธฐ ์งˆ๋ฌธ์„ ์™„์ „ํžˆ ๋‹ค๋ฃจ์ง€๋Š” ์•Š์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. ์บก์Šํ™” ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ ์ž‘์—…์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  2. ์ด๋Ÿฌํ•œ ํŽธ์ง‘์„ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  3. ๋นŒ๋“œ ์ˆ˜์ค€์ด ์•„๋‹Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ˆ˜์ค€์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

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

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ–ˆ๋“ฏ์ด Docker ๊ตฌ์„ฑ ๊ฐ€๋Šฅ์„ฑ์€ ์„œ๋น„์Šค ์ˆ˜์ค€์—์„œ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

:+1: ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” defo - ๋™์ž‘์„ dockerfile๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•ŒํŒŒ์ธ ๋ฆฌ๋ˆ…์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ์— apache thrift๋ฅผ ํฌํ•จํ•˜๋ ค๋Š” ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๋ ‡๋‹ค๋ฉด ruby-2.3๊ณผ java-8 ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋“ค์€ ๊ธฐ๋ณธ์œผ๋กœ ๋™์ผํ•œ ๋ฐ๋น„์•ˆ jessie ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋„์ปค ํŒŒ์ผ์„ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค). ๋‘˜ ๋‹ค์— ์žˆ๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ Java Dockerfile์„ Ruby Dockerfile์— ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์—๋Š” ๋‘˜ ๋‹ค ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋ฐฉ๋ฒ•์ด ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ Dockerfile ๋ช…๋ น์„ ๋ถ™์—ฌ๋„ฃ๋Š” ๋™์•ˆ ์ œ๊ฑฐํ•  ๊ธฐํšŒ๋ฅผ ์žก์•˜์Šต๋‹ˆ๋‹ค. "๊ธฐ๋ณธ" Dockerfile(๋ช…๋ น์„ ๋ถ™์—ฌ๋„ฃ์€)์ด ์ด๋ฏธ ํ•ด๋‹น ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋กญ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ๋‹จ์ˆœํžˆ ๋ถˆํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "ruby" & "java" ์ด๋ฏธ์ง€๋ฅผ ์›ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ฃผ์žฅ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์„ธ ๋ฒˆ์งธ "ruby+java ์˜ฌ์ธ์›" ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

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

๋”ฐ๋ผ์„œ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ฐ„์— ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋™์ž‘(๋ช…๋ น ์„ธํŠธ)์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์–ป๋Š” ์ฑ…์ž„์€ Dockerfile ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์Œ์„ ๋งค์šฐ ๋ถ„๋ช…ํžˆ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„, INCLUDE ํ† ๋ก ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์ƒ์†์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก INCLUDE๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ? ์ฆ‰, FROM์ด ์—†๋Š” ํŒŒ์ผ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ฉ๋ฆฌ์ ์ธ ์šด์˜ ์ฒด์ œ์—์„œ ์ž‘์—…ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด INCLUDE ํŒŒ์ผ์— ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. uname์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ ์ด ๊ตฌํ˜„์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์€ ๋” ๋งŽ์€ ๊ฒƒ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งŽ์€ ์ž‘์—…์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ?

:+1:

@rjurney ๊ทธ๊ฒŒ ๊ธฐ๋ณธ์ ์œผ๋กœ #12749๊ฐ€ ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค

:+1: ์™„๋ฒฝ, ์ตœ์ข… ํ˜•ํƒœ๋กœ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฐœ๋…์—๋„ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "INCLUDE" ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋งค์šฐ ์กฐ์žกํ•œ ์†”๋ฃจ์…˜์ด์ง€๋งŒ ์†”์งํžˆ ๋„์ปค ํŒŒ์ผ ์„ธํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ๊ฝค ํฐ ์ง„์ „์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ FROM ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ _์‹คํŒจ_ ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๊ณ  FROM _๋ฌด์‹œ_ ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ช…๋ น์„ ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

FROM ์ง€์› ์—†์ด๋Š” ์•„์ง ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.
์žฅ๋‚œ.

2017๋…„ 1์›” 19์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 10:19, Ken Williams ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

์ด ๊ฐœ๋…์—๋„ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "INCLUDE" ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋งค์šฐ
์กฐ์žกํ•œ ์†”๋ฃจ์…˜์ด์ง€๋งŒ ์†”์งํžˆ ๋งํ•˜๋ฉด
๋„์ปค ํŒŒ์ผ ์„ธํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ์„ฑ.

๊ฐœ์ธ์ ์œผ๋กœ FROM์ด ๋ฐœ์ƒํ•  ๋•Œ ์‹คํŒจ ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
FROM์„ ๋ฌด์‹œ ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ช…๋ น์„ ์ ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.
์ˆœ์„œ.

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

--
๋Ÿฌ์…€ ์ €๋‹ˆ twitter.com/rjurney russell. [email protected] relato.io

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

A(์šฐ๋ถ„ํˆฌ) -> B(์˜ˆ: nginx)
A(์šฐ๋ถ„ํˆฌ) -> C(์˜ˆ: ๋…ธ๋“œ)

๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ฒฐํ•ฉ ๋œ B & C ์ด๋ฏธ์ง€๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋“ค์€ ์„œ๋กœ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์œผ๋ฏ€๋กœ A์™€ C ์‚ฌ์ด์˜ ๋ชจ๋“  diff๋ฅผ B์— ๋ฆฌ๋ฒ ์ด์Šคํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰

A -> B -> C'

ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šด ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@cloutiertyler ์ผ๋ฐ˜์ ์œผ๋กœ Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Nginx์™€ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”). Docker ๋ฐฉ์‹์€ ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” Nginx์šฉ์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Node.js์šฉ์ž…๋‹ˆ๋‹ค. ํฌํŠธ๋ฅผ Nginx ์ปจํ…Œ์ด๋„ˆ์—๋งŒ ๋…ธ์ถœํ•˜๋„๋ก ๋…ธ๋“œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  Nginx ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ณต์šฉ ํฌํŠธ(์˜ˆ: 80)๋ฅผ ์ˆ˜์‹ ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. Nginx๊ฐ€ Node์™€ ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ƒ˜ํ”Œ Docker Compose ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

version: "2.1"

services:
  app: # Node.js application image
    build: .
  nginx: # Nginx container who can make request to app container
    image: nginx:1.10-alpine
    depends_on:
      - app
    ports:
      - "${PORT:-8080}:80" # public port, you may want PORT=80

@franklinyu ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์˜ˆ์ œ๋กœ ๋‘ ๊ฐœ์˜ ์ž„์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ผ๋ฐ˜ ์„œ๋น„์Šค(์˜ˆ: ์šฐ๋ถ„ํˆฌ ๊ธฐ๋ฐ˜ ๋…ธ๋“œ)์™€ ๋‚ด ์‚ฌ์šฉ์ž ์ •์˜ ์ด๋ฏธ์ง€(์šฐ๋ถ„ํˆฌ ๊ธฐ๋ฐ˜)๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์ด๋“ค์„ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

btw, ์ •ํ™•ํžˆ ๋ฆฌ๋ฒ ์ด์Šคํ•˜์ง€๋Š” ์•Š์ง€๋งŒ Dockerfiles์— ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
Dockerfile์€ ์ด์ œ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ์‹œ:

FROM golang AS myapp
COPY . /myapp
RUN cd /myapp && go build

FROM scratch
COPY --from=myapp /myapp /usr/bin/myapp

๋‹น์‹ ์€ ๋‹น์‹ ์ด ์›ํ•˜๋Š”๋งŒํผ ๋งŽ์€ ๋‹จ๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
--from ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€์ •๋œ ๋นŒ๋“œ ๋Œ€์ƒ ์ด๋ฆ„์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
docker build -t myapp . ํ•˜๋ฉด myapp:latest ๋ผ๋Š” ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๊ฐ€ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด docker build --target=myapp ํ•˜์—ฌ ํŠน์ • ๋‹จ๊ณ„๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

17.05(ํ˜„์žฌ RC1๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋งค์šฐ ๋ฉ‹์ง„ Dockerfile ๊ฐœ์„  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด์‹ญ์‹œ์˜ค!

์ด์ œ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค! ๋‹น์‹ ์ด ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ชฐ๋ž์–ด์š”. ๋‚ด ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

์ด๊ฒƒ์€ ๊ฐ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ๋ฉธ๋œ ์ฃผ์žฅ์ด ๋ถ„๋ช…ํžˆ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋‚ด "ํ•˜๋‚˜์˜ ์„œ๋น„์Šค"๋Š” Docker์™€ Jenkins์˜ ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋‚ด Dockerfile์—์„œ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‘ ๊ฐœ์˜ dockerfile์„ ํ•˜๋‚˜๋กœ ๋ถ€์ˆด์„œ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ?

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

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

Docker ๊ด€์ ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด ์ž ์‹œ ์‹œ๊ฐ„์„ ๋‚ด์–ด ๋‹ค์Œ์„ ๊ฒ€ํ† ํ•˜์„ธ์š”.
https://github.com/floydhub/dockerfiles

์—ฌ๊ธฐ์—์„œ ๊ทธ๋Š” Dockerfile์˜ ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํŠธ๋ฆฌ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด ํŠธ๋ฆฌ์˜ ์œ„ ๋ ˆ๋ฒจ์—์„œ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ข…์†์„ฑ ์กฐํ•ฉ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŒ์•ฝ ๋‹น์‹ ์ด ๋‚˜๋ฌด๋ฅผ ๋”ฐ๋ผ๊ฐ”๋‹ค๋ฉด
-ubuntu->common-deps->python3->deepLearningBase->pyTorch
๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์€ ์ •๋ง๋กœ ์›ํ–ˆ์Šต๋‹ˆ๋‹ค

-ubuntu->common-deps->python3->deepLearningBase->pyTorch 
+
-ubuntu->common-deps->python3->deepLearningBase->TensorFlow 

๋‘ ๊ฐ€์ง€ ๋ชจ๋‘์— ๋Œ€ํ•ด deepLearningBase ์•„๋ž˜์— ๋…ธ๋“œ(ํด๋”)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
-ubuntu->common-deps->python3->deepLearningBase->TensorFlow-pyTorch

์ด์ œ pyTorch์™€ TensorFlow dockerfile์„ ๊ฒฐํ•ฉํ•œ dockerfile์„ ๋งŒ๋“ค์–ด์•ผ ํ•˜์ง€๋งŒ
ํ•ต์‹ฌ์€ ํ•ด๋‹น ํŒŒ์ผ์ด deepLearningBase ์œ„์— ๋ช‡ ์ค„๋งŒ ์„ค์น˜ํ•˜๋ฉด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์€ ์›น ๊ฐœ๋ฐœ, ๋”ฅ ๋Ÿฌ๋‹, ์ž„๋ฒ ๋””๋“œ ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ "์„ธ๊ณ„"์— ๋Œ€ํ•ด ์ด์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋Œ€๊ทœ๋ชจ github ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ๋นŒ๋“œ๋กœ ํŠธ๋ฆฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€๊ณ  ์•„์ง ์•„๋ฌด๋„ ๋งŒ๋“ค์ง€ ์•Š์•˜๋‹ค๋ฉด ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  2 ๋˜๋Š” 3๊ฐœ์˜ apt-get ๋ผ์ธ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ƒˆ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ์‹ญ์‹œ์˜ค.

๊ทธ๊ฒƒ์€ "์ž์‹ ๋งŒ์˜ ๋ชจํ—˜์„ ์„ ํƒํ•˜๋Š”" ์Šคํƒ€์ผ์˜ ๊ตฌ์„ฑ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. INCLUDE๋Š” ํ›จ์”ฌ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์  ์žฅ, nano ๋กœ ์ง€์ •๋œ gcc ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๋งค๋ฒˆ apt-get์—์„œ nano๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค!

๋‚˜๋Š” ๊ทธ์˜ ์œ„ ์ฝ”๋ฉ˜ํŠธ์—์„œ @chambm ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์•„์•ผ ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(์ถฉ๋Œ์€ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ๋˜๋Š” OS์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋‹นํžˆ ๋“œ๋ฌผ์–ด์•ผ ํ•จ).

์ด๊ฒƒ์€ @cloutiertyler๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. @franklinyu ์˜ ์†”๋ฃจ์…˜ ๋„ @cpuguy83์ด ์–ธ๊ธ‰ ํ•œ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋„ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋””:

  • A์—์„œ C๋กœ์˜ ๋‹จ๊ณ„๋Š” B์—์„œ D๋กœ์˜ ๋‹จ๊ณ„์™€ ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค(dockerfileAC).
  • B์˜ ๊ฐœ๋ฐœํŒ€์€ C, D, E์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
  • C์˜ ๊ฐœ๋ฐœํŒ€์€ B, D, E์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

D(๋ฐ/๋˜๋Š” E)๋ฅผ ๋นŒ๋“œํ•˜๋ ค๋Š” ์‚ฌ์šฉ์ž๋Š” dockerfileAC์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ dockerfileAB์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž๋Š” ํ•œ ์ข…์†์„ฑ(C)์„ ๋‹ค๋ฅธ ์ข…์†์„ฑ(B)๋ณด๋‹ค ๋” ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ํŒ€ A์™€ B์— ์˜์กดํ•˜๊ณ  D๋ฅผ A + (diff(B,A) + diff(C,A)) (๋ณ‘ํ•ฉ) ๋˜๋Š” A + diff(B,A) + diff(C,A) (๋ฆฌ๋ฒ ์ด์Šค)๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

GHDL์€ ์›น ์„œ๋น„์Šค๊ฐ€ ์•„๋‹ˆ๊ณ  VUnit์€ ์›น ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‘ ๋„๊ตฌ๋ฅผ ๋™์ผํ•œ ์ด๋ฏธ์ง€/์ปจํ…Œ์ด๋„ˆ(E)์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ FROM ๋ ˆ์ด๋ธ”์ด ์žˆ๋Š” (์•„๋งˆ๋„ ์•Œ๋ ค์ง€์ง€ ์•Š์€) dockerfile์„ ๋นŒ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ํฌ์›Œ๋“œ ์ฒด์ธ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‘ git ๋ธŒ๋žœ์น˜์˜ ๋ณ‘ํ•ฉ/๋ฆฌ๋ฒ ์ด์Šค์™€ ์œ ์‚ฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ฐพ์œผ๋ฉด ์ถฉ๋Œ์ด ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ๊ณตํ†ต ํžˆ์Šคํ† ๋ฆฌ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค... ๋„๊ตฌ๊ฐ€ ์žˆ๋‚˜์š”? ์ด ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ ๋˜๋Š” ์™ธ๋ถ€? ๋„๊ตฌ๊ฐ€ ๋‘ ๊ฐœ์˜ ์ด๋ฏธ์ง€๋ฅผ git ๋ธŒ๋žœ์น˜๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ์‹ค์ œ๋กœ ๋ณ‘ํ•ฉ์— git์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๋†€๋ž๊ฒŒ๋„ ์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๋ฌธ์ œ์ด์ž ์ฃผ์ œ์ž…๋‹ˆ๋‹ค. "INCLUDE someimage"๊ฐ€ ์–ผ๋งˆ๋‚˜ ์–ด๋ ค์šด์ง€, ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ๋•Œ ๋ฒ ์ด์Šค๊ฐ€ ํ˜ธํ™˜๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ (FROM ์ฒด์ธ์—์„œ) ๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น ์ง€์ ์—์„œ ๋‚˜๋จธ์ง€ ํ•ด๋‹น ํŒŒ์ผ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(ํ”„๋กœ์ ํŠธ์—์„œ Dockerfile์„ ๋ณต์‚ฌํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋‚ด ๊ฒƒ์— ๋ถ™์—ฌ๋„ฃ์—ˆ๋‹ค)?

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

@rainabba ์ „ํ˜€ ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๋Œ“๊ธ€์ž…๋‹ˆ๋‹ค.
์™„๋ฃŒ๋˜์ง€ ์•Š์€ ๋ฐ์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ทธ๋ ‡๊ฒŒ ์‰ฌ์šด ์ผ์ด ์•„๋‹ˆ๋‹ค
  2. ์•„๋ฌด๋„ ๊ทธ ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐ„์„ ๋“ค์ด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘˜ ๋‹ค์ž…๋‹ˆ๋‹ค.

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

  2. ๋ฌผ๋ก  ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ๋Š” ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ˆ˜ํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ~102๊ฐ€์ง€ ์ด์œ ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๋ˆ„๊ตฌ๋“ ์ง€ ์ƒ๊ด€์—†์ด ์ˆ˜ํ–‰ํ•  ์ƒ๊ฐ์„ ํ• ๊นŒ์š”?

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

๋ฌธ์ž์—ด์„ ํŒŒ์‹ฑํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
Docker์™€ Dockerfile์€ ์ˆ˜๋ฐฑ๋งŒ ๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. API๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•œ ์ผ์ž…๋‹ˆ๋‹ค... ๊ธฐ๋ณธ ๊ตฌํ˜„์ด "๋ฌธ์ž์—ด ๊ตฌ๋ฌธ ๋ถ„์„"์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด.

์–ด์จŒ๋“  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ ์ œ์•ˆ์ด ์žˆ์œผ๋ฉฐ ์ด๊ฒƒ์€ ๋งค์šฐ ์˜ค๋ž˜๋˜๊ณ  ๋‹ซํžŒ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

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

๋™๋ฃŒ ์ค‘ ํ•œ ๋ช…์ด ๋‹ค์Œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ ์ด๋Š” ์ ์ ˆํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ARG from
FROM $from
... rest of dockerfile

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

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

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

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

@cosminonea

INCLUDE์™€ ๊ฐ™์€ ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

https://github.com/larytet/dockerfile-generator/ ์—์„œ ๋งคํฌ๋กœ์— ๋Œ€ํ•œ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค. "ํฌํ•จ"๋„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํŽ˜๋„๋ผ์—์„œ
์šฐ๋ถ„ํˆฌ/์šฐ๋ถ„ํˆฌ ํฌํ•จ
๋ฐ๋น„์•ˆ/๋ฐ๋น„์•ˆ ํฌํ•จ

ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋‚˜๋Š” ์ด๊ฒƒ์ด ํŽ˜๋„๋ผ์˜ ์ด๋ฏธ์ง€๋กœ ์‹œ์ž‘๋  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ /ubuntu ํด๋” ์•„๋ž˜์— ์šฐ๋ถ„ํˆฌ์šฉ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ถ”๊ฐ€
/debian ์•„๋ž˜์˜ ๋ฐ๋น„์•ˆ ์ด๋ฏธ์ง€.

์ด๊ฒƒ์€ ๋ฌผ๋ก  ํ„ฐ๋ฌด๋‹ˆ์—†๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ์™œ ๋‚ด๊ฐ€ ๋งŽ์€ ์šด์˜ ์ฒด์ œ๋ฅผ ํ˜ผํ•ฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?
์‹œ์Šคํ…œ์„ ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€๋กœ? ๊ทธ๋Ÿฌ๋‚˜ ๋” ์œ ์šฉํ•œ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํŽ˜๋„๋ผ์—์„œ
ํ”Œ๋ ‰์Šค/ํ”Œ๋ ‰์Šค ํฌํ•จ
commericalremover /plex/add-on/commericalremover ํฌํ•จ

์ด์ œ ์ด ๊ฒฝ์šฐ์— ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์ด ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ผ๋ฉด
์ž‘๋™ํ•˜๋Š” ํŠน์ • ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ชจ๋“ˆ์‹.

2018๋…„ 8์›” 8์ผ ์ˆ˜์š”์ผ 15:48 Arkady Miasnikov [email protected]
์ผ๋‹ค:

๋‚˜๋Š” INCLUDE์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋Š๋‚€๋‹ค.
๋งคํฌ๋กœ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
https://github.com/larytet/dockerfile-generator/ "ํฌํ•จ"์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ง€์›๋„.

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

๋งˆ์ง€๋ง‰ ๊ฒƒ์€ ์ด๋ฏธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. COPY --from ๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„ ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM busybox

COPY --from=alpine:latest / /
COPY --from=docker:latest /usr/local/bin/docker /usr/local/bin/

ํŽธ์ง‘ํ•˜๋‹ค; ๋˜๋Š” ์‹ค์ œ ์˜ˆ๋ฅผ ๋“ค๋ฉด;

FROM fedora

COPY --from=ubuntu:latest / /ubuntu/
COPY --from=debian:latest / /debian/

์ •ํ™•ํžˆ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— "COPY
--from"์€ ์›๋ž˜ ์š”์ฒญ์„ ์™„๋ฃŒํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์ ˆ๋Œ€์ ์œผ๋กœ
์ด ํ‹ฐ์ผ“์—์„œ ๋‚ด๊ฐ€ ๋” ์ด์ƒ ์ฐพ๊ณ  ์žˆ๋˜ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค.

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

๋ฌธ์•ˆ ์ธ์‚ฌ,

์ฒญ๊ตฌ์„œ

2018๋…„ 8์›” 9์ผ ๋ชฉ์š”์ผ 12:55 Sebastiaan van Stijn ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

๋งˆ์ง€๋ง‰ ๊ฒƒ์€ ์ด๋ฏธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. COPY --from ๋‘˜ ๋‹ค ํ—ˆ์šฉ
์˜ˆ๋ฅผ ๋“ค์–ด ๋นŒ๋“œ ๋‹จ๊ณ„ ๋˜๋Š” ์ด๋ฏธ์ง€;

๋น„์ง€๋ฐ•์Šค์—์„œ

๋ณต์‚ฌ --from= ์•ŒํŒŒ์ธ:์ตœ์‹  //
๋ณต์‚ฌ --from= ๋„์ปค:์ตœ์‹  /usr/local/bin/docker /usr/local/bin/

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

@thaJeztah ์ด๋ฅผ ์œ„ํ•ด ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ๊ฐ ์ด๋ฏธ์ง€์—์„œ ๋ณต์‚ฌํ•  ํŒŒ์ผ์„

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

๋‹ค๋ฅธ "๊ธฐ๋ณธ" ์ด๋ฏธ์ง€(stretch vs ubuntu vs alpine vs ...)์— ๋Œ€ํ•ด ๋•Œ๋•Œ๋กœ ์–ธ๊ธ‰๋œ ๋ฌธ์ œ์ด์ง€๋งŒ _is_ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ข…์†์„ฑ์˜ DAG์—๋Š” ๋‹จ์ผ ์†Œ์Šค(ํ˜„์žฌ ์ด๋ฏธ์ง€)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹จ์ผ ์‹ฑํฌ๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ("๊ณ„์ธต ๊ตฌ์กฐ"์— ์žˆ๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€์˜ ๊ณต์œ  "์ƒ์œ„").

๊ถ๊ทน์ ์œผ๋กœ, ๋ฌผ๋ก , ๋‹น์‹ ์€ ์“ฐ๋ ˆ๊ธฐ ์•ˆ์— ์“ฐ๋ ˆ๊ธฐ๋ฅผ ๋ฒ„๋ฆฌ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ •๋ง๋กœ ๋‹ค๋ฅธ๊ฐ€์š”?

FWIW, ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ S3 ๊ฐ์ฒด ์ €์žฅ์†Œ๋กœ Tomcat ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰.
    ์ด๊ฒƒ์€ Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‹ค๊ตญ์–ด ๋นŒ๋“œ๋Š” Docker ์ปจํ…Œ์ด๋„ˆ(์˜ˆ: Jenkins, Circle CI ๋“ฑ)์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ๋„๊ตฌ ์ฒด์ธ์— ๋Œ€ํ•œ ๊ณต์‹ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๋œ ๋ฌธ์ œ์—์„œ ์ •ํ™•ํžˆ ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹คํ–‰์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ–์ถ”๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@reitzig ์ด๊ฒƒ์€ ์œ ์ผํ•œ ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์˜ต์…˜์€ ํฐ ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด INCLUDE๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. INCLUDE๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ๋Š”. ๋‹จ์ˆœํ•œ. ์—ฌ์ „ํžˆ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์ธ๊ธฐ๊ฐ€ ์žˆ์ง€๋งŒ Docker๋Š” Beer์—์„œ์™€ ๊ฐ™์ด ๋ฌด๋ฃŒ์ด์ง€๋งŒ Freedom์—์„œ์ฒ˜๋Ÿผ ๊ฒฐ์ฝ” ๋ฌด๋ฃŒ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

@rjurney 18.06 ์ดํ›„ ๋นŒ๋“œํ‚ท ์ง€์›์„ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž๋Š” ๋นŒ๋”์— ๋Œ€ํ•œ ์ž์ฒด ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ์„œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ ๋น„๋ฐ€ ์ง€์›)์„ ํฌํ•จํ•˜๋Š” ๊ณต์‹(Docker Inc) ์‹คํ—˜์šฉ Dockerfile ํŒŒ์„œ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์‚ฌ์šฉ์ž ์ง€์ • Dockerfile ํ”„๋ก ํŠธ์—”๋“œ์— ๊ณ ์œ ํ•œ "INCLUDE" ๋™์ž‘์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ Dockerfile์ด ์•„๋‹Œ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(buidpack์— ๋Œ€ํ•œ ์˜ˆ๊ฐ€ ์žˆ์Œ).

์ปค์Šคํ…€ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Docker๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉด ๋ฉ๋‹ˆ๋‹ค. Dockerfile(๋˜๋Š” ๋ฌด์—‡์ด๋“ ์ง€)์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ฃผ์„์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. syntax = myCustomFrontendImage

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ:
https://docs.docker.com/develop/develop-images/build_enhancements/#overriding -default-frontends

๋นŒ๋“œํ‚ท์ด ํ™œ์„ฑํ™”๋˜๋ฉด Docker๋Š” ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(Dockerfile ํ˜•์‹์ผ ํ•„์š”๋„ ์—†์Œ).

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์ธ๊ธฐ๊ฐ€ ์žˆ์ง€๋งŒ Docker๋Š” Beer์—์„œ์™€ ๊ฐ™์ด ๋ฌด๋ฃŒ์ด์ง€๋งŒ Freedom์—์„œ์ฒ˜๋Ÿผ ๊ฒฐ์ฝ” ๋ฌด๋ฃŒ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ ๋ฉ”๋ชจ๊ฐ€ ์ฃผ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋‚˜๋Š” ๋‹น์‹ ์ด ํ‹€๋ ธ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Docker์˜ Apache ๋ผ์ด์„ ์Šค ๋•๋ถ„์— ๋ชจ๋“  ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์—์„œ ๊ฐœ๋ฐœ๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Dockerfile์— ๋Œ€ํ•œ ์ž์ฒด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํฌํฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๊ฐ€ ๊ธฐ์กด Docker ๋Ÿฐํƒ€์ž„/๋„๊ตฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
๋ฌผ๋ก  Docker ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ž๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํฌํฌ(์›๋ณธ?)์— ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š์„ ์ž์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@reitzig ๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ๋ถ„๋ช…ํžˆ ์˜๋ฏธ์—†๋Š”

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ง€๊ธˆ Apache ๋ผ์ด์„ผ์Šค์ธ์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋ฐœ์–ธ์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฌ๋ฉฐ
์ด๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค!

๋Ÿฌ์…€ ์ €๋‹ˆ @rjurney http://twitter.com/rjurney
๋Ÿฌ์…€. [email protected] LI http://linkedin.com/in/russelljurney FB
http://facebook.com/jurney datasyndrome.com

2019๋…„ 1์›” 16์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 4์‹œ 17๋ถ„์— Raphael R. [email protected]์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์ธ๊ธฐ๊ฐ€ ์žˆ์ง€๋งŒ Docker๋Š” Beer์—์„œ์™€ ๊ฐ™์ด ๋ฌด๋ฃŒ์ด์ง€๋งŒ
๋ชจ๋“  ๊ฒƒ์€ ์ž์œ ์—์„œ์™€ ๊ฐ™์ด ์ž์œ ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

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

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

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ž ์„ ์ž˜ ๋ชป ์ž์„œ ์‹ค์ˆ˜๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜๊ฒฌ์ด ์„œ ์žˆ์Šต๋‹ˆ๋‹ค.
๋น„์–ด์—์„œ์ฒ˜๋Ÿผ ๋ฌด๋ฃŒ๋Š” Apache๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž์œ ์—์„œ์™€ ๊ฐ™์ด ์ž์œ ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ†ต์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Apache ํ”„๋กœ์ ํŠธ ๋˜๋Š” ๋‹ค๋ฅธ ํ˜•ํƒœ์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค.

๋Ÿฌ์…€ ์ €๋‹ˆ @rjurney http://twitter.com/rjurney
๋Ÿฌ์…€. [email protected] LI http://linkedin.com/in/russelljurney FB
http://facebook.com/jurney datasyndrome.com

2019๋…„ 1์›” 16์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 12:32 Russell Jurney [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ง€๊ธˆ Apache ๋ผ์ด์„ผ์Šค์ธ์ง€ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋ฐœ์–ธ์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฌ๋ฉฐ
์ด๊ฒƒ์ด ํ›Œ๋ฅญํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค!

๋Ÿฌ์…€ ์ €๋‹ˆ @rjurney http://twitter.com/rjurney
๋Ÿฌ์…€. [email protected] LI http://linkedin.com/in/russelljurney FB
http://facebook.com/jurney datasyndrome.com

2019๋…„ 1์›” 16์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 4:17 Raphael R. [email protected]
์ผ๋‹ค:

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ ์ธ๊ธฐ๊ฐ€ ์žˆ์ง€๋งŒ Docker๋Š” Beer์—์„œ์™€ ๊ฐ™์ด ๋ฌด๋ฃŒ์ด์ง€๋งŒ
๋ชจ๋“  ๊ฒƒ์€ ์ž์œ ์—์„œ์™€ ๊ฐ™์ด ์ž์œ ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋ฉ”๋ชจ๊ฐ€ ์ฃผ์ œ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ฒ˜๋Ÿผ, ๋‚˜๋Š” ๋‹น์‹ ์ด
์ž˜๋ชป๋œ. Docker์˜ Apache ๋ผ์ด์„ ์Šค ๋•๋ถ„์— ๋ชจ๋“  ์‚ฌ๋žŒ์ด
์ œ๊ณตํ•˜๋Š” Dockerfiles์— ๋Œ€ํ•œ ์ž์ฒด ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํฌํฌํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜์‹ญ์‹œ์˜ค.
์—ฌ๊ธฐ์—์„œ ๊ฐœ๋ฐœ๋œ ๊ธฐ๋Šฅ. ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๊ฐ€
๊ธฐ์กด Docker ๋Ÿฐํƒ€์ž„/๋„๊ตฌ์™€ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
๋ฌผ๋ก  Docker ํ”„๋กœ์ ํŠธ์˜ ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ์œ ์‚ฌํ•˜๊ฒŒ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํฌํฌ(์›๋ณธ?)์— ๋ณ‘ํ•ฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

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

๋น„์–ด์—์„œ์ฒ˜๋Ÿผ ๋ฌด๋ฃŒ๋Š” Apache๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ”„๋ฆฌ์›จ์–ด๋Š” ๋…์  ์†Œํ”„ํŠธ์›จ์–ด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์œ ์—์„œ์™€ ๊ฐ™์ด ์ž์œ ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํ†ต์ œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ ์ปจํŠธ๋กค์ด๋ž€? ์žฌ๋‹จ์—์„œ ์šด์˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ? ๊ทธ๋ ‡๋‹ค๋ฉด VS Code, Atom ํŽธ์ง‘๊ธฐ ๋ฐ Ubuntu๋ฅผ ๋น„์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ฐ„์ฃผํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๊ท€ํ•˜์˜ ์ •์˜๋Š” FSF, EFF ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์กฐ์ง์—์„œ ์ œ์•ˆํ•œ ์ •์˜์™€ ํฌ๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚˜๋Š” Docker Inc๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ ๊ทน์ ์œผ๋กœ ๋…ผ์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ "Free as in Freedom"๊ณผ ์•„๋ฌด ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด์Šˆ ํŠธ๋ž˜์ปค์—์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ํ† ๋ก ์„ ํ•˜์ง€ ๋ง™์‹œ๋‹ค.

Docker Inc๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ ๊ทน์ ์œผ๋กœ ๋…ผ์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

docker build ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๋ชจ๋“  ๋นŒ๋“œ ํ˜•์‹์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๊ณต์‹" Dockerfile ํ˜•์‹์€ ์ด ์˜ต์…˜์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ docker build ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
docker build ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์˜ˆ์ œ๋กœ https://matt-rickard.com/building-a-new-dockerfile-frontend/ ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
์ด ํ”„๋ก ํŠธ์—”๋“œ๋Š” Dockerfile ํ˜•์‹๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์กด Dockerfile ํ˜•์‹์„ ์‚ฌ์šฉํ•˜๊ณ  ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์—ฌ๋Ÿฌ Dockerfile์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์‹ค์ œ๋กœ Dockerfile์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ž„์˜์˜ ์ด๋ฏธ์ง€์—์„œ COPY --from ๋ฐ RUN --mount ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ€์ƒ์˜ INCLUDE๊ฐ€ @#$%๋ฅผ ์ œ๊ณตํ•  ํ•„์š” ์—†์ด ๋‹จ์ˆœํ•œ ์„ธ๋ถ€ ์ •๋ณด๋กœ ์ถ”๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ปจํ…Œ์ด๋„ˆ์˜ ์•”์‹œ์ ์ด๊ณ  ์—‰๋šฑํ•œ ํŒ๋งค ํ”ผ์น˜๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์ขŒ์ ˆ๊ฐ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ •๋ง๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋Œ์•„๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜์œ ๋ถ„์œ„๊ธฐ์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋‚˜๋Š” docker/container noob์ด๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ํฌ์Šคํ„ฐ๊ฐ€ ์ด๋ฏธ ํ‘œํ˜„ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ํ˜ผ๋ž€์— ๋น ์กŒ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด:

              /--- python:3.8.3-alpine3.12 ---\
             /                                 \
alpine:3.12.0                                   custom image (with both python and rust)
             \                                 /
              \----- rust:1.44-alpine3.12 ----/

_๋‘ ์ด๋ฏธ์ง€ ๋ชจ๋‘ ๋™์ผํ•œ ์ด๋ฏธ์ง€์˜ ์ž์†์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค!_

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‰ฝ๊ฒŒ:

FROM alpine:3.12.0
INCLUDE rust:1.44-alpine3.12
INCLUDE python:3.8.3-alpine3.12

_"COPY --from image" ๋ช…๋ น(๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ)์„ ์‚ฌ์šฉํ•  ๋•Œ์™€ ๋น„๊ตํ•  ๋•Œ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด(๋ณต์‚ฌํ•  ํŒŒ์ผ/ํ™˜๊ฒฝ ๋ณ€์ˆ˜)์— ๋Œ€ํ•ด ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค._

์ด๋ฏธ์ง€๋ฅผ ๊ฒฐํ•ฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ํ˜„์žฌ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€

FROM alpine:3.12.0

# INCLUDE rust:1.44-alpine3.12
COPY --from=rust:1.44-alpine3.12 / /
ENV RUSTUP_HOME=/usr/local/rustup \
    CARGO_HOME=/usr/local/cargo \
    PATH=/usr/local/cargo/bin:$PATH \
    RUST_VERSION=1.44.1

# INCLUDE python:3.8.3-alpine3.12
COPY --from=python:3.8.3-alpine3.12 / /
ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8
ENV GPG_KEY E3FF2839C048B25C084DEBE9B26995E310250568
ENV PYTHON_VERSION 3.8.3
ENV PYTHON_PIP_VERSION 20.1.1
ENV PYTHON_GET_PIP_URL https://github.com/pypa/get-pip/raw/eff16c878c7fd6b688b9b4c4267695cf1a0bf01b/get-pip.py
ENV PYTHON_GET_PIP_SHA256 b3153ec0cf7b7bbf9556932aa37e4981c35dc2a2c501d70d91d2795aa532be79

_ENV ์ง€์นจ์€ ์ด ์ด๋ฏธ์ง€์˜ Dockerfile์—์„œ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค._


์ด๊ฒƒ์€ ๋˜ํ•œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์ปจํ…Œ์ด๋„ˆ ์žฌ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๊ณ , ์ปดํŒŒ์ผํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์„ ํ•จ๊ป˜ ๋˜์ง€๋Š” ๊ฒƒ์„ ๋งค์šฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค!

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ํ”Œ๋žซํผ/๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ๋ฒ„์ „๋‹น ํ•œ ๋ฒˆ๋งŒ ์ปดํŒŒ์ผํ•˜๋ฉด ๋˜๋ฉฐ, ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ข‹์€/๋ฒ”์šฉ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— C++์—์„œ "ํœ ์ด ๋‹ค์‹œ ๊ตฌํ˜„๋œ" ํšŸ์ˆ˜๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. Docker์— ๋Œ€ํ•ด ์œ ์‚ฌํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?

@bergkvist , https://github.com/moby/moby/issues/3378#issuecomment -381449355 ๋ฐ https://github.com/moby/moby/issues/3378#issuecomment -381641675๋ฅผ ์ฐธ์กฐ ํ•˜์„ธ์š” .

๋‹น์‹ ์ด ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

              /--- python:3.8.3-alpine3.12 ---\
             /                                 \
alpine:3.12.0                                   \
             \                                   \
              \----- rust:1.44-alpine3.12 --------\ custom image 

๊ทธ๋ž˜์„œ, ๋…น์— ์ˆ˜์ • ๋œ ๋ชจ๋“  ํŒŒ์ผ์€ ํŒŒ์ด์ฌ์œผ๋กœ ๋ฎ์–ด ์”๋‹ˆ๋‹ค. ์„œ๋กœ๋ฅผ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๊ฒฐํ•ฉํ•˜๋ ค๋ฉด ๋ณ‘ํ•ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@eine ์˜ˆ, ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŒŒ์ผ์„ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ๊ทธ๊ฑด ์‚ฌ์‹ค์ด์•ผ. ๋”ฐ๋ผ์„œ ๋Œ€์นญ์ธ ๊ทธ๋ฆผ์€ (๊ด€๋ จ) ํŒŒ์ผ์ด ๊ฒน์น˜์ง€ ์•Š๋Š” ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์˜ ๋ฒ„์ „์ด ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

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

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

๋‘ ํŒŒ์ผ์„ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ํ˜„๋ช…ํ•˜๊ฒŒ ์“ฐ๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ทธ๋ƒฅ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ ์–ด๋„ ์ผ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

4์ผ ์ „์— ์—ฌ๊ธฐ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๊ธฐ ๋•Œ๋ฌธ์— Golang์„ ๋ฐฐ์šฐ๊ณ  moby/buildkit ์ฝ”๋“œ์˜ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์œ„์—์„œ ๋…ผ์˜ํ•œ INCLUDE ๋ฌธ์„ ํ—ˆ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

#syntax=bergkvist/includeimage
FROM alpine:3.12.0
INCLUDE rust:1.44-alpine3.12
INCLUDE python:3.8.3-alpine3.12

์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋นŒ๋“œํ•  ๋•Œ DOCKER_BUILDKIT=1์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

DOCKER_BUILDKIT=1 docker build -t myimage .

์ฝ”๋“œ๋Š” https://github.com/bergkvist/includeimage์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Docker Hub์˜ ์ด๋ฏธ์ง€: https://hub.docker.com/r/bergkvist/includeimage

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