Moby: ๋นŒ๋“œ ์‹œ๊ฐ„ ์ „์šฉ -v ์˜ต์…˜

์— ๋งŒ๋“  2015๋…„ 06์›” 21์ผ  ยท  258์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moby/moby

https://github.com/docker/docker/issues/3156 ์˜ @cpuguy83 ์ด ์ œ์•ˆํ•œ ๋Œ€๋กœ
๋‹ค์Œ์€ ๋นŒ๋“œ ์‹œ ์œ ์—ฐํ•œ -v ์˜ต์…˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์•ฑ์„ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. DB์šฉ 1๊ฐœ์™€ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ์•ฑ์šฉ 1๊ฐœ(์Šคํ‚ค๋งˆ, ๊ฐœ์ฒด, ์ •์  ๋ฐ์ดํ„ฐ, ์ž๊ฒฉ ์ฆ๋ช… ๋“ฑ)์˜ ๋‘ tarball์— ๋ชจ๋‘ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „์ฒด ์†”๋ฃจ์…˜์€ ์—ฌ๋Ÿฌ ์…ธ ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ์— ๋”ฐ๋ผ OS ์ž๊ฒฉ ์ฆ๋ช… ๋ฐ ๊ธฐํƒ€ ์‚ฌํ•ญ์„ ์กฐ์ •ํ•˜๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
์œ„์˜ tarball์„ ํญ๋ฐœ์‹œํ‚ค๋ฉด(๋˜๋Š” Dockerfile ADD ์ง€์‹œ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ) ์ „์ฒด๊ฐ€ ์•ฝ 1.5GB(!)๊นŒ์ง€ ํŒฝ์ฐฝํ•ฉ๋‹ˆ๋‹ค. ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ด์ƒ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด '-v /distrib/ready2installApp:/distrib' ์ง€์‹œ๋ฌธ์ด ์—ฌ์ „ํžˆ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(ํ˜„์žฌ Dockerfile์— ์žˆ์Œ).
ํ•˜์ง€๋งŒ

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

Dockerfile ๋์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” --unmount-volume ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋˜๋Š”
ํ˜„์žฌ Dockerfile์—์„œ Volume์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐ์•ˆํ•  ๋•Œ ์‚ฌ๋žŒ๋“ค์ด ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉํ•˜๋Š” ์ž„์‹œ ๋ณผ๋ฅจ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด Dockerfile ์ง€์‹œ๋ฌธ์ด ํ•„์š”ํ• ๊นŒ์š”? @fatherlinux ์—์„œ ์ œ๊ณตํ•œ Puppet ์˜ˆ์ œ๊ฐ€ ๋น„์Šทํ•œ ์ค„์— ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...
๋˜๋Š”
์—ฌ๋Ÿฌ๋ถ„์ด ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ.
๋ชฉํ‘œ๋Š” ๋ฐฐํฌ๋œ ์•ฑ ๋˜๋Š” ์„œ๋น„์Šค์— ์“ธ๋ชจ์—†๋Š” ๋ชจ๋“  ๋ฌด๊ฒŒ๋ฅผ ์งŠ์–ด์ ธ์•ผ ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์ž์ค‘์€ @install-time์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ณต์‹ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๊ฐ„๋‹จํ•œ "yum ์„ค์น˜"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. :)

๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

arebuilder kinfeature

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

ASP.Net 5 ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์— ์˜ํ•ด ๋‹ค์šด๋กœ๋“œ/์—…๋ฐ์ดํŠธ๋˜๋Š” ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ž์ฒด ์บ์‹œ ํด๋”๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ๊ถ๊ทน์ ์œผ๋กœ ๋นŒ๋“œ ๊ฐ„์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋”๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰:

docker build -v /home/dokku/cache/dnx/packages:/opt/dnx/packages -t "dokku/aspnettest" .

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

๋น„์Šทํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ

์ตœ๊ทผ์— ๋‚ด๊ฐ€ ์ผํ•˜๋Š” ๊ธฐ์—…์€ SSL ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด Zscaler ํ”„๋ก์‹œ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ์ฆ์„œ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๊ณ  ๋นŒ๋“œ ์ค‘์— ์ผ๋ถ€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜์„œ ๋‚ด ์ฒซ ๋ฒˆ์งธ ์ƒ๊ฐ์€ HTTP ๋ฐ HTTPS๋กœ ํˆฌ๋ช… ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ–ˆ์ง€๋งŒ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์ธ์ฆ์„œ๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…

# Enterprise
$ docker build -v /etc/ssl:/etc/ssl -t myimage .

# Home
$ docker build -t myimage .

ASP.Net 5 ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ์— ์˜ํ•ด ๋‹ค์šด๋กœ๋“œ/์—…๋ฐ์ดํŠธ๋˜๋Š” ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ž์ฒด ์บ์‹œ ํด๋”๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ๊ถ๊ทน์ ์œผ๋กœ ๋นŒ๋“œ ๊ฐ„์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋”๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ฆ‰:

docker build -v /home/dokku/cache/dnx/packages:/opt/dnx/packages -t "dokku/aspnettest" .

@yngndrw ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ปจํ…Œ์ด๋„ˆ์— ์„ค์น˜๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„์—๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋นŒ๋“œ ์‹œ ๋งˆ์šดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

FWIW ์ด ํŽ˜์ด์ง€์˜ ์–ด๋”˜๊ฐ€์—์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ "์œ ์‚ฌํ•œ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์ปดํŒŒ์ผ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ์— ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ์•„ํ‹ฐํŒฉํŠธ ๋˜๋Š” exe๋ฅผ ์„ค์น˜ํ•˜์‹ญ์‹œ์˜ค"๋ผ๋Š” ๋ผ์ธ์„ ๋”ฐ๋ผ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๋‹จ์ˆœํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด ๋‘๋ ต๋‹ค. ๋•Œ๋•Œ๋กœ /usr/bin์— ์„ค์น˜ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ผ๋ถ€ ๊ตฌ์„ฑ ํŒŒ์ผ๋„ ํŽธ์ง‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ OS, ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š” ์ปค๋„ ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ํŒŒ์ผ ๋˜๋Š” ๋งค๋‹ˆํŽ˜์Šคํ†  ๋นŒ๋“œ ํŒŒ์ผ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋œ ์ œํ’ˆ์˜ ๋‹จ์ˆœํ•œ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋Š” ๋งŽ์€ ์ข…์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‹ค์‹œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

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

๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ์ž์ฃผ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ Oracle์—์„œ ๋ฒ„์ „ 5.6(IIRC)์˜ Postgresql๋กœ ๋ณ€๊ฒฝํ•˜๋Š” Satellite/Spacewalk๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋ณธ์งˆ์ ์œผ๋กœ ์ €๋Š” ์ด์ œ -v bind ๋งˆ์šดํŠธ๋กœ ์ผ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ "๋„์ปค ์ปค๋ฐ‹"์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ˆ˜๋™ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž๋™ํ™”๋œ Dockerfile ๋นŒ๋“œ์—์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

๋‘ ๋ฒˆ์งธ @yngndrw ๋Š” ์บ์‹ฑ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ๋˜‘๊ฐ™์€ ๋…ผ๋ฆฌ๊ฐ€ Maven, npm, apt, rpm๊ณผ ๊ฐ™์€ ๋งŽ์€ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์บ์‹œ๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ๋นŒ๋“œ ์†๋„๊ฐ€ ํฌ๊ฒŒ ๋นจ๋ผ์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์ข… ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

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

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

๋‚˜์˜ ์ดˆ๊ธฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๊ฐœ๋ฐœ ๋ฐ˜๋ณต ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด OS ํŒจํ‚ค์ง€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์บ์‹œํ•˜๋ ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์•ฝ๊ฐ„์˜ ์„ฑ๊ณต์„ ๊ฑฐ๋‘๋ฉด์„œ ์‚ฌ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ @fatherlinux ๊ฐ€ ์ œ์•ˆํ•œ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. docker build ๋ฐ Dockerfile ๋กœ ๋ ˆ์Šฌ๋ง์„ ์™„์ „ํžˆ ํฌ๊ธฐํ•˜๊ณ  docker run ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. docker commit docker run

์•ฝ๊ฐ„์˜ ์‹คํ—˜์œผ๋กœ, ์•ฝ๊ฐ„์˜ POSIX ์…ธ ์Šคํฌ๋ฆฝํŒ…: dockerize ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ docker build ์— ๋Œ€ํ•œ ๋ณธ๊ฒฉ์ ์ธ ๋Œ€์ฒด ๊ธฐ์ˆ ๋กœ ๋‚ด ๊ธฐ์ˆ ์„ ํ™•์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

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

FROM , RUNDIR ๋ฐ VOLUME ๋ณ€์ˆ˜๋Š” docker run ์ธ์ˆ˜๋กœ ์ž๋™ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
TAG , EXPOSE ๋ฐ WORKDIR ๋ณ€์ˆ˜๋Š” docker commit ์ธ์ˆ˜๋กœ ์ž๋™ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๋ณ€์ˆ˜๋Š” ์…ธ์—์„œ ํ‰๊ฐ€๋˜๊ณ  docker run ํ™˜๊ฒฝ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜์–ด ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋นŒ๋“œ ๊ฐ„์— Alpine Linux ํŒจํ‚ค์ง€๋ฅผ ์บ์‹œํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(VOLUME์€ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ CACHE์— ๋งˆ์šดํŠธํ•œ ๋‹ค์Œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ OS์˜ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์บ์‹œ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋กœ ์‚ฌ์šฉ๋จ).

#!/usr/bin/env dockerize
FROM=alpine
TAG=${TAG:-wjordan/my-image}
WORKDIR=/var/cache/dockerize
CACHE=/var/cache/docker
EXPOSE=3001
VOLUME="${HOME}/.docker-cache:${CACHE} ${PWD}:${WORKDIR}:ro /tmp"
#!/bin/sh
ln -s ${CACHE}/apk /var/cache/apk
ln -s ${CACHE}/apk /etc/apk/cache
set -e
apk --update add gcc g++ make libc-dev python
[...etc etc build...]

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

๋˜ํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ -v ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋นŒ๋“œ ์‚ฌ์ด์— ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์—ฌ ๋นŒ๋“œ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

@yngndrw ๊ด€๋ จ ๋ฌธ์ œ ๋‘ ๊ฐœ๋ฅผ ๋‹ซ์€ ์ด์œ ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ #59 ๋ฌธ์ œ๋ฅผ ์ฝ์—ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ด๊ฒƒ๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋ถ€ํ’€๋ ค์ง‘๋‹ˆ๋‹ค. 1๋ฒˆ ํฌ์ŠคํŒ…์„ ์ฝ์–ด์ฃผ์„ธ์š”.
๋‚˜๋Š” ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค ... ๊ธด ํ•˜๋ฃจ ์˜€๊ธฐ ๋•Œ๋ฌธ์— :-o

@zrml ๋ฌธ์ œ https://github.com/aspnet/aspnet-docker/issues/59 ๋Š” ๋ชจ๋“  ๋„์ปค ํŒŒ์ผ์— ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ๋„์ปค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋ ˆ์ด์–ด๋ณ„ ์บ์‹ฑ๊ณผ ๊ด€๋ จ๋˜์—ˆ์ง€๋งŒ ์ด ํ˜„์žฌ ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ๋ฅจ์„ ํŠน๋ณ„ํžˆ ์‚ฌ์šฉํ•˜๋Š” dockerfile์— ์˜์กดํ•˜๋Š” dockerfile ํŠน์ • ์บ์‹ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/aspnet/aspnet-docker/issues/59 ๋ฌธ์ œ๋Š” aspnet-docker ํ”„๋กœ์ ํŠธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ํŠน๋ณ„ํžˆ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ข…๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” https://github.com/progrium/dokku/issues/1231 ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ๋„์ปค ๋ ˆ์ด์–ด ์บ์‹ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” Dokku ํ”„๋กœ์„ธ์Šค์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Michael์€ ์ด ๋™์ž‘์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก Dokku๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ Dokku ํ”„๋กœ์ ํŠธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด ํ•ด๋‹น ๋ฌธ์ œ๋„ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ Docker ๊ด€๋ จ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ(์˜ˆ: https://github.com/aspnet/aspnet-docker/issues/59 ๋ฌธ์ œ์—์„œ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ Docker๊ฐ€ ๋‚ด์žฅ ๊ณ„์ธต ์บ์‹ฑ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ์ด์œ ) ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™œ ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋‚ผ ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ๊ณ  ์—ฌ์ „ํžˆ ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ์ด ํ”„๋กœ์ ํŠธ/๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๊ฐ€ ์ด ํ˜„์žฌ ๋ฌธ์ œ์™€ ๊ตฌ๋ณ„๋˜๋ฏ€๋กœ ์ด์— ๋Œ€ํ•ด ์ œ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@yngndrw ์ •ํ™•ํžˆ, ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ๋‹ค๋ฅด๊ณ  ์•Œ๋ ค์ง„ @docker.com์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค... ๊ธ€์Ž„์š”. ๊ดœ์ฐฎ์œผ์„ธ์š”?
์ ์–ด๋„ ๋‹ซ๊ธฐ ์ „์— SF ๋™๋ฃŒ๋“ค์˜ ์˜๊ฒฌ์„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

BTW ๋กœ๊ทธ #3156์—์„œ @cpuguy83 ์ด ์‚ฌ์šฉ์ž ์‚ฌ๋ก€๋ฅผ ์—ด๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•˜๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

@zrml ๋‚ด๊ฐ€ ํŒ”๋กœ์šฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์—ด๊ณ  ์‹ถ์€ ๊ฒƒ์ด https://github.com/aspnet/aspnet-docker/issues/59 ์ž…๋‹ˆ๊นŒ? /aspnet/aspnet-docker ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ฌ๋Š” ๊ฒƒ์ด ์˜ณ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. /docker/docker์—์„œ ์‹ค์ œ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์—ฌ์•ผ ํ•˜์ง€๋งŒ ํ™•์ธ์ด ํ•„์š”ํ•˜๊ณ  ๋จผ์ € ์ƒ์„ฑํ•˜๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ, ์•„๋‹ˆ.. ์–ด์ œ ๋‹ซ์€ #14080์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์•„์ง ์—ด๋ ค ์žˆ์Šต๋‹ˆ๊นŒ?

@yngndrw ๋นจ๊ฐ„์ƒ‰ "๋‹ซํžŒ" ์•„์ด์ฝ˜์„ ์ž˜๋ชป ์ฝ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ๊ณผ.

build time -v๊ฐ€ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ์ง„์‹ฌ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ์บ์‹ฑ์€ ํ•œ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋นŒ๋“œ ์‹œ ssh ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ธต์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ฐœ์ธ ์ €์žฅ์†Œ์—์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ https://github.com/dockito/vault ์™€ ๊ฐ™์€ ํ•ดํ‚น(์ž˜ ์„ค๊ณ„๋œ)์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

์ด๋ง์ž…๋‹ˆ๋‹ค. docker์˜ ์˜ค๋ฅ˜๊ฐ€ ์ ์„์ˆ˜๋ก apt-get์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•œ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ https๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์˜ ์˜ค๋ฅ˜๊ฐ€ ๋” ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹โ€‹โ€‹์•ˆ์ „ํ•˜๊ณ  ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•˜๋ฉฐ http ํ”„๋ก์‹œ์— ์˜ํ•ด ์บ์‹œ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@btrepp ๋˜ ๋‹ค๋ฅธ ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด dockerfiles๋กœ ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” "์ปดํŒŒ์ผ๋œ" ๋„์ปค ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. C ์•ฑ์ด gcc๋ฅผ ํ•„์š”๋กœ ํ•˜๊ฑฐ๋‚˜ ๋ฃจ๋น„ ์•ฑ์ด ์ด๋ฏธ์ง€์— ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ํ•„์š”๋กœ ํ•  ์ด์œ ๊ฐ€ ์—†์ง€๋งŒ ํ˜„์žฌ ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์•ˆ ๋„์ปค ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ฐ€์ง„ ์•„์ด๋””์–ด๋Š” ๋‚ด๋ถ€์— ๋นŒ๋“œํ•  ๋•Œ ์—ฌ๋Ÿฌ docker ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” dockerfile์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์œ ์‚ฌ dockerfiles.

๋‹ค๋ฅธ ์‚ฌ๋žŒ์„ ๋นŒ๋“œํ•˜๋Š” Docker ํŒŒ์ผ

FROM dockerbuilder
RUN docker build -t docker/builder myapp/builder/Dockerfile
RUN docker run -v /app:/app builder
RUN docker build -t btrepp/myapplication myapp/Dockerfile

btrep/myapplication dockerfile

FROM debian:jessie+sayrubyruntime
ADD . /app //(this is code thats been build using the builder dockerfile
ENTRYPOINT ["rails s"]

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

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Ÿฐํƒ€์ž„ ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด๊ฒƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์„ค์น˜๋œ ruby โ€‹โ€‹์ด์ƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GCC ๋˜๋Š” ๋” ๋‚˜์€ ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ go์˜ ๊ฒฝ์šฐ ์ฝ”์–ด OS ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์ดˆ๊ฒฝ๋Ÿ‰์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด์™€ ๊ฐ™์€ ํŠน์ • ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์ง€๋งŒ ์™ธ๋ถ€ http ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ docker๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ. run์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋„์— ๋Œ€ํ•œ ๋ชจ๋“  ๋””๋ฒ„๊ทธ ๊ธฐํ˜ธ(Yuuuuge)๊ฐ€ ์žˆ๋Š” systemtap์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. yum ๋ช…๋ น์ด ์„ค์น˜ํ•  RPM์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋ณธ /lib/modules๋ฅผ ๋งˆ์šดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ 1.5GB ์ด๋ฏธ์ง€(๋””๋ฒ„๊ทธ ๊ธฐํ˜ธ์—์„œ)๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์œ„์น˜์— ์ด๋Ÿฌํ•œ ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Dockerfile์„ ์ž‘์„ฑํ•˜๋Ÿฌ ๊ฐ”๊ณ  ๊ทธ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค :-(

docker run --privileged -v /lib/modules:/lib/modules --tty=true --interactive=true rhel7/rhel-tools /bin/bash
yum --enablerepo=rhel-7-server-debug-rpms install kernel-debuginfo-$(uname -r) kernel-devel-$(uname -r)
docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                        PORTS               NAMES
52dac30dc495        rhel7/rhel-tools:latest   "/bin/bash"         34 minutes ago      Exited (0) 15 minutes ago                         dreamy_thompson
docker commit dreamy_thompson stap:latest

https://access.redhat.com/solutions/1420883

ํ•ด๋‹น ๋ฒ„๊ทธ๊ฐ€ ๋‹ค๋ฅธ ์ด์œ ๋กœ ์ข…๋ฃŒ๋˜์—ˆ์œผ๋ฏ€๋กœ #3949์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์—ฌ๊ธฐ์—์„œ ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๊ฐ์‚ฌ ํ•ด์š”

_USER POLL_

_์ด ํ† ๋ก ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ ์•Œ๋ฆผ์„ ๋ฐ›๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ๊ตฌ๋… ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค._

์•„๋ž˜์— ๋‚˜์—ด๋œ ์‚ฌ๋žŒ๋“ค์€ ๋ฌด์ž‘์œ„ +1๋กœ ๊ท€ํ•˜์˜ ์˜๋ฏธ ์žˆ๋Š” ํ† ๋ก ์— ๊ฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

@vad

์ด ๊ธฐ๋Šฅ์— +1!

๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋นŒ๋“œ ์‹œ ssh ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์ธต์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ๊ฐœ์ธ ์ €์žฅ์†Œ์—์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ https://github.com/dockito/vault ์™€ ๊ฐ™์€ ํ•ดํ‚น(์ž˜ ์„ค๊ณ„๋œ)์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ํ˜ธ์ŠคํŠธ์—์„œ tmpfs๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง๋œ ssh ํ‚ค).

์ด์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋นŒ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด CI ์„œ๋ฒ„์— ์žˆ๋Š” node_modules ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋กœ์ปฌ ์บ์‹œ์ž…๋‹ˆ๋‹ค.
npm install ๋Š” ๋งค์šฐ ๋Š๋ฆฌ๊ณ  package.json ๊ฐ€ ์ด๋ฏธ์ง€์— ADD ์ธ ํ˜„์žฌ "์ตœ์ƒ์˜" ๊ฒฝ์šฐ์—๋„ npm install ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๊ทธ ๋‹ค์Œ์—์•ผ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. package.json ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ถ”๊ฐ€๋˜๊ณ  ๊ตฌ์ถ•๋œ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ์†Œ์Šค๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Node/npm ์ธก์—์„œ ์ด์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” npm/npm#8836์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋Š๋ฆฐ ํŒจํ‚ค์ง€ ๋ณต์› ๋ฐ ๋ ˆ์ด์–ด์˜ ํ˜„์žฌ ํŒจํ‚ค์ง€ ์บ์‹ฑ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ํฌ๊ธฐ์™€ ๊ด€๋ จ๋œ aspnet-docker ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์บ์‹ฑ์„ ์œ„ํ•ด ํƒ‘์žฌ๋œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.
https://github.com/aspnet/aspnet-docker/issues/123

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

OP๋Š” "docker build -v"๊ฐ€ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐ ํฌ๊ฒŒ ๋„์›€์ด ๋œ๋‹ค๋Š” ์ ์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ์™”์œผ๋ฉฐ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์€ ๋ ˆ์ด์–ด๋ฅผ "src"๋ ˆ์ด์–ด๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ ˆ์ด์–ด์˜ ๋ผ์ธ์„ ๋”ฐ๋ผ ๋„์ปค ๋นŒ๋“œ ์ค‘์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ๋Š” ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋„์ปค๋Š” ์ด์ „ ๋ ˆ์ด์–ด/์ด๋ฏธ์ง€, ์ž„์‹œ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ตœ์ข… ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์˜ˆ.

FROM ubuntu
RUN apt-get install gcc
ADDPRIVATE . /tmp/src <--these can be cached by docker locally
RUNPRIVATE make     <-- basically these layers become scoped to the current build process/dockerfile
RUN make install <--result of this layer is required.

๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ค‘์š”ํ•œ ํŒŒ์ผ์„ ์ œ์™ธํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž์‹ ์ด ๋ฌด์—‡์„ ๋” ์ž˜ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

@yngndrw
netcore์™€ ๊ฐ™์€ ์ƒํ™ฉ์— ๋Œ€ํ•œ ํ›จ์”ฌ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์— HTTPS๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋„์ปค ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ํˆฌ๋ช…ํ•œ ์บ์‹ฑ ํ”„๋ก์‹œ๋ฅผ ๊ฐ–๋„๋ก iptables+squid๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์€ ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฒŒ์ž„์—์„œ ssl ์‚ฌ์ž„์œผ๋กœ ์ธํ•ด ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ๋”์ฐํ•˜์ง€๋งŒ apt-get๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ž‘๋™ํ•˜๊ณ  ์ด๋ฏธ docker์šฉ iptables+squid๋กœ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณผ๋ฅจ ์‚ฌ์šฉ์˜ ๋‹จ์ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dockerfiles๋Š” ์žฌํ˜„ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ docker build -t btrepp/myapp ์™ธ๋ถ€์—์„œ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ dockerhub์—์„œ ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@brepp : ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ œ์•ˆ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Docker๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ํ•˜๋“œ์ฝ”๋”ฉ๋œ(์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜์œ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Œ) ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด ์‚ด ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ ๋ชจ๋“  ๋ ˆ์ด์–ด์—์„œ ์ตœ์ข… ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์žŠ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋Š”/์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ข… ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. /this_is_the_tmp_explosion_folder_that_will_be_removed_from_your_final_container_image์— ํƒ‘์žฌ๋จ
์ถฉ๋ถ„ํžˆ ์‰ฌ์šด....

@btrepp ์†Œ์Šค ๋ ˆ์ด์–ด ์•„์ด๋””์–ด๊ฐ€ ์•„์ฃผ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ SSL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ๊ด€ํ•ด์„œ๋Š” ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ด ๋ฌธ์ œ๊ฐ€ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋™์•ˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•/๋กœ์ปค ๋„๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@yngndrw

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

http(s)๋ฅผ ํ†ตํ•ด ํ’€๋‹ค์šด๋  ๋•Œ "super_awesome_ruby_lib"๋ฅผ ๋น„๊ณต๊ฐœ๋กœ ์„ค์ •ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฃจ๋น„ ๋ณด์„์— ์—ด์‡  ๊ณ ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์•Œ๋ ค์ง„ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒจํ‚ค์ง€์— ์„œ๋ช…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ apt-get์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ ํ‘œ์ค€ http ํ”„๋ก์‹œ๊ฐ€ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

๋กœ์ปฌ ๊ฐœ์ธ ํŒจํ‚ค์ง€ ํ”ผ๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ docker๋Š” ์ž์ฒด์ ์œผ๋กœ ์ด๋ฅผ ์ž˜ ์ง€์›ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ํ”ผ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์œผ๋ฉฐ https ์ธ์ฆ์„œ๊ฐ€ ์ธ์ฆ์„œ ์ €์žฅ์†Œ์— ์—†์œผ๋ฉด _์˜ฌ๋ฐ”๋ฅด๊ฒŒ_ ๋Š์Šจํ•ด์ง‘๋‹ˆ๋‹ค. ๋‚˜๋Š” docker๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋„ ์ตœ์†Œํ•œ ๋ฉ”์ธ ํ”ผ๋“œ๋ฅผ ํ•ญ์ƒ ํ™•์ธํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. Afaik ๋กœ์ผ“/rkt ๊ตฌํ˜„์€ ์„œ๋ช…+http๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๋ถ„๋ช…ํžˆ ๋งํ•ด์„œ, ์ €๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ http๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  https๋ฅผ ์‚ญ์ œํ•˜๋„๋ก ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜นํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํŒจํ‚ค์ง€ ๊ฒ€์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ https๋ฅผ "๋ณด์•ˆ catch all sledgehammer" ์ œ๊ณต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค.

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

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

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

์ €์—๊ฒŒ๋Š” docker build -v ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ด€๋ จ ์ œํ’ˆ์˜ ์‚ฌ์ „ ๊ตฌ์„ฑ๋œ ์„ค์น˜๋กœ ๊ตฌ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋ฉฐ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ 2GB ์ด์ƒ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜ธ์ŠคํŠธ OS์— ์ด๋ฏธ ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด https cert/auth๊ฐ€ ์žˆ๋Š” ํ”„๋ก์‹œ์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๋„๊ตฌ/ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , ๋˜๋Š” ์–ด์ฉŒ๋ฉด ๋น„ํŠธ ํ† ๋ ŒํŠธ.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด wget์„ ์‚ฌ์šฉํ•˜์—ฌ docker build ๋™์•ˆ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ›จ์”ฌ ์ œํ•œ๋œ ํ™˜๊ฒฝ์ด๊ณ  ํ›จ์”ฌ ๋œ ํŽธ๋ฆฌํ•˜๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

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

@thaJeztah ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Fwiw ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ docker๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”(๋˜๋Š” ์‹ค์ œ๋กœ ํ•  ์ˆ˜ ์—†๋Š”) ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค.

-v ์˜ต์…˜์ด ํฌํ•จ๋œ Red Hat ๋ฒ„์ „์˜ docker์— ํŒจ์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์— ๋Œ€ํ•œ ์ง„์ •ํ•œ ํ•ด๊ฒฐ์ฑ…์€ docker ๋นŒ๋“œ๊ฐ€ ์•„๋‹Œ OCI Container Images๋ฅผ ๋นŒ๋“œํ•˜๋Š” ์ƒˆ๋กญ๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@rhatdan RHEL ๋˜๋Š” Fedora?

์šฐ๋ฆฌ๋Š” ๋˜ํ•œ resin.io์—์„œ ๋‚ด๋ถ€ ๋ฒ„์ „์˜ ๋„์ปค์—์„œ ๋„์ปค ๋นŒ๋“œ์˜ -v ์˜ต์…˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์ฐจ์ด์ ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/resin-io/docker/commit/9d155107b06c7f96a8951cbbc18287eeab8f60cc

@rhatdan @petrosagg ์ด์— ๋Œ€ํ•œ PR์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jeremyherbert ํŒจ์น˜๋Š” RHEL, CentOS ๋ฐ Fedora์˜ ๋ชจ๋“  ์ตœ์‹  ๋ฒ„์ „์— ์ œ๊ณต๋˜๋Š” ๋„์ปค ๋ฐ๋ชฌ์— ์žˆ์Šต๋‹ˆ๋‹ค...

@graingert ๊ณผ๊ฑฐ์— ์ œ์ถœํ–ˆ์ง€๋งŒ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@rhatdan ๋งํฌ๊ฐ€ ์žˆ๋‚˜์š”?

@runcom ๋งํฌ ์žˆ๋‚˜์š”?

@thaJeztah ์ด๊ฒƒ์ด ๋„ˆํฌ๋“ค์ด ๊ฑฐ๋ถ€ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‹ค์Œ์€ ์ข…๋ฃŒ๋˜์—ˆ๊ฑฐ๋‚˜ ์‘๋‹ตํ•˜์ง€ ์•Š์€ ๊ธฐ์กด ๋ฌธ์ œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.
https://github.com/docker/docker/issues/3949
https://github.com/docker/docker/issues/3156
https://github.com/docker/docker/issues/14251
https://github.com/docker/docker/issues/18603

RHEL/CentOS/Fedora์—์„œ ์‚ฌ์šฉ๋˜๋Š” Project Atomic ํŒจ์น˜์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๋‹ค์Œ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.projectatomic.io/blog/2016/08/docker-patches/

@daveisfera ๋Š” RW ๋ณผ๋ฅจ์ด ์•„๋‹Œ R ๋ณผ๋ฅจ๋งŒ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฏ€๋กœ @yngndrw ๋ฐ ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@graingert RW ๋ณผ๋ฅจ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํŠน์ • ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค...

2016๋…„ 11์›” 1์ผ ์˜ค์ „ 10์‹œ 36๋ถ„์— Brian Goff๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@graingert https://github.com/graingert RW ๋ณผ๋ฅจ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
ํŠน์ • ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฝ๊ธฐ ์ „์šฉ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

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

์Šค์ฝง ๋งค์นดํ‹ฐ

์Šค์ฝง. [email protected]

http://crunchtools.com

@fatherlinux

@cpuguy83 RW์˜ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ccache ์ž…๋‹ˆ๋‹ค.

@fatherlinux ํŒ”๋กœ์šฐ๊ฐ€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์— ๋ณผ๋ฅจ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋˜ํ•œ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ASP.Net 5 ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ์˜ํ•ด ๋‹ค์šด๋กœ๋“œ/์—…๋ฐ์ดํŠธ๋˜๋Š” ์บ์‹ฑ ํŒจํ‚ค์ง€๋ผ๋Š” ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ์ž์ฒด ์บ์‹œ ํด๋”๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ๊ถ๊ทน์ ์œผ๋กœ ๋นŒ๋“œ ๊ฐ„์— ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋”๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋งˆ์šดํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

docker build -v /home/jenkins/pythonapp/cache/pip:/root/.cache/pip  -t pythonapp .
docker build -v /home/jenkins/scalaapp/cache/ivy2:/root/.ivy2  -t scalaapp .

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

2016๋…„ 11์›” 1์ผ ์˜ค์ „ 10์‹œ 42๋ถ„์— Brian Goff๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@fatherlinux https://github.com/fatherlinux ํŒ”๋กœ์šฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์ด ์ž‘์—…์— ๋ณผ๋ฅจ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋˜ํ•œ ๊ทธ ๋™์•ˆ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ด์œ 
๋นŒ๋“œ ๋‹จ๊ณ„?

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

์Šค์ฝง ๋งค์นดํ‹ฐ

์Šค์ฝง. [email protected]

http://crunchtools.com

@fatherlinux

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

NFS๋Š” 30๋…„ ์ „์— ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค...

2016๋…„ 11์›” 1์ผ ์˜ค์ „ 10์‹œ 45๋ถ„์— Thomas Grainger๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

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

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

์Šค์ฝง ๋งค์นดํ‹ฐ

์Šค์ฝง. [email protected]

http://crunchtools.com

@fatherlinux

NFS๋Š” 30๋…„ ์ „์— ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค...

๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ๋Œ“๊ธ€

@graingert ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ๊ฐํ•˜๊ฒŒ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ๋นจ๋ฆฌ ์‘๋‹ตํ•˜๋ ค๊ณ  ํ–ˆ๊ณ  ์ถฉ๋ถ„ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ง„์ง€ํ•˜๊ฒŒ, ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CRIO์™€ ํ•จ๊ป˜ NFS๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ buld๋Š” ๊ณตํ†ต์ ์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์บ์‹ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. NFS, ํŠนํžˆ ๋‚ด์žฅ๋œ ์บ์‹ฑ์€ ๋นŒ๋“œ ํ˜ธ์ŠคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ชจ๋“  ์บ์‹ฑ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ -v ๋นŒ๋“œ ์‹œ๊ฐ„ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๋นŒ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํ˜ธ์ŠคํŠธ์—๋งŒ ์ž ๊ธ€ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ธํ„ฐ๋„ท ๊ทœ๋ชจ์— ๋…๋ฆฝ์ ์ด์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‹จ์ผ ์‚ฌ์ดํŠธ ๋˜๋Š” ์œ„์น˜์—์„œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

@fatherlinux gitlab ๋˜๋Š” travis ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  S3์— ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

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

1TB์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ MySQL Galera ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ๋ชจ๋‘ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. Containerized/Orchestrated multi-node, sharded Galera๋Š” ์ •๋ง ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋งˆ๋‹ค ์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ˆ˜๋™์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

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

@fatherlinux ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ง๊ต ์œ ์Šค ์ผ€์ด์Šค๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ...

@graingert ์œ ์šฉํ•œ ์˜๊ฒฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌด์—‡์— ์ง๊ตํ•ฉ๋‹ˆ๊นŒ? ๋นŒ๋“œ ์ค‘ -v์— ๋Œ€ํ•œ ์š”์ฒญ๊ณผ ์ง๊ตํ•˜์—ฌ ์ด ๋Œ€ํ™”๋ฅผ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ”Œ๋ž˜๊ทธ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์šฉ๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์บ์‹œ, ๋„์ปค ๋นŒ๋“œ ์„œ๋ฒ„ ๊ฐ„ ๊ณต์œ 
  • ๋‹จ์ผ Dockerfile์˜ '๋นŒ๋“œ ์ค‘'์—๋งŒ ์ ์šฉ๋˜๋Š” ADD์™€ ์œ ์‚ฌํ•œ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ์ด๋ฏธ์ง€์—์„œ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์ถœ๋ ฅ์„ ๋ฌด์‹œํ•˜๋Š” ํ‚ค์›Œ๋“œ์™€ ๊ฐ™์€ ADD+RUN์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ํ•œ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋‹จ๊ณ„์—์„œ ADD+RUN์„ ํ•œ ๋‹ค์Œ ๋ ˆ์ด์–ด๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

๋‚˜์ค‘์˜ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋‘ ๊ฐœ์˜ ์ƒˆ๋กœ์šด ํ‚ค์›Œ๋“œ๋กœ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

BUILDCONSTFILE <path>

๊ฐ RUN ์ „์— COPY <path> ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์ดํ›„ ์ด๋ฏธ์ง€์—์„œ <path> ๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

TEST <cmd> WITH <paths>

๊ฒฝ๋กœ๋ฅผ ๋ณต์‚ฌํ•˜๊ณ  ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ 0์ด๋ฉด ์ƒ์œ„ ์ด๋ฏธ์ง€์—์„œ ๋นŒ๋“œ๋ฅผ ๊ณ„์†ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋นŒ๋“œ๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ TEST ... WITH๋Š” ์ปจํ…Œ์ด๋„ˆ ์ „์ฒด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋‹ค๋ฅธ CI ๋‹จ๊ณ„์—์„œ ๋” ์ž˜ ์ฒ˜๋ฆฌ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ €๋Š” --mount ๋ฅผ ๋นŒ๋“œ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด _์ƒ๊ฐ_ํ•ฉ๋‹ˆ๋‹ค("-v"๋Š” ๊ทธ๋‹ค์ง€ ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ตฌํ˜„, ์บ์‹ฑ ์ฒ˜๋ฆฌ(๋˜๋Š” ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Œ) ๋“ฑ์— ๋Œ€ํ•ด 100% ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

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

@ cpuguy83 ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๋Œ€๋ถ€๋ถ„์„ ๋ชป์žก์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ์ฝ๊ธฐ ์ „์šฉ์„ ์˜๋ฏธํ•˜๋Š” --mount๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ฆฌ๊ณ  -v๋Š” ์ฝ๊ธฐ/์“ฐ๊ธฐ์ž…๋‹ˆ๊นŒ?

@cpuguy83 ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ IMHO๊ฐ€ ์ ์  ๋” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ด ๋˜๊ณ  ์žˆ๋Š” "๋นŒ๋”" ์ด๋ฏธ์ง€๋ฅผ ์ฃผ๋กœ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

@fatherlinux swarm ์„œ๋น„์Šค ๋ฐ ํ˜„์žฌ(1.13์šฉ) docker run ๋Š” ํ›จ์”ฌ ๋” ์ •ํ™•ํ•˜๊ณ  ์œ ์—ฐํ•œ --mount ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. https://docs.docker.com/engine/reference/commandline/service_create/# /add -bind-mounts-or-volumes

๋ฌธ์„œ์— ์„ธ ๋ฒˆ์งธ ์œ ํ˜•์˜ ๋งˆ์šดํŠธ์ธ tmpfs ๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„ ์ •๋ง ๋ฉ‹์ง€๋„ค์š”...๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค...

2016๋…„ 11์›” 1์ผ ์˜คํ›„ 2์‹œ 20๋ถ„์— Brian Goff๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@fatherlinux https://github.com/fatherlinux ๋–ผ ์„œ๋น„์Šค ๋ฐ ํ˜„์žฌ
(1.13์šฉ) |๋„์ปค ์‹คํ–‰| ์ง€์› |--mount| ํ›จ์”ฌ ๋” ์ •ํ™•ํ•œ
์œ ์—ฐํ•จ:
https://docs.docker.com/engine/reference/commandline/service_create/#/add -bind-mounts-or-volumes

๋ฌธ์„œ์— ์„ธ ๋ฒˆ์งธ ์œ ํ˜•์˜ ๋งˆ์šดํŠธ์ธ |tmpfs|๊ฐ€ ๋ˆ„๋ฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์Šค์ฝง ๋งค์นดํ‹ฐ

์Šค์ฝง. [email protected]

http://crunchtools.com

@fatherlinux

@cpuguy83 ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋นŒ๋” ํŒจํ„ด์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋ฏธ์ง€์— ์ง€์†๋˜์ง€ ์•Š๊ณ  ๋ ˆ์ด์–ด ๋ฌดํšจํ™”์—๋„ ์‚ด์•„๋‚จ๋Š” ์บ์‹ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” Yocto ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  NFS ์Šคํ† ๋ฆฌ์ง€์— ๊ณต์œ  ์ƒํƒœ ์บ์‹œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” npm ์บ์‹œ๋กœ ์ „์ฒด RUN npm install ๋ ˆ์ด์–ด๋ฅผ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์บ์‹œ๋œ ํŒจํ‚ค์ง€๋กœ ์ธํ•ด ๋” ๋น ๋ฅด๊ฒŒ ๋‹ค์‹œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@graingert ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ฐ€๋Šฅํ•œ ํƒ€ํ˜‘์œผ๋กœ dockerfile์— ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ์˜ ์„ ํƒ์  ํ•ด์‹œ๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ docker๋Š” ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ด๊ฒƒ์„ ํ™•์ธํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋Ÿฌ๋ฉด ๊ฒฐ์ •์  ๋นŒ๋“œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์œผ๋ฉฐ, ๋นŒ๋“œํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ํŠน์ • ์ง€์ ์—์„œ ์ด์ƒํ•œ ์˜ค๋ฅ˜๊ฐ€ ํญ๋ฐœํ•˜๊ธฐ๋ณด๋‹ค๋Š” ํ•„์š”ํ•œ ์ข…์†์„ฑ์ด ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋ช…๋ฐฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด์จŒ๋“  dockerfile๊ณผ ํ•จ๊ป˜ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ssh ํ‚ค ๋“ฑ์— ๋Œ€ํ•ด์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฑฐ๋Œ€ํ•œ ํŒŒ์ผ์„ _๋ณต์‚ฌ_ํ•ด์•ผ ํ•˜๋Š” ์•„์ด๋””์–ด๋Š” ์ด์ƒ์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ ํฌ๊ธฐ๋Š” 10-40GB ์ •๋„์ด๋ฉฐ, ์ข‹์€ ssd๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ตœ์†Œ 1~2๋ถ„ ๋ถ„๋Ÿ‰์˜ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ๋„์ปค์— ์žˆ๋Š” ADD ์ง€์‹œ๋ฌธ์— ๋Œ€ํ•œ ๋‚ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€์— 30GB๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ์ถ”๊ฐ€ ์—ฌ์œ  ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ์Šค์ฟผ์‹œํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. yocto ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ sstate ์บ์‹œ๊ฐ€ ํฌํ•จ๋œ ๋ณผ๋ฅจ์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ๋นŒ๋“œ์—์„œ RW์— ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์บ์‹œ ๋ˆ„๋ฝ์ด ๋นŒ๋“œ ์ค‘์— ๊ณ„์‚ฐ๋˜๊ณ  ์ดํ›„๋ฅผ ์œ„ํ•ด sstate์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ๋„ ~30GB์— ์žˆ์œผ๋ฏ€๋กœ ํ•ด์‹œ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ์—๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

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

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

@petrosagg @zrml @thaJeztah ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์€:

  • #7115 #3156์„ ์ƒ…์ƒ…์ด ๋’ค์ง€๋ฉด ์ด ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋…ผ์˜ํ•˜๋Š” ๋ฐ ์˜ค๋žœ ์„ธ์›”์ด ํ๋ฅธ ๊ธด ๋ฌธ์ œ ๋ชฉ๋ก์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์€ ์žฌํ˜„์„ฑ ์ด์œ (๋˜๋Š” ์ด์ „ Dockerfile syntax is frozen ์ฃผ์„, ๊ทธ๋ฆฌ๊ณ  HEALTHCHECK ๋ช…๋ น์ด ์ถ”๊ฐ€๋œ ํ›„ ๊ณ ์ •์ด ์ œ๊ฑฐ๋˜์—ˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋‹ซํžŒ ์ƒํƒœ๋กœ ๋‚จ์•„ ์žˆ์Œ)๋กœ ์ธํ•ด ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋งŽ์€ ํŒ€์ด ์ˆ˜๋…„ ๋™์•ˆ ์ผ์ƒ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ์ข‹์€ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์„ฑ/์ƒ์‚ฐ์„ฑ์„ ๊ฐ€์ง€์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. @brepp ์ด ๋งํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์ง€์˜ฅ์ž…๋‹ˆ๋‹ค.
  • Docker ์‚ฌ๋žŒ๋“ค์€ ์ด ๋ฌธ์ œ๋ฅผ ์•Œ๊ณ  ์žˆ์ง€๋งŒ Oh my docker build broken! ์ข‹์ง€ ์•Š์€ ๊ณต์œ  ์บ์‹œ๋กœ ์ธํ•œ ๋ฌธ์ œ
  • ๊ทธ๋Ÿฌ๋‚˜ ๋””์Šคํฌ ์บ์‹œ์—์„œ ๋„คํŠธ์›Œํฌ ์บ์‹œ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋นŒ๋“œ ์•ˆ์ •์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด์ง€ ์•Š๊ณ  http๋ฅผ ํ†ตํ•œ ์˜๊ด‘์Šค๋Ÿฌ์šด ์บ์‹œ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋ฉฐ ์ƒํ™ฉ์„ ์•…ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค(๋ชจ๋“  ๋นŒ๋“œ, HTTPS, ํŒŒ์ผ ํฌ๊ธฐ, ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ์‹œ ๋””์Šคํฌ ์Šค๋ž˜์‹ฑ, ๋ ˆ์ด์–ด ์บ์‹ฑ, ๋ณต์žกํ•œ ๋นŒ๋“œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋“ฑ)

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ Dupe ๋˜๋Š” WontFix๋กœ ์ข…๋ฃŒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ: ์—ฌ๊ธฐ์„œ ํ‹€๋ฆฌ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ์„œ๊ฐ€ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค :)

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

@rdsub ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋งํฌ๋ฅผ ๊ณต์œ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

@rdsubhas ๋ฉ‹์ง„ ์š”์•ฝ์ž…๋‹ˆ๋‹ค. @cpuguy83 ์ด ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃจ๋Š” ๋นŒ๋“œ ์ค‘์— --mount ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ์†์ž„์ˆ˜/์›์น™ ์ˆ˜์ •์œผ๋กœ ๋‹ซํž ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์•Œ๊ณ  ์‹ถ์€ ๊ฒƒ์€ ํ˜„์žฌ ์ œ์•ˆ์ด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. Dockerfile ๊ตฌ๋ฌธ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ
  2. ๋นŒ๋“œ๋ฅผ ํ˜„์žฌ๋ณด๋‹ค ๋” ํ˜ธ์ŠคํŠธ ์ข…์†์ ์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„์ด๋””์–ด์— ๋Œ€ํ•ด ์–ด๋–ค ๋ฐ˜๋ก ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๊นŒ? ์—†๋Š” ๊ฒฝ์šฐ --mount ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•œ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ๋…ผ์˜ํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ ์ด๋ฏธ ํ˜ธ์ŠคํŠธ ์ข…์†์ ์ด๊ณ  ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ฃผ์žฅ์„ ๋‹ค์‹œ ์‹œํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด ์†์„ฑ๊ณผ ํ•จ๊ป˜ Dockerfile ์กฐ๊ฐ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

# Install different software depending on the kernel version of the host
RUN wget http://example.com/$(uname -r)/some_resource
# example.intranet is only accessible from specific hosts
RUN wget http://example.intranet/some_resource
# get something from localhost
RUN wget http://localhost/some_resource
# gcc will enable optimizations supported by the host's CPU
RUN gcc -march=native .....
# node:latest changes as time goes by
FROM node
# ubuntu package lists change as time goes by
RUN apt-get update
# install different software depending on the docker storage driver
RUN if [ $(mount | head -n 1 | awk '{print $5}') == "zfs" ]; then .....; fi

์†”์งํžˆ --mount ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์บ์‹œ ๋ฌดํšจํ™”( --no-cache )๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. CLI์—์„œ ์ „์ฒด ๋˜๋Š” ์•„์˜ˆ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ์„ธ๋ถ„ํ™”๋œ ์บ์‹œ ์ œ์–ด๋ฅผ ์‚ดํŽด๋ณด๊ณ ์ž ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋Š” ๋ณ„๋„์˜ ์ฃผ์ œ์ž…๋‹ˆ๋‹ค.

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

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

์ •ํ™ฉ

  1. CircleCI์—๋Š” ๋นŒ๋“œ ์ค‘์— ๋ชจ๋“  ๋‚ด๋ถ€ ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ssh ํ‚ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. GitHub๋Š” ๋‚ด๋ถ€ ์ข…์†์„ฑ์„ ํ˜ธ์ŠคํŒ…ํ•˜๊ณ  ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ต์…˜

  1. --build-arg ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ค‘์— ํ† ํฐ์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค(๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ). ์ด๊ฒƒ์€ ์ถ”๊ฐ€ ๋‹จ๊ณ„ ์—†์ด "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งค๋ ฅ์ ์ด๊ณ  ์‰ฌ์šด ์˜ต์…˜์ž…๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ADD ๋ฐ COPY ๋Š” ๋ณ„๋„์˜ ๋ ˆ์ด์–ด์—์„œ ์‹คํ–‰๋˜๋ฏ€๋กœ ์ด์ „ ๋ ˆ์ด์–ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถ™์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋‚ด ์ด๋ฏธ์ง€์˜ ํฌ๊ธฐ๊ฐ€ ๋‘ ๋ฐฐ ์ด์ƒ์ด์ง€๋งŒ ์ „์ฒด ํฌ๊ธฐ๋Š” ์ง€๊ธˆ์€ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ํžˆ์Šคํ† ๋ฆฌ์—์„œ ๋นŒ๋“œ ์‹œ๊ฐ„ ์ธ์ˆ˜๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•œ PR(์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค)์ด ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์ง€๋งŒ irrc ์บ์‹ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ ์ค‘์ด๋ผ๋Š” ์†Œ์‹์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

@misakwa ์šฐ๋ฆฌ๋Š” 1.14์—์„œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋น„๋ฐ€์„ ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@cpuguy83์„ ๋“ฃ๊ฒŒ ๋˜์–ด ๋งค์šฐ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์–ธ์ œ ์ถœ์‹œ๋ ์ง€ ์ง€์ผœ๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ž‘์—… ํ๋ฆ„ ์ค‘ ์ผ๋ถ€๋ฅผ ํ™•์‹คํžˆ ๋‹จ์ˆœํ™”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” 1.14์—์„œ ๋นŒ๋“œ์— ๋Œ€ํ•œ ๋น„๋ฐ€์„ ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

yarn-cache ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ณผ๋ฅจ ๋งคํ•‘ ๋นŒ๋“œ ํƒ€์ž„ ๋งคํ•‘์—๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

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

๋”ฐ๋ผ์„œ docker-compose.build.yml ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

services: 
  my-app:
    image: mhart/alpine-node:7.1.0
    container_name: my-app-build-container # to have fixed name
    volumes:
    - ${YARN_CACHE}:/root/.cache/yarn # attach yarn cache from host
    - ${HOME}/.ssh:/.ssh:ro    # attach secrets
    - ./:/source
    environment: # set any vars you need
     TEST_VAR: "some value"    
    ports:
    - "3000"
    working_dir: /app/my-app # set needed correct working dir even if if doesn't exist in container while build type
    command: sh /source/my-app.docker.build.sh # build script

1) docker compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

$ docker-compose -f docker-compose.build.yml up --force-recreate my-app

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‰˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ my-app.docker.build.sh ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Dockerfile ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•œ OS ํŒจํ‚ค์ง€ ์„ค์น˜
  • ํ•„์š”ํ•œ ์†Œ์Šค ์ฝ”๋“œ ๋ณต์‚ฌ(๋งคํ•‘๋œ /source ํด๋”์—์„œ)
  • ์ข…์†์„ฑ ์„ค์น˜
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋นŒ๋“œ/์ปดํŒŒ์ผ/ํ…Œ์ŠคํŠธ
  • ๋Œ€์ƒ ํ™˜๊ฒฝ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํŒจํ‚ค์ง€ ๋ฐ ํ•ญ๋ชฉ ์ œ๊ฑฐ(์ตœ์ข… ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ค„์ด๊ธฐ)

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Œ€์ƒ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” CMD๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

docker commit -c "CMD npm run serve" my-app-build-container my-app-build-image:tag

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

@whitecolor ๋„ต ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค :) ํ•œ ๊ฐ€์ง€๋งŒ ์ œ์™ธํ•˜๋ฉด docker build ๋Š” ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐ ์ •๋ง ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ํƒ‘์žฌ๋œ ์†Œ์Šค ๋ณผ๋ฅจ์€ ๋ถˆํ–‰ํžˆ๋„ ์›๊ฒฉ ๋„์ปค ๋ฐ๋ชฌ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ €์ „๋ ฅ/๋Œ€์—ญํญ ๋žฉํ†ฑ์šฉ ํด๋ผ์šฐ๋“œ์˜ ๋„์ปค ๋จธ์‹ ). ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์„ฑ๊ฐ€์‹  docker run , docker cp , docker run ๋“ฑ ์ผ๋ จ์˜ ๋„์ปค ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ์Šค๋ƒ…์ƒท์„ ์ฐ์–ด์•ผ ํ•˜์ง€๋งŒ ์ •๋ง ํ•ดํ‚น์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๊ณต์‹์ ์œผ๋กœ docker ๋นŒ๋“œ์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“ค๊ณ  ๋ ˆ์ด์–ด๋ง์„ ์‚ฌ์šฉํ•˜๊ณ  ์ปจํ…์ŠคํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์ •๋ง ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜„

@rdsubhas ๋„ค ๋งž์Šต๋‹ˆ๋‹ค

@whitecolor ์ •๋ง ๊ฐ„๋‹จํ•˜๊ณ  ํšจ๊ณผ์ ์ธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ 30-40๋ถ„ ๋นŒ๋“œ๋ฅผ ์•ฝ 5๋ถ„์œผ๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ๊ธฐ๋Šฅ์— --mount๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด ์†”๋ฃจ์…˜์ด ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹ค์ œ๋กœ ์ฐจ๋‹จ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์ดํ•ดํ–ˆ์ง€๋งŒ ์ค‘๋ณต์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ #17745์— ๋Œ€ํ•ด ๋‚จ๊ธด ๋Œ“๊ธ€์ž…๋‹ˆ๋‹ค. ํ›„์ž์˜ ์š”์ ์— ๋Œ€ํ•ด์„œ๋Š” ๋‚ด๊ฐ€ ์ž˜๋ชป ์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. "ํ•ด๊ฒฐ๋œ ์ค‘๋ณต"์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๋ฒ„๊ทธ์˜ ๋งจ ์œ„ ์„ค๋ช… ์˜์—ญ์— ํ‘œ์‹œํ•˜๋Š” Bugzilla์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์— ์ต์ˆ™ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งˆ์Œ์„ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์•„๋‹™๋‹ˆ๋‹ค. (๊ทธ๋ž˜์„œ ๋‚ด ์‚ฌ๊ณผ @graingert , ๋‚˜๋Š” ์•„๋Š” ๋ฐฉ๋ฒ•์ด ๊ฑฐ์˜ ์—†์—ˆ์œผ๋ฏ€๋กœ 20pt ๊ธ€๊ผด๋กœ ๋‚˜์—๊ฒŒ ์†Œ๋ฆฌ์น  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑด ๊ณผ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.)


์ œ ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒƒ์ด ๋ฐ๋น„์•ˆ ์‹œ์Šคํ…œ์—์„œ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. /var/cache/apt ๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ•˜์—ฌ ๋™์ผํ•œ .deb ํŒŒ์ผ์„ ๊ณ„์†ํ•ด์„œ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (์ •๋ง๋กœ "๋ฌด์ œํ•œ" ์ธํ„ฐ๋„ท ํ• ๋‹น๋Ÿ‰์€ ํŠนํžˆ ์—ฌ๊ธฐ ํ˜ธ์ฃผ์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋‹ค์šด๋กœ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.)

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

๋˜๋Š” ์˜ค๋Š˜ ๋ฐค์— ์ €๋Š” ์ œ ์ž์‹ ์„ ์œ„ํ•ด Gentoo ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ์—์„œ /usr/portage ๋ฅผ ๋งˆ์šดํŠธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Dockerfile ๊ฐ€ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•  ๋•Œ "์ด๋ด, /usr/portage (์ปจํ…Œ์ด๋„ˆ์— ์žˆ์Œ)์ด ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ๊ฐ€์ ธ๊ฐˆ๊ฒŒ์š”"๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜๋Š”, ๋ณผ๋ฅจ์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ ๋ณต์‚ฌ๋ณธ์„ ๊ฐ€์ ธ์˜ค๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์Šค๋งˆํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ Bourne ์…ธ ์Šคํฌ๋ฆฝํŠธ์— ๊ฐ„๋‹จํ•œ if ๋ฌธ์ž…๋‹ˆ๋‹ค... IF ๋ณผ๋ฅจ์„ ํƒ‘์žฌํ•˜๋Š” ๊ธฐ๋ณธ ๋…ผ๋ฆฌ๊ฐ€ ์ฒ˜์Œ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ์ œ Gentoo ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋นŒ๋“œ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค /usr/portage ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋‹คํ–‰ํžˆ๋„ ๋ฏธ๋Ÿฌ๋Š” ์ œ LAN์— ์žˆ์Šต๋‹ˆ๋‹ค). ์ด๋Š” ํ•œ ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ช‡ ๋ถ„ ์ •๋„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ฐ€์น˜ ์žˆ๋Š” ์ œ์•ˆ์ธ ๋งŽ์€ ์ด์œ ์™€ #7115์—์„œ ์ œ์•ˆ๋œ ์ค‘์ฒฉ ๋นŒ๋“œ๊ฐ€ ์œ„์˜ ๊ฒฝ์šฐ์— ๋„์›€์ด ๋ ์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.


@whitecolor ๋Š” ํฅ๋ฏธ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด Docker ์‹œ์Šคํ…œ ์™ธ๋ถ€์—์„œ Makefile ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@sjlongland ๋‚˜๋Š” ๋‹น์‹ ์—๊ฒŒ ์†Œ๋ฆฌ ์ง€๋ฅด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํฐ "ํ•ด๊ฒฐ๋œ ์ค‘๋ณต"ํ†ต์ง€๋ฅผ ํด๋ฆฌ ํ•„๋งํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” docker ๋ฐ docker-compose๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” ๋Œ€๋ถ€๋ถ„ nodeJS๋กœ ์ž‘์„ฑ๋œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์ด์ง€๋งŒ maven ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java๋กœ ์ž‘์„ฑ๋œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Java ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค Maven์—์„œ ์ˆ˜์‹ญ ๊ฐœ์˜ ์ข…์†์„ฑ์ด ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋ช‡ ๋ถ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๋Š” ์•ฝ 15์ดˆ ๋งŒ์— ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ์ถ”์•…ํ•˜๋ฉฐ ์šฐ๋ฆฌ์˜ CI ์ „๋žต์— ์ƒ๋‹นํ•œ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์˜์กด์„ฑ์„ ๋ณ€์กฐํ•˜๊ณ  ๊ฑฐ๊ธฐ์— ๋ถˆ์พŒํ•œ ์ฝ”๋“œ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. "๋นŒ๋“œ ๋ณผ๋ฅจ"์œผ๋กœ ๋นŒ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ docker-hub ๋˜๋Š” docker-store์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜์—ฌ ์‰ฝ๊ฒŒ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” IMHO.
์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒ ์„ค๋ช…ํ•˜๋ ค๋ฉด ๊ธฐ์—…์šฉ๊ณผ ๊ฐœ์ธ์šฉ docker ์‚ฌ์ด์— ๋ฒ”์œ„๋ฅผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@stepps ๋Š” docker-compose ๋Œ€์‹  https://pypi.python.org/pypi/shipwright ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๋‚˜ ์ž์‹ ์„ ์œ„ํ•œ ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์ž ์‹œ ๋™์•ˆ ์ด ์Šค๋ ˆ๋“œ๋ฅผ ๋”ฐ๋ผ์™”์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ๋…ธ๋ ฅ์œผ๋กœ ์œ ์—ฐํ•œ ๋ฐฉ์‹์œผ๋กœ ์ตœ์†Œํ•œ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์ €๋Š” @edannenberg์˜ https://github.com/edannenberg/gentoo-bb ๋ฅผ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ Gentoo์˜ ํฌํ‹ฐ์ง€ ๋ฐ ์ด๋จธ์ง•์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฏ€๋กœ @sjlongland Gentoo ๊ธฐ๋ฐ˜ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ์ข‹์•„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. dist ํŒŒ์ผ๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€๊ฐ€ ์บ์‹œ๋˜๋ฏ€๋กœ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋น ๋ฅด๊ฒŒ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ›„ํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. git์„ ์‚ฌ์šฉํ•˜์—ฌ repo๋ฅผ ๋ณต์ œํ•œ ๋‹ค์Œ ๋นŒ๋“œํ•˜๊ณ  ์ตœ์ข… ์ด๋ฏธ์ง€์— ๋นŒ๋“œ๋งŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ํƒ€์‚ฌ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. Dockerfile์„ ํ…œํ”Œ๋ฆฟํ™”ํ•ฉ๋‹ˆ๋‹ค.

figlet ์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. -

๋นŒ๋“œ.conf:

IMAGE_PARENT="gentoobb/glibc"

๋„์ปคํŒŒ์ผ.ํ…œํ”Œ๋ฆฟ:

FROM ${IMAGE_PARENT}
ADD rootfs.tar /
USER figlet
CMD ["gentoo-bb"]
ENTRYPOINT ["figlet"]

build.sh

PACKAGES="app-misc/figlet"

configure_rootfs_build() {
        useradd figlet
}

๋‚˜๋Š” @whitecolor ์˜ ์†”๋ฃจ์…˜์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. Docker ๊ธฐ์ˆ ๊ณผ ๊ฐ„๋‹จํ•œ ์…ธ ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋‹ค๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. gentoo-bb๊ฐ€ ๋” ์™„๋ฒฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Shipwright๋Š” ๋ธŒ๋žœ์น˜ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๊ฐœ๋ฐœ์ž ์ค‘์‹ฌ ๊ธฐ๋Šฅ์ด ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. https://github.com/grammarly/rocker ๋„ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ณต์œ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋กœ์ปฌ ํŒŒ์ผ์„ ๋…ธ์ถœํ•˜๋Š” http ์„œ๋ฒ„๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์‹คํ–‰ํ•œ ๋‹ค์Œ curl/wget ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋„์ปค ๋นŒ๋“œ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๋Ÿฐ ํ•ดํ‚น์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ์ •๋ง๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜ : ๋‚ด ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ์€ ์ปจํ…Œ์ด๋„ˆ์˜ ์†Œ์Šค์—์„œ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ €์žฅ์†Œ์— Dockerfiles๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ github์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ๋‹ค๋ฅธ git ํด๋ก ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์–•์€ ํด๋ก  ๋“ฑ์ด ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ...

๊ทธ๋ž˜์„œ ๋ฐฉ๊ธˆ rhel7 ๋นŒ๋“œ ํ˜ธ์ŠคํŠธ์—์„œ [1]์„ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ Red Hat์˜ docker ๋ฐ๋ชฌ ๋นŒ๋“œ์—๋Š” ๋นŒ๋“œ์— ๋Œ€ํ•œ -v ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” CentOS/Fedora์—์„œ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์ง€๋งŒ Fedora/CentOS์—๋„ ์•„๋งˆ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ RHEL ๊ฐœ๋ฐœ์ž ๊ตฌ๋…์€ ์ด์ œ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค[2].

@fatherlinux Fedora์—์„œ `docker build -v'๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@fatherlinux CentOS 7 ๋ฒ„์ „์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

+1 ๊ณต์‹ ๋„์ปค์— ์ถ”๊ฐ€ํ•  ๋•Œ ์ •๋ง ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

centos์™€ linuxmint(ํ˜„์žฌ 17.03.1-ce ์‹คํ–‰) ๋ชจ๋‘์—์„œ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ญ”๊ฐ€ ๋น ์กŒ์Šต๋‹ˆ๊นŒ? -v ์˜ต์…˜์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฏผํŠธ์—

$ docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
      --build-arg list             Set build-time variables (default [])
      --cache-from stringSlice     Images to consider as cache sources
      --cgroup-parent string       Optional parent cgroup for the container
      --compress                   Compress the build context using gzip
      --cpu-period int             Limit the CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit the CPU CFS (Completely Fair Scheduler) quota
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
      --disable-content-trust      Skip image verification (default true)
  -f, --file string                Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                   Always remove intermediate containers
      --help                       Print usage
      --isolation string           Container isolation technology
      --label list                 Set metadata for an image (default [])
  -m, --memory string              Memory limit
      --memory-swap string         Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --network string             Set the networking mode for the RUN instructions during build (default "default")
      --no-cache                   Do not use cache when building the image
      --pull                       Always attempt to pull a newer version of the image
  -q, --quiet                      Suppress the build output and print image ID on success
      --rm                         Remove intermediate containers after a successful build (default true)
      --security-opt stringSlice   Security options
      --shm-size string            Size of /dev/shm, default value is 64MB
  -t, --tag list                   Name and optionally a tag in the 'name:tag' format (default [])
      --ulimit ulimit              Ulimit options (default [])
$ cat /etc/lsb-release 
DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=18
DISTRIB_CODENAME=sarah
DISTRIB_DESCRIPTION="Linux Mint 18 Sarah"
$ docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:45:26 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:45:26 2017
 OS/Arch:      linux/amd64
 Experimental: false

์„ผํ† ์Šค 7์—์„œ

# docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

Options:
      --build-arg list             Set build-time variables (default [])
      --cache-from stringSlice     Images to consider as cache sources
      --cgroup-parent string       Optional parent cgroup for the container
      --compress                   Compress the build context using gzip
      --cpu-period int             Limit the CPU CFS (Completely Fair Scheduler) period
      --cpu-quota int              Limit the CPU CFS (Completely Fair Scheduler) quota
  -c, --cpu-shares int             CPU shares (relative weight)
      --cpuset-cpus string         CPUs in which to allow execution (0-3, 0,1)
      --cpuset-mems string         MEMs in which to allow execution (0-3, 0,1)
      --disable-content-trust      Skip image verification (default true)
  -f, --file string                Name of the Dockerfile (Default is 'PATH/Dockerfile')
      --force-rm                   Always remove intermediate containers
      --help                       Print usage
      --isolation string           Container isolation technology
      --label list                 Set metadata for an image (default [])
  -m, --memory string              Memory limit
      --memory-swap string         Swap limit equal to memory plus swap: '-1' to enable unlimited swap
      --network string             Set the networking mode for the RUN instructions during build (default "default")
      --no-cache                   Do not use cache when building the image
      --pull                       Always attempt to pull a newer version of the image
  -q, --quiet                      Suppress the build output and print image ID on success
      --rm                         Remove intermediate containers after a successful build (default true)
      --security-opt stringSlice   Security options
      --shm-size string            Size of /dev/shm, default value is 64MB
  -t, --tag list                   Name and optionally a tag in the 'name:tag' format (default [])
      --ulimit ulimit              Ulimit options (default [])
# docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 17:05:44 2017
 OS/Arch:      linux/amd64
# cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core) 

@wilfriedroset CentOS 7์—์„œ๋Š” ๋น„๊ณต์‹ Docker ํŒจํ‚ค์ง€๊ฐ€ ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. EPEL ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@nathanjackson ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ณต์‹ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ETA๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@wilfriedroset AFAIK, "๋นŒ๋“œ ์ด์‹์„ฑ"์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ธฐ๋Šฅ์ด ๊ณต์‹ ๋„์ปค์— ์—†์–ด์•ผ ํ•œ๋‹ค๊ณ (์—ฌ๋Ÿฌ ๋ฒˆ) ๊ฒฐ์ •๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ETA๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Docker ๋นŒ๋“œ ์„œ๋น„์Šค๋ฅผ ํฌํ•จํ•˜์—ฌ ์–ด๋””์—์„œ๋‚˜ Dockerfile์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ ์ œํ•œ๋œ ๋นŒ๋“œ ์ด์‹์„ฑ์€ ๊ณ ๊ฐ์ด ์ง„์ •์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋นŒ๋“œ ํ™˜๊ฒฝ/ํŒœ์„ ์„ค์ •ํ•˜๊ณ  ํ•ด๋‹น ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๋ฅผ ํ•ญ์ƒ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. -v ๋นŒ๋“œ ์˜ต์…˜์€ ์–ด๋–ค ์‹์œผ๋กœ๋“  ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด NFS ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๋นŒ๋“œ ์„œ๋ฒ„์˜ fstab์— ํ•ด๋‹น ๋งˆ์šดํŠธ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ํŒœ์˜ ์–ด๋Š ๊ณณ์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ๋นŒ๋“œ๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

RHEL 7.3์—์„œ
````
[ root@rhel7 ~]# ๋„์ปค ๋นŒ๋“œ --help

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

Dockerfile์—์„œ ์ด๋ฏธ์ง€ ๋นŒ๋“œ

์˜ต์…˜:
--build-arg value ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณ€์ˆ˜ ์„ค์ •(๊ธฐ๋ณธ๊ฐ’ [])
--cgroup-parent string ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์„ ํƒ์  ์ƒ์œ„ cgroup
--cpu-period int CPU CFS(Completely Fair Scheduler) ๊ธฐ๊ฐ„ ์ œํ•œ
--cpu-quota int CPU CFS(Completely Fair Scheduler) ํ• ๋‹น๋Ÿ‰ ์ œํ•œ
-c, --cpu-shares int CPU ๊ณต์œ (์ƒ๋Œ€ ๊ฐ€์ค‘์น˜)
--cpuset-cpus string ์‹คํ–‰์„ ํ—ˆ์šฉํ•  CPU(0-3, 0,1)
--cpuset-mems ๋ฌธ์ž์—ด ์‹คํ–‰์„ ํ—ˆ์šฉํ•  MEM(0-3, 0,1)
--disable-content-trust ์ด๋ฏธ์ง€ ํ™•์ธ ๊ฑด๋„ˆ๋›ฐ๊ธฐ(๊ธฐ๋ณธ๊ฐ’ true)
-f, --file string Dockerfile์˜ ์ด๋ฆ„(๊ธฐ๋ณธ๊ฐ’์€ 'PATH/Dockerfile')
--force-rm ํ•ญ์ƒ ์ค‘๊ฐ„ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ
--help ์ธ์‡„ ์‚ฌ์šฉ
--isolation string ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ ๊ธฐ์ˆ 
--label value ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค์ •(๊ธฐ๋ณธ๊ฐ’ [])
-m, --memory string ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ
--memory-swap string ๋ฉ”๋ชจ๋ฆฌ์— ์Šค์™‘์„ ๋”ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์Šค์™‘ ์ œํ•œ: ๋ฌด์ œํ•œ ์Šค์™‘์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด '-1'
--no-cache ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
--pull ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์˜ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๊ณ  ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
-q, --quiet ๋นŒ๋“œ ์ถœ๋ ฅ์„ ์–ต์ œํ•˜๊ณ  ์„ฑ๊ณต ์‹œ ์ด๋ฏธ์ง€ ID๋ฅผ ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค.
--rm ์„ฑ๊ณต์ ์ธ ๋นŒ๋“œ ํ›„ ์ค‘๊ฐ„ ์ปจํ…Œ์ด๋„ˆ ์ œ๊ฑฐ(๊ธฐ๋ณธ๊ฐ’ true)
--shm-size string /dev/shm์˜ ํฌ๊ธฐ, ๊ธฐ๋ณธ๊ฐ’์€ 64MB์ž…๋‹ˆ๋‹ค.
-t, --tag ๊ฐ’ ์ด๋ฆ„ ๋ฐ ์„ ํƒ์ ์œผ๋กœ ' name:tag ' ํ˜•์‹์˜ ํƒœ๊ทธ(๊ธฐ๋ณธ๊ฐ’ [])
--ulimit ๊ฐ’ Ulimit ์˜ต์…˜(๊ธฐ๋ณธ๊ฐ’ [])
-v, --volume ๊ฐ’ ๋นŒ๋“œ ์‹œ ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ ์„ค์ •(๊ธฐ๋ณธ๊ฐ’ [])
```

CI ๊ตฌ์ถ• ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ CI์˜ yarn ์บ์‹œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1 : node_modules๋ฅผ ๊ณ„์†ํ•ด์„œ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ํŠนํžˆ nodejs ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ ์ •๋ง ๋”์ฐํ•ฉ๋‹ˆ๋‹ค.
nfs๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ "๋ฐ˜๋ณต ๊ฐ€๋Šฅ"์ด ์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ์ข‹์€ ์ด์œ ๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค...

#31257๊ณผ #32063์ด ํ•ฉ์ณ์ง€๋ฉด ๋”์šฑ ์ค‘์š”ํ•ด์งˆ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#32507์„ ์‚ดํŽด๋ณด์„ธ์š”.

@fatherlinux Dockerfile ๋‚ด์—์„œ COPY ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ๋นŒ๋“œ ์ด์‹์„ฑ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ํฐ ํŒŒ์ผ์˜ ๋ณต์‚ฌ๋ณธ ์ˆ˜๋ฅผ ํ”ผํ•˜๊ณ (์‹œ๊ฐ„ ๋ณต์žก์„ฑ ์ด์œ ๋กœ) ํŒŒ์ผ์„ ์ปจํ…Œ์ด๋„ˆ์™€ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•œ ๋นŒ๋“œ ์‹œ ์ฝ๊ธฐ ์ „์šฉ ์˜ต์…˜์„ ์ฐพ๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@arunmk ์ฐธ์กฐ https://github.com/moby/moby/issues/32507

@arunmk @cpuguy83 ์ •ํ™•ํžˆ. ์•„์ด๋””์–ด๋Š” ๋นŒ๋“œ ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ์— ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋งค์šฐ ํฌ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ ๋นŒ๋“œ ์‹œ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋‚ด์šฉ์— ๋”ฐ๋ผ Red Hat ๋ฒ„์ „์˜ docker ๋ฐ๋ชฌ์—์„œ -v bind ๋งˆ์šดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์ฝ๊ธฐ ์ „์šฉ์ž…๋‹ˆ๋‹ค(์ง€๋‚œ ์ฃผ์— ๋ถˆํƒ€๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค).

๋”ฐ๋ผ์„œ ์˜ค๋Š˜ ํ•„์š”ํ•œ ๊ฒฝ์šฐ Fedora, CentOS ๋˜๋Š” RHEL์„ ํ™•์ธํ•˜๊ณ  ๋นŒ๋“œ ์‹œ ๋ฐ์ดํ„ฐ์˜ ์ฝ๊ธฐ ์ „์šฉ ๋ณต์‚ฌ๋ณธ์— ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค...

๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œ ํŒœ ๋‚ด์—์„œ ์ด์‹์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ NFS ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค....

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

์ธ์œ„์ ์ธ ์˜ˆ:

FROM fatImage AS build
COPY bigData /data
RUN some_stoff /data

FROM tinyImage
COPY --from=build /data/result

@fatherlinux ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค
@cpuguy83 ์ž์„ธํ•œ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ๋‚ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 3.3GB ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ๊ตฌ์ถ•๋œ RPM์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ๊ฐœ์˜ ๋ณต์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์—์„œ RPM ๋‚ด๋กœ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‘ ๋ฒˆ์งธ ์‚ฌ๋ณธ์„ ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์‚ฌ๋ณธ์„ ํ”ผํ•˜๋ ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋‹ค๋‹จ๊ณ„ ๋ณต์‚ฌ๊ฐ€ ๋ณต์‚ฌ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ '1'๋กœ ์ค„์˜€๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜๊ณ  ์ˆซ์ž๋ฅผ '0'์œผ๋กœ ์ค„์ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๊นŒ?

@arunmk ํด๋ผ์ด์–ธํŠธ์—์„œ ๋นŒ๋“œ ์ธ์Šคํ„ด์Šค๋กœ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ด๋“  ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.

@ cpuguy83 ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ์€ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์ˆ˜ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์›์ž์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•จ์ธ๊ฐ€?

@fatherlinux

RHEL7์—์„œ -v๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ค‘์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ณผ๋ฅจ์€ ๋„์ปค ๋นŒ๋“œ์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ Docker๊ฐ€ ์•„๋‹Œ RHEL์˜ docker ํŒจํ‚ค์ง€์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํŒจ์น˜๊ฐ€ ์—…์ŠคํŠธ๋ฆผ์—์„œ ์ˆ˜๋ฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@fatherlinux

RHEL7์—์„œ -v๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ ์ค‘์— ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ณผ๋ฅจ์€ ๋„์ปค ๋นŒ๋“œ์—์„œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ”์ธ๋“œ ๋งˆ์šดํŠธ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

@fcntl

์˜ค๋ฅ˜๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๋ฐ”์ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ $ /hostsomething:/containersomething -v /something ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@thebigb ๋ฐ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค, ์šฐ๋ฆฌ๋Š” ๋„์ปค ๋นŒ๋“œ ์ค‘์— ccache๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ”„๋ผ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋œ๋‹ค๋ฉด https://github.com/WebHare/ccache-memcached-server ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ด์ƒ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ์•„๋งˆ๋„ ์“ธ๋ชจ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ–ˆ๋˜ ๋ฐ”๋กœ ๊ทธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ccache์ž…๋‹ˆ๋‹ค. ๋„์ปค ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์ค‘์— ccache ์บ์‹œ๋ฅผ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ์ž์ฒด์— ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. @unilynx ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข‹์€ ํƒ€์ด๋ฐ์ž…๋‹ˆ๋‹ค!

๋˜ ๋‹ค๋ฅธ ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€: ํ˜„์žฌ ๋‚˜๋Š” rocker ์˜ MOUNT ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ /root/.cache ๋ฐ /var/cache/apk ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

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

@embray @roxma ๋Š” https://github.com/moby/moby/issues/32507 ์„ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”ผ๋“œ๋ฐฑ ํ™˜์˜

๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ์˜ ๋„์ž…์œผ๋กœ Maven์˜ ๋กœ์ปฌ ์บ์‹œ์— ๋Œ€ํ•œ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•  ํ•„์š”์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

@gim913 ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ฐธ์—ฌํ•˜๋Š” ๋ฐฉ์‹์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฌ๊ธฐ์— ๋งํฌ๋œ ๊ธฐ์กด ์ œ์•ˆ์„ ๊ฒ€ํ† ํ•˜์—ฌ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@gim913 ๋‹ค์–‘ํ•œ ๋ฐฐํฌํŒ์— ๋„์ปค๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ์ด ๋‹จ๊ณ„์—์„œ ํ™˜๊ฒฝ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ(์ฆ‰, ๋„์ปค๋ฅผ ์™„์ „ํžˆ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ)์€ 'OS'๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ํŒŒ๊ดด์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(๋‹ค๋ฅธ Linux ๋ฐฐํฌํŒ์—์„œ ๋‹ค์Œ์„ ํฌํ•จํ•˜๋Š” RedHat ๋นŒ๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. -V? )

RedHat์˜ docker ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฝ์ง€ ์•Š์„๊นŒ์š”? ์•„๋งˆ๋„ ์—ฌ๊ธฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋นŒ๋“œ์—์„œ '-v' ์˜ต์…˜์„ ์–ป๊ธฐ ์œ„ํ•ด ๊ด€๋ จ ํŒจ์น˜/ํฌํฌ/์ปค๋ฐ‹์„ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@unilynx ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค

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

๋‚˜๋Š” ํŒŒ์ด์ฌ ๋ฐ”ํ€ด๋ฅผ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•˜๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ์— ์„ค์น˜ํ•˜๊ณ  ์ •๋ง๋กœ ํ•„์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์–ด๋–ป๊ฒŒ๋“  ์Šค์ฟผ์‹œ๋ฅผ ์‹œ๋„ํ•ด์•ผ ํ•˜๋Š” ๋ ˆ์ด์–ด๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. 1์ผ์ฐจ์— ๋ฒŒ์จ rocker ์•Œ์•„๋ณด๊ณ  ์žˆ์–ด์š” ๐Ÿ˜ข ๐Ÿ˜ข ๐Ÿ˜ข

์ด๊ฒƒ์€ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๊ณ  ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค(๋˜๋Š” ๋งˆ์šดํŠธ ๋ช…๋ น, rocker ๋‹ค์‹œ ์ฐธ์กฐ). ์ด ๊ธฐ๋Šฅ์ด๋‚˜ ์ด์™€ ์œ ์‚ฌํ•œ ๋ˆ„๋ฝ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด (์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ) ์Šคํฌ๋ฆฝํŒ…ํ•˜๋Š” ๋ฐ ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋ฉ๋‹ˆ๊นŒ?

@awbacker Multi-stag ๋นŒ๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๊ฝค ์ž˜ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

FROM something AS my_wheels
RUN compile_all_the_things

FROM something
COPY --from my_wheels /wherever
RUN do_stuff_with_wheels

์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ์—๋งŒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์บ์‹œ๋Š” ๋‹ค๋ฅธ ๋นŒ๋“œ/๋„์ปค ํŒŒ์ผ ๊ฐ„์—๋„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์ „์ฒด ๋นŒ๋“œ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋งˆ์šดํŠธ ์‚ฌ์–‘์ด my_wheels ๋นŒ๋“œ ํƒ€๊ฒŸ์„ ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  ๋งˆ์šดํŠธํ•˜๋„๋ก ์ง€์‹œํ•˜๋Š” RUN --mount ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์ œ์•ˆ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@kenyee ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด๊ฒƒ์€ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งˆ์šดํŠธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 17.07-์‹คํ—˜์—์„œ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ฆ๋ถ„์ ์œผ๋กœ๋งŒ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

@ cpuguy83 ์ ์–ด๋„ Gradle Java ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Gradle Jar ํŒŒ์ผ์ด ๋ฏธ๋ฆฌ ์บ์‹œ๋œ ๊ธฐ๋ณธ Docker ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์ง€๋งŒ ์†Œ์Šค์˜ Gradle ๋นŒ๋“œ๋Š” ๋ชจ๋“  ์ข…์†์„ฑ์„ ์บ์‹œ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์ž…๋‹ˆ๋‹ค.

@cpuguy83 ๋‹ค๋‹จ๊ณ„๋Š” ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์—์„œ ๋ณต์‚ฌ๋œ ํœ ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @awbacker๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ /wherever ํด๋”์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ์บ์‹œ๋˜๊ณ  ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

@BryanHunt ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์ผ๋ถ€๊ฐ€ deps๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? ํ™•์‹คํžˆ Gradle์€ ์‹ค์ œ๋กœ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ์บ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@cpuguy83 ์˜ˆ, deps๋Š” ๋นŒ๋“œ์˜ ์ผ๋ถ€๋กœ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Maven๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ : https://github.com/gradle/gradle/issues/1049

๋นŒ๋“œ ๋งˆ์šดํŠธ์— ๋Œ€ํ•œ PR์ด ์–ด๋”˜๊ฐ€์— ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?

@graingert ์—ฌ๊ธฐ

๐Ÿ‘์ด๋ฅผ ์œ„ํ•ด. Lunar Way์—์„œ๋Š” CI ์„œ๋ฒ„์—์„œ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์ผ Docker ๋นŒ๋“œ์—์„œ ์™„์ „ํ•œ "๋นŒ๋“œ -> ํ…Œ์ŠคํŠธ -> ํ”„๋กœ๋•์…˜ ์ด๋ฏธ์ง€ ๋นŒ๋“œ" ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ์ค‘๊ฐ„ ์ปจํ…Œ์ด๋„ˆ์—์„œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•œ ๋‹ค์Œ ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ œํ’ˆ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์ง€๊ธˆ ๋‘ ๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

@tbflw ๊ธฐ๋ณธ์ ์œผ๋กœ Docker ๋นŒ๋“œ๋Š” ๋นŒ๋“œ ์‹คํŒจ ํ›„ ์ค‘๊ฐ„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ํ•ด๋‹น ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@BryanHunt @stepps @yngndrw ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ @awhitford
๋นŒ๋“œ ์ข…์†์„ฑ์„ ์บ์‹œํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์€ ๋ฌธ์„œ์˜ ๋‹ค๋‹จ๊ณ„ go ๋นŒ๋“œ ์˜ˆ์ œ ๋˜๋Š” python onbuild Dockerfile ์ฒ˜๋Ÿผ ๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ์€ maven์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ณต์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

FROM maven
WORKDIR /usr/src/app
# /root/.m2 is a volume :(
ENV MAVEN_OPTS=-Dmaven.repo.local=../m2repo/
COPY pom.xml .
# v2.8 doesn't work :(
RUN mvn -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.0.2:go-offline
COPY . .
RUN mvn -B -e -o -T 1C verify

FROM openjdk
COPY --from=0 /usr/src/app/target/*.jar ./

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

@sixcorners Gradle์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@BryanHunt ์ด Dockerfile ๋˜๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ gradle์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? cpuguy83์ด ์‹ค์ œ๋กœ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ข…์†์„ฑ์„ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ํ•ด๊ฒฐ ์ž‘์—…์— ์—ฐ๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. build.gradle ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•ด๋‹น ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

@sixcorners ๋ชจ๋“ˆ์ด ๋งŽ์œผ๋ฉด ๋นŒ๋“œ ํŒŒ์ผ ๋ฐ ์†์„ฑ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ณต์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋งค์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@sixcorners ์˜ ๋‹ค๋‹จ๊ณ„๋Š” ํฅ๋ฏธ๋กœ์šด ํŠธ๋ฆญ์ด๋ฉฐ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž(์˜ˆ: npm, ์ž‘๊ณก๊ฐ€)์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง€ 0 ์ด๋ฏธ์ง€์—์„œ ์ข…์†์„ฑ ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค COPY pom.xml ๋ ˆ์ด์–ด๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์ „์ฒด ์บ์‹œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ pom(์ฃผ์„, 1kBytes ์ข…์†์„ฑ)์—์„œ ๋ฌด์—‡์ด๋“  ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ์บ์‹œ๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋ฅผ ๋ฐ˜๋ณตํ•  ๋•Œ, ํŠนํžˆ ์—ฐ๊ฒฐ ์†๋„๊ฐ€ ๋Š๋ฆฐ ๊ฒฝ์šฐ์—๋„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ Nexus ์ธ์Šคํ„ด์Šค์™€ http_proxy๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: Nexus๋ฅผ ํ†ตํ•œ http ์š”์ฒญ ์ฑ„๋„๋ง).

๋‹ค๋‹จ๊ณ„๋Š” ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ์ด์ƒ์ ์ด์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์†์„ฑ ๋ชฉ๋ก์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์Šคํ…Œ์ด์ง€ 0 ์ด๋ฏธ์ง€์˜ COPY pom.xml๋กœ ์ธํ•ด ๋ ˆ์ด์–ด๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์ „์ฒด ์บ์‹œ๊ฐ€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐœ๋ฐœ์ž๊ฐ€ pom(์ฃผ์„, 1kBytes ์ข…์†์„ฑ)์—์„œ ๋ฌด์—‡์ด๋“  ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ์บ์‹œ๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@hashar COPY --from ๊ธฐ๋Šฅ์€ ๋นŒ๋“œ ๋‹จ๊ณ„์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Dockerfile ์ฐธ์กฐ ์—์„œ :

์„ ํƒ์ ์œผ๋กœ COPY ๋Š” ์ „์†ก๋œ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ด์ „ ๋นŒ๋“œ ๋‹จ๊ณ„( FROM .. AS <name> ๋กœ ์ƒ์„ฑ)๋กœ ์†Œ์Šค ์œ„์น˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋ž˜๊ทธ --from=<name|index> ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์— ์˜ํ•ด. ํ”Œ๋ž˜๊ทธ๋Š” FROM ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ์ด์ „ ๋นŒ๋“œ ๋‹จ๊ณ„์— ํ• ๋‹น๋œ ์ˆซ์ž ์ธ๋ฑ์Šค๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. _ ์ง€์ •๋œ ์ด๋ฆ„์˜ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ด๋ฏธ์ง€๋ฅผ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. _

์ด๋ฅผ ํ†ตํ•ด ์ข…์†์„ฑ์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€๋ฅผ _๋นŒ๋“œ_ํ•˜๊ณ , ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ข…์†์„ฑ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

FROM maven
WORKDIR /usr/src/app
# /root/.m2 is a volume :(
ENV MAVEN_OPTS=-Dmaven.repo.local=../m2repo/
COPY pom.xml .
# v2.8 doesn't work :(
RUN mvn -B -e -C -T 1C org.apache.maven.plugins:maven-dependency-plugin:3.0.2:go-offline
COPY . .
RUN mvn -B -e -o -T 1C verify
docker build -t dependencies:1.0.0 .

๊ทธ๋ฆฌ๊ณ  ์ข…์†์„ฑ์— ๋Œ€ํ•ด dependencies:1.0.0 ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

FROM openjdk
COPY --from=dependencies:1.0.0 /usr/src/app/target/*.jar ./

๋˜๋Š” (ํ…Œ์ŠคํŠธํ•  ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค);

$ mkdir example && cd example
$ touch dep-one.jar dep-two.jar dep-three.jar

$ docker build -t dependencies:1.0.0 . -f -<<'EOF'
FROM scratch
COPY . /usr/src/app/target/
EOF

$ docker build -t myimage -<<'EOF'
FROM busybox
RUN mkdir /foo
COPY --from=dependencies:1.0.0 /usr/src/app/target/*.jar /foo/
RUN ls -la /foo/
EOF

๋นŒ๋“œ ์ถœ๋ ฅ์—์„œ โ€‹โ€‹๋‹ค์Œ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 4/4 : RUN ls -la /foo/
 ---> Running in 012a8dbef91d
total 8
drwxr-xr-x    1 root     root          4096 Oct  7 13:27 .
drwxr-xr-x    1 root     root          4096 Oct  7 13:27 ..
-rw-r--r--    1 root     root             0 Oct  7 13:26 dep-one.jar
-rw-r--r--    1 root     root             0 Oct  7 13:26 dep-three.jar
-rw-r--r--    1 root     root             0 Oct  7 13:26 dep-two.jar
 ---> 71fc7f4b8802

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

buildkit์—๋Š” git์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/moby/buildkit

ํ•ด๊ฒฐ.
bash ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ(~/bin/docker-compose ๋“ฑ):

#!/bin/bash

trap 'kill $(jobs -p)' EXIT
socat TCP-LISTEN:56789,reuseaddr,fork UNIX-CLIENT:${SSH_AUTH_SOCK} &

/usr/bin/docker-compose $@

๊ทธ๋ฆฌ๊ณ  socat์„ ์‚ฌ์šฉํ•˜๋Š” Dockerfile์—์„œ:

...
ENV SSH_AUTH_SOCK /tmp/auth.sock
...
  && apk add --no-cache socat openssh \
  && /bin/sh -c "socat -v UNIX-LISTEN:${SSH_AUTH_SOCK},unlink-early,mode=777,fork TCP:172.22.1.11:56789 &> /dev/null &" \
  && bundle install \
...
or any other ssh commands will works

๊ทธ๋Ÿฐ ๋‹ค์Œ docker-compose build ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

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

python์˜ ๊ฒฝ์šฐ pip install package ํ•˜๋ฉด ํ•ด๋‹น ์ข…์† ํ•ญ๋ชฉ์ด ์บ์‹œ ํด๋”์— ๋‹ค์šด๋กœ๋“œ๋œ ๋‹ค์Œ ์‚ฌ์ดํŠธ ํŒจํ‚ค์ง€์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
์ข‹์€ ์Šต๊ด€์œผ๋กœ pip --no-cache-dir install package ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋ ˆ์ด์–ด์— ์“ฐ๋ ˆ๊ธฐ/์บ์‹œ๋ฅผ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์œ„ํ•ด ์บ์‹œ ํด๋”๋ฅผ ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์—์„œ ์ œ์™ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ build time -v๊ฐ€ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž๊ฐ€ COPY . /somewhere/in/container/ ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž ์•ฑ์ด๋‚˜ ํŒŒ์ผ์— ์ ํ•ฉํ•˜์ง€๋งŒ ์บ์‹œ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. COPY๋Š” ์ž์ฒด ๋ ˆ์ด์–ด๋ฅผ ํ•˜๋‚˜ ๋” ์ƒ์„ฑํ•˜๊ณ  ์ดํ›„ ๋ ˆ์ด์–ด์—์„œ ์บ์‹œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ์œ ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‚˜์œ ๋ถ€์ž‘์šฉ์€ COPY๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์บ์‹œ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ  ๋‹ค์Œ ๋ ˆ์ด์–ด๊ฐ€ ๋ฌดํšจํ™”๋˜๊ณ  ๊ฐ•์ œ๋กœ ์žฌ๊ตฌ์ถ•๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

@wtayyeb ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ pip install ... ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Dockerfile์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋นŒ๋“œํ•  ๋•Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๋งŒํผ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— build time -v๋Š” ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@wtayyeb ๋‹ค๋‹จ๊ณ„ Dockerfile์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ์™€ ๋ฆฐ ์ด๋ฏธ์ง€๋ฅผ ๋ชจ๋‘ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Python์„ ์ผ๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜ํ•œ ๋‹ค์Œ ์ตœ์ข… ์ด๋ฏธ์ง€์— COPY --from์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ ์•„ํ‹ฐํŒฉํŠธ ๋˜๋Š” pip ์ž์ฒด ์—†์ด ํ•„์š”ํ•œ Python ํŒŒ์ผ๋งŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

@manishtomar , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ์•„๋‹ˆ์š”! ๊นจ๋—ํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ์ข…์†์„ฑ์ด ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ๋˜์–ด ํœ ๋กœ ๋นŒ๋“œ ๋ฐ ๋ณ€ํ™˜๋˜๊ณ  ์บ์‹œ๋œ ๋‹ค์Œ ๋Œ€์ƒ ํ™˜๊ฒฝ์— ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ž…๋ ฅํ•˜๋ฉด ์ผํšŒ์„ฑ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•˜๋‚˜์˜ ์ž‘์€ ์ข…์†์„ฑ์ด ์—…๋ฐ์ดํŠธ๋˜๋ฉด ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ , ํœ ๋งํ•˜๊ณ , ๋‹ค์‹œ ์บ์‹œํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
CI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์ž‘์—…์˜ ๋งคํŠธ๋ฆญ์Šค์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•  ๋•Œ CI ์„œ๋ฒ„์˜ ๋™์‹œ ์ž‘์—… ์ˆ˜์— ์ž‘์—…์„ ๊ณฑํ•˜๋ฉด SSD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ iowait๊ฐ€ 3์ดˆ ์ด์ƒ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ๋กœ๋“œ ํ‰๊ท ์ด 15๋ฅผ ์ดˆ๊ณผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ด ์ˆซ์ž๋Š” 2๊ฐœ์˜ ๋™์‹œ ๋นŒ๋“œ ๋ฐ ~20๊ฐœ์˜ ์ข…์†์„ฑ์ด ์žˆ๋Š” ์•ฑ์˜ ๊ฒฝ์šฐ ์‹ค์ œ์ž…๋‹ˆ๋‹ค.) pip ์บ์‹œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ค€๋น„๋œ ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ , ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ , ๋‹ค์‹œ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. bind -v๊ฐ€ ์—†์œผ๋ฉด ์‹œ๊ฐ„๊ณผ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋Š์Šจํ•ด์ง‘๋‹ˆ๋‹ค.

@ibukanov , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์•ฑ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋‹จ๊ณ„ Dockerfile์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile์ด ํ•˜๋‚˜๋งŒ ์žˆ๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ๋นŒ๋“œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Dockerfile์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ๊ณ  ๊ฐ ํŒŒ์ผ์ด Python ๋ฒ„์ „(ํ˜„์žฌ๋Š” 2.7,3.6)์— ๋Œ€ํ•ด ๋นŒ๋“œ๋˜๊ณ  ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ c-ํ™•์žฅ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์„ ํƒํ•œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•ด ๋นŒ๋“œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์œ„ ๋‹จ๋ฝ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@thaJeztah ๋‹น์‹ ์˜ ์ œ์•ˆ์€ ํ›Œ๋ฅญํ•˜๊ณ  ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋นŒ๋“œ ์บ์‹œ์˜ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ์•„๋ฌด ๊ฒƒ๋„ ๋ณต์‚ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@thedrow ๋‚ด ์˜ˆ๋Š” ํ˜„์žฌ ์กด์žฌํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. RUN --mount ์ œ์•ˆ(https://github.com/moby/moby/issues/32507)์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋˜ํ•œ ์  ํˆฌ ์ปจํ…Œ์ด๋„ˆ ์‚ฌ์šฉ์ž์ด๊ณ  https://github.com/moby/moby/issues/3156 ์—์„œ ๋ฆฌ๋””๋ ‰์…˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด ๋ˆ„๋ฝ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์™„์ „ํžˆ ์œ ํšจํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

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

@kbaegis ๋Š” https://github.com/moby/moby/issues/32507 ์—์„œ ์ œ์•ˆ๋œ ๊ธฐ๋Šฅ๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

ํ™•์‹ ํ•˜๋Š”. ๊ทธ๊ฒƒ์€ ๋ฐฑ๋กœ๊ทธ์—์„œ 3๋…„์ด ์•„๋‹Œ 1๋…„ ๋™์•ˆ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ P3์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

https://github.com/projectatomic/buildah ๊ฐ€ ์‹ค์ œ๋กœ ์ด ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์—์„œ ๋„์ปค ๋นŒ๋“œ๋ฅผ ํ›จ์”ฌ ๋Šฅ๊ฐ€ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ํŒŒ์ดํ”„๋ผ์ธ์„ ์ „ํ™˜ํ•  ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค.

@kbaegis ์ด ํ† ๋ก ์— ๋ฌด์—‡์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์˜ค์…จ์Šต๋‹ˆ๊นŒ? ๋‹ค๋ฅธ ์ œ์•ˆ๊ณผ _์ •ํ™•ํžˆ_ ์ผ์น˜ํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

๊ทธ๊ฒƒ์€ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ ๋ชจ๋“  ๊ฒƒ์ด ๋งˆ๋ฒ•์ฒ˜๋Ÿผ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ† ๋ก ์— ๋ฌด์—‡์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ?

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ์ด ๋„๊ตฌ ์„ธํŠธ์—์„œ ๊ณ„์† ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ € ํ˜ผ์ž๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ํ™•์‹ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ ํŒ€์— ๊ท€์ค‘ํ•œ ์ •๋ณด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

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

์ถ”๊ฐ€ํ•  ์œ ์Šค ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #32507์ด ๋” ์ž˜ ์–ด์šธ๋ฆฝ๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ƒ๋ฌผ ์ •๋ณดํ•™ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ์ถ• ์ค‘์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋„๊ตฌ๋Š” ์ปดํŒŒ์ผ/์„ค์น˜ ์ „์— ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( ์ œ ์ฝ”๋“œ ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฌป์ง€ ๋งˆ์‹ญ์‹œ์˜ค). ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฌด๊ฒŒ๋Š” ์ตœ์†Œ 30GB์ž…๋‹ˆ๋‹ค.

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

@draeth ๋Š” https://github.com/grammarly/rocker ๋ฅผ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ์ด๋ฏธ ๋ฉ‹์ง„ MOUNT ๋ช…๋ น์–ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

@draeth ๋Š” ๋˜ํ•œ Buildah๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ์ฒ˜๋Ÿผ ์„ค์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์šดํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Dockerfile์„ ์‚ฌ์šฉํ•œ ๋งˆ์šดํŠธ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/projectatomic/buildah

@fatherlinux ์™€ @lig ๋ชจ๋‘์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์—์„œ ๋ฒ—์–ด๋‚  ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์—ฌ์ „ํžˆ ์ด๊ฒƒ์„ ๋ณด๊ณ  #32507์ด ๊ตฌํ˜„๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค ;)

๋‚˜๋Š” '๋„์ปค ์‹คํ–‰' ์‹œ๊ฐ„์ด ์•„๋‹Œ '๋„์ปค ๋นŒ๋“œ' ์‹œ๊ฐ„์— ๋™์ผํ•œ ๊ธฐ๋Šฅ, ๋ณผ๋ฅจ์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ์ธํ„ฐ๋„ท ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์—ฌ๊ธฐ์— ์™”์Šต๋‹ˆ๋‹ค.

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

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

FROM ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ํ”Œ๋ž˜์…”๋กœ ์‚ฌ์šฉ
๋ณต์‚ฌ --from=๋นŒ๋” ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ
RUN cpu-build-and-flash --build-only
----------[ ์—ฌ๊ธฐ ์ž๋ฅด๊ธฐ ]----------
๋ถˆํ–‰ํžˆ๋„ cpu-build-and-flash ๋‹จ๊ณ„์—์„œ๋Š” ํŽŒ์›จ์–ด ์ด๋ฏธ์ง€๋ฅผ ์žฅ์น˜๋กœ ํ‘ธ์‹œํ•˜์ง€ ์•Š๋”๋ผ๋„ USB ๋ฒ„์Šค๋ฅผ ํ†ตํ•ด ๋Œ€์ƒ ์žฅ์น˜์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 'docker run' ๋ช…๋ น์—์„œ '-v /dev/usb/bus:/dev/usb/bus'๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋Œ€์‹  ๋นŒ๋“œ์— ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ˜„์žฌ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

๊ด€์‹ฌ ์žˆ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ: ์ตœ๊ทผ์— buildah๋กœ ์ „์ฒด ํŒŒ์ดํ”„๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์žฌ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋˜๋Š” ๋‘ ๊ฐœ์˜ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์ด ์žˆ๊ณ  oci/buildah ํŒŒ์ดํ”„๋ผ์ธ์ด ๋” ์ž‘์€ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ ๋‹ค๋ฅธ ๋งˆ์šดํŠธ๋กœ ๋งˆ์Šคํ‚นํ•˜์—ฌ ์ œ ๊ฒฝ์šฐ์—๋Š” /usr/portage ์ œ๊ฑฐ).

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/docker/docker-py/issues/1498

ํ•˜์ง€๋งŒ ๋นŒ๋“œ ์บ์‹œ๋ฅผ ์œ„ํ•œ RW ๋ณผ๋ฅจ์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

2018๋…„ 4์›” 28์ผ ํ† ์š”์ผ 17:29 ะšะพั€ะตะฝะฑะตั€ะณ ะœะฐั€ะบ, [email protected] ์ž‘์„ฑ:

๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค: docker/docker-py#1498
https://github.com/docker/docker-py/issues/1498

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

๋˜ํ•œ CI ํŒŒ์ดํ”„๋ผ์ธ์˜ ๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์ด ๊ธฐ๋Šฅ(์“ฐ๊ธฐ ๊ธฐ๋Šฅ ํฌํ•จ)์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ด์‹์„ฑ์˜ ์ •์‹ ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด -v ์Šค์œ„์น˜๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ํŒŒ์ผ์€ ํ•ด๋‹น ๋‹จ๊ณ„์˜ ํ…Œ์ŠคํŠธ ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ„๋‹จํžˆ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ด์ƒ์ ์ธ ๋ชฉํ‘œ๋Š” ํ•œ ๋ฒˆ ๋นŒ๋“œํ•˜๊ณ  ํ•œ ๋ฒˆ ํ…Œ์ŠคํŠธํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ์ค‘์ง€ํ•˜๋Š” ๊ฒฝ์šฐ(ํŠนํžˆ ์ด๋ฒคํŠธ)์—๋„ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์— ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋ฃจ ์ข…์ผ.

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

docker build -t x .
ID=$(docker create x)
docker cp $ID:/package.deb .
docker rm $ID

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

๋นŒ๋“œ ์บ์‹œ๋ฅผ ์œ„ํ•œ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณผ๋ฅจ์„ ์›ํ•˜๊ฑฐ๋‚˜ ํ•„์š”๋กœ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@ajbouh ์˜ˆ, ์•„๋งˆ๋„ https://github.com/moby/buildkit/issues ์—์„œ

https://github.com/moby/moby/issues/32507#issuecomment -391685221 ์ฐธ์กฐ

2018๋…„ 5์›” 23์ผ ์ˆ˜์š”์ผ 19:22 Akihiro Suda [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@ajbouh https://github.com/ajbouh ์˜ˆ, ์•„๋งˆ๋„
https://github.com/moby/buildkit/issues

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

๋นŒ๋“œ ์‹œ ๋ณผ๋ฅจ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ํ˜ธ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด์ œ ๋นŒ๋“œ ์ด๋ฏธ์ง€๊ฐ€ ๋ž˜ํผ๋ฅผ ํ†ตํ•ด ๊ฐ์ง€ํ•˜๋Š” yum ๋ฏธ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” --add-host yum-mirror:$MIRROR_IP ์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๋ชจ๋“  ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋ƒ . ๋‚ด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ•˜๋ฃจ์— ์—ฌ๋Ÿฌ ๋ฒˆ ์ข…์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์˜คํ”„๋ผ์ธ ์ƒํƒœ์ด๊ฑฐ๋‚˜ ์—ฐ๊ฒฐ ์ƒํƒœ๊ฐ€ ์ข‹์ง€ ์•Š์„ ๋•Œ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค(ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์—๋Š” ๋งŽ์€ dep ์—…๋ฐ์ดํŠธ ๋ฐ ์ •๋ฆฌ๊ฐ€ ํฌํ•จ๋จ).

๋‚˜๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ Docker์˜ ์ €ํ•ญ์ด ํ™”๋‚œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œํ‚ท์— ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์ด ์ตœ๊ทผ ๋ณ‘ํ•ฉ๋˜์—ˆ์œผ๋ฉฐ RUN --mount=<opts> <command> ์˜ต์…˜์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

@cpuguy83 ์ฐธ๊ณ  ๋งํฌ: https://github.com/moby/buildkit/pull/442

@glensc @cpuguy83 ์ด ๋ณ‘ํ•ฉ๋œ ๊ธฐ๋Šฅ์˜ ์ถœ์‹œ๋ฅผ ์–ธ์ œ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

+1

RUN --mount ์—๋Š” ๋ณผ๋ฅจ ์ง€์›์ด ์—†์œผ๋ฏ€๋กœ https://github.com/avsm/docker-ssh-agent-forward ์™€ ๊ฐ™์€ ๊ฒƒ์€ ๋นŒ๋“œ ์‹œ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@ํ”ผํ„ฐ ์—์ง€ https://github.com/moby/buildkit/pull/655

docker build --secret ๋Š” Docker 18.09์—์„œ ๋งˆ์นจ๋‚ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://medium.com/@tonistiigi/build -secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066

์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

--secret ๋Š” ์บ์‹ฑ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@AkihiroSuda RUN --mount ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์œผ๋กœ ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ, RUN --mount=type=cache (์บ์‹œ ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ) ๋ฐ --mount=type=secret ์™€ docker build --secret (๋น„๋ฐ€ ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ)๊ฐ€ ๊ฑฐ์˜ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

@AkihiroSuda ๊ทธ๋ž˜์„œ, ์›๋ž˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ž‘์—… ์˜ˆ์ œ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@AkihiroSuda ๊ธฐ์‚ฌ์—์„œ (https://medium.com/@tonistiigi/build-secrets-and-ssh-forwarding-in-docker-18-09-ae8161d066) ๋นŒ๋“œ ์ค‘ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. Secret ๋ฐ SSH

[๋น„๋ฐ€]

docker build --secret id=mysite.key,src=path/to/mysite.key .
RUN --mount=type=secret,id=mysite.key,required <command-to-run>

[SSH]

RUN --mount=type=ssh git clone [email protected]:myorg/myproject.git myproject

์ด ๊ธฐ์‚ฌ๋‚˜ ์ด๋ฒˆ ํ˜ธ์—์„œ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜์ง€ ์•Š์€ 2๊ฐœ์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€(๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๋Š”)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1) [์บ์‹œ] RUN --mount=type=cache
2) ์ผ๋ฐ˜์ ์ธ ๋ณผ๋ฅจ(์˜ˆ: SSL ์ธ์ฆ์„œ๋ฅผ ๋งˆ์šดํŠธํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ์ค‘์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์— ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๋Œ€์šฉ๋Ÿ‰ ๋ณผ๋ฅจ์˜ ๊ฒฝ์šฐ ๋“ฑ...)

์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ webpack ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— yarn ์ž‘์—… ๊ณต๊ฐ„์„ ๋งˆ์šดํŠธํ•˜๋ฉด

์ด ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค..

RUN --mount=type=cache,from=<some image>,source=<path in from image>,target=<target>

from=<some image> ๋ฅผ from=<some build stage> ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ธ์œ„์ ์ธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

# syntax=docker/dockerfile:1.0.0-experimental
FROM busybox as hello
RUN  echo hello > /hello.txt

FROM scratch
RUN --mount=type=cache,from=busybox,source=/bin,target=/bin --mount=type=cache,from=hello,source=/hello.txt,target=/tmp/hello.txt echo /tmp/hello.txt

๋‹ค์Œ์€ ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md

@AkihiroSuda ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜์ง€๋งŒ... ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

@AkihiroSuda @cpuguy83 : ๋ถˆํ–‰ํžˆ๋„ ํ˜„์žฌ ๊ตฌํ˜„(docker 18.09์˜ buildkit)์—๋Š” ๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ๊ฐœ์ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. https://github.com/moby/moby/issues/38303์—์„œ ๋‚ด ํ…Œ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด Jenkins ์•„ํ‹ฐํŒฉํŠธ์—๋„ ์‚ฌ์šฉ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Docker ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  ๋‚ด๋ถ€์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒฝ์šฐ junit pytest ์ถœ๋ ฅ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. RUN --mount=type=cache /user/.cache/pip pip install --experimental ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค(๋งŽ์€ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด).

buildah bud ( buildah build-using-dockerfile )์—๋Š” --volume / -v ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/containers/buildah/blob/master/docs/buildah-bud.md

buildah ๋Š” ๋„์ปค ์†Œ์ผ“ ์—†์ด ๋ฃจํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ์—์„œ ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋” ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—?

"--experimental"์„ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ํด๋ผ์ด์–ธํŠธ์—์„œ "DOCKER_BUILDKIT=1"๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

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

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ์— ํƒ‘์žฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ชจ๋‘ Dockerfile์— ์žˆ๋‹ค๋Š” ์ ์—์„œ ๋„คํŠธ์›Œํฌ ๋นŒ๋“œ๋ฅผ ๋” ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dockerfile์— RUN apt-get update ๊ฐ€ ์žˆ์œผ๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํƒ€์‚ฌ์—์„œ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๋ฏ€๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ์šดํŠธ์™€์˜ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ๋ชจ๋“  ์™ธ๋ถ€ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‹ค์ œ๋กœ Dockerfile์— ์ •์˜๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ์—์„œ ์ปจํ…์ŠคํŠธ๋ฅผ ๋งˆ์šดํŠธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‚˜์œ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค.

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

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

RUN apt-get update

docker build -t aptupdate-20190417

๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ์ด๋ฏธ์ง€์—์„œ:

FROM aptupdate-20190417
FROM somebaseimage

COPY --from=aptupdate-20190417 /var/apt /var/apt

๋‹ค๋ฅธ ์›๊ฒฉ ์ปจํ…์ŠคํŠธ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉด ์–ด๋Š ์ •๋„ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

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

๋‚ด ๋ง์€, RUN --mount=type=cache ๊ฐ€ ๋ฐ”๋กœ ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์—์„œ ๋งˆ์šดํŠธํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

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

-v on buildah ๋ฐ redhat's fork๋Š” ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๊ฑฐ๋ถ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค... ์œ ์šฉํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ํ˜ธ์ŠคํŠธ์—์„œ ํ˜ธ์ŠคํŠธ๋กœ ์‰ฝ๊ฒŒ ์ค‘๋‹จ๋˜์–ด docker build ์˜ ์„ค๊ณ„์— ์–ด๊ธ‹๋‚ฉ๋‹ˆ๋‹ค. .
ํ•œํŽธ RH๊ฐ€ ์ถ”๊ฐ€ํ•œ ์ด์œ (๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ์ž‘์—…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ์ด์œ )๋Š” RHEL ์ž๊ฒฉ ์ฆ๋ช…์„ ๋นŒ๋“œ ํ™˜๊ฒฝ์— ํƒ‘์žฌํ•  ์ˆ˜ ์žˆ๊ธฐ ์œ„ํ•ด์„œ์˜€์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๊ฒฉ๋ ฌํ•˜๊ฒŒ ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋„คํŠธ์›Œํฌ๊ฐ€ ๋‹ค์šด๋˜์—ˆ๊ฑฐ๋‚˜ ์†์ƒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋กœ์ปฌ ์บ์‹œ๋Š” ์ธํ„ฐ๋„ท์ด ๋‹ค์šด๋œ ๋™์•ˆ ์ „์ฒด ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.

docker-compose.yml์—์„œ volumes: ๋ฅผ ํ•œ ๋ฒˆ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋Œ€์‹  DOCKER_BUILDKIT=1 $๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์—…์ŠคํŠธ๋ฆผ์—์„œ ๊ด€๋ฆฌ๋˜๋Š” Dockerfiles์— RUN --mount=type=cache ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์™œ์š”?

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

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

docker-compose.yml์ด ์ž‘๋™ํ•˜๋„๋ก --volume ๋ฅผ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

๋‚ด docker-compose.yml์ด ์ž‘๋™ํ•˜๋„๋ก --volume์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.

"docker-compose"๋ฅผ ์ œ๋Œ€๋กœ ์ž‘๋™์‹œํ‚ค๋Š” ๊ฒƒ์€ ๊ฑฐ๊พธ๋กœ์ž…๋‹ˆ๋‹ค.
docker-compose ์†Œ๋น„์ž๊ฐ€ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ทธ ๋ฐ˜๋Œ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

docker-compose๋Š” ๋„์ปค ์†Œ์ผ“๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. docker-compose YAML์€ ์ปจํ…Œ์ด๋„ˆ ์˜ต์…˜์„ ์ €์žฅํ•˜๋Š” ํ†ตํ•ฉ๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(k8s pod defs(podman์ด ์–ด๋Š ์ •๋„ ์ง€์›)๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ). ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ DOCKER_BUILDKIT=1 ๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? docker-compose.yml์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ build_volumes: ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜๋ฃจ์— n๋ฒˆ ์‹คํ–‰๋˜๋Š” CI ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ docker-compose build (์˜ˆ: ansible ์‚ฌ์šฉ) ๋˜๋Š” packer (buildah ๋ฐ podman ๋Œ€์‹ )๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ๋ชฉํ‘œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž์›์„ ์ ˆ์•ฝํ•˜์‹ญ์‹œ์˜ค / ์ž์›์„ ๋‚ญ๋น„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค

    • OS ๋ฐ ์–ธ์–ด๋ณ„ ํŒจํ‚ค์ง€๋ฅผ ์ง€์†์ ์œผ๋กœ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

    • ๋‚ด ์กฐ์ง์˜ ๋Œ€์—ญํญ ๋ฆฌ์†Œ์Šค๋ฅผ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€์šฉ์„ฑ ๋ณด์žฅ

    • ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ํ•„์š”ํ•œ ๋งŒํผ ์ ์€ ์ˆ˜์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ์˜์กดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋นŒ๋“œ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ

    • ๋™์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋ถ„์‚ฐ ๋ถ„๋ฆฌ / ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ ์ œ๊ณต

    • ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค์™€ ๊ฐ™์€ ์›๊ฒฉ ๋ฆฌ์†Œ์Šค๋Š” ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • ์šฐ๋ฆฌ๋Š” ๋„คํŠธ์›Œํฌ ๊ฒฝ๋กœ๋ฅผ ์ œ์–ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค



      • DNSSEC ๋ฐ DNS over HTTPS๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



    • ์šฐ๋ฆฌ๋Š” ๊ธˆ์ง€๋˜๊ณ  ์ƒ๋‹นํžˆ ๋น„์œจ์ด ์ œํ•œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

    • ์„œ๋ช…๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์„œ๋ช…๋œ ์ฒดํฌ์„ฌ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



      • ํ‚ค๋กœ ์•ก์„ธ์Šคํ•˜๊ณ  ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์–ด๋”˜๊ฐ€์— ์œ„์ž„๋จ


      • ENVironment ๋ณ€์ˆ˜๋Š” ์ปจํ…Œ์ด๋„ˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


      • ๋นŒ๋“œ ์‹œ ๋ณผ๋ฅจ ๋งˆ์šดํŠธ๋Š” ๋นŒ๋“œ ์‹œ์—๋งŒ ํ•„์š”ํ•œ ํ‚ค๋ฅผ ๊ณต์œ ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค(์ด๋ฏธ์ง€ ์บ์‹œ๋กœ ๋ˆ„์ถœ๋˜์ง€ ์•Š์Œ).



  • ๋น ๋ฅธ ๋นŒ๋“œ ์œ ์ง€

    • ๋นˆ๋ฒˆํ•œ ์ž‘์—…์„ ์บ์‹œํ•˜๊ณ  ๋ฉ”๋ชจํ•ฉ๋‹ˆ๋‹ค.

    • ์บ์‹œ๋Š” ์‹คํŒจ ์ง€์ , ์ž ์žฌ์  ๋ณ€๋™์„ฑ ๋ฐ ์œ„ํ—˜ ์žฌํ˜„์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.



      • HTTP(S!) ํ”„๋ก์‹œ ์บ์‹œ


      • ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์บ์‹œ


      • ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ



    • ์™ธ๋ถ€ ์ข…์†์„ฑ์ด ์—†๋Š” ๋ฒ™์–ด๋ฆฌ, ํ”Œ๋Ÿฌ์‹œ ๊ฐ€๋Šฅํ•œ ์บ์‹œ ๊ตฌํ˜„



      • ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ ์บ์‹œ



์บ์‹œ ๋ณผ๋ฅจ์„ ํ”Œ๋Ÿฌ์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์บ์‹œ ๋ณผ๋ฅจ์„ ํ”Œ๋Ÿฌ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

0. ํ˜„์ƒ ์œ ์ง€

RUN pip install app && rm -rf /root/.cache
  • ์˜ค๋Š˜ ๊ฐ€๋Šฅ
  • O(n_builds): ๋Œ€์—ญํญ ์‚ฌ์šฉ๋Ÿ‰
  • ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ: ๋„คํŠธ์›Œํฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
  • ๋Š๋ฆฐ ์žฌ๊ตฌ์ถ•

๊ฐ€. ์‚ฌ๋ณธ

COPY . /app/src/app
COPY .cache/pip /app/.cache/pip
RUN pip install /app/src/app \
    && rm -rf /app/.cache/pip
  • ์˜ค๋Š˜ ๊ฐ€๋Šฅ
  • ~O(1) ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ
  • O(n): ๋ชจ๋“  ๋นŒ๋“œ์—์„œ(* ONBUILD )

    • ์บ์‹œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    • ํŒจํ‚ค์ง€ ๋ณด๊ด€ ์ทจ์†Œ

    • ์บ์‹œ ์‚ญ์ œ

  • ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™
  • ๋Š๋ฆฐ ์žฌ๊ตฌ์ถ•

B. ์—…์ŠคํŠธ๋ฆผ์—์„œ ๋ชจ๋“  Dockerfile์„ ๋ถ„๊ธฐํ•˜๊ณ  ์ˆ˜์ •ํ•˜์—ฌ RUN --mount=type=cache ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

# Fork by copying to modify every pip install line
RUN --mount=type=cache /app/.cache/pip pip install /app/src/pip
$ DOCKER_BUILDKIT=1 docker build . [...]
  • ์˜ค๋Š˜ ๊ฐ€๋Šฅ
  • ์ด๊ฒƒ์€ ์ด๋ฏธ ์žฌํ˜„ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์— ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” extra-Dockerfile, extra-docker-compose.yml ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ๋นŒ๋“œ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ: --mount=type=cache ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•(?)
  • ~O(1) ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ
  • ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™
  • ๋น ๋ฅธ ์žฌ๊ตฌ์ถ•

C. ๋นŒ๋“œ ์‹œ ๋งˆ์šดํŠธ๋˜๋Š” ๋ณผ๋ฅจ ์ง€์ •

C.1. ๋นŒ๋‹ค
$ buildah bud -v .cache/pip:/app/.cache.pip
  • ์˜ค๋Š˜ ๊ฐ€๋Šฅ
  • ๋˜ํ•œ ์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅ์„ฑ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ: ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ~O(1) ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ
  • ์˜คํ”„๋ผ์ธ์—์„œ ์ž‘๋™
  • ๋น ๋ฅธ ์žฌ๊ตฌ์ถ•
C.2. docker(์ด ๋ฌธ์ œ๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ)
C.2.1 ๋„์ปค CLI
$ docker build -v .cache/pip:/app/.cache.pip
  • ์˜ค๋Š˜์€ ๋ถˆ๊ฐ€๋Šฅ
  • ๋˜ํ•œ ์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅ์„ฑ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ: ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ~O(1) ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ
  • ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘๋™
  • ๋น ๋ฅธ ์žฌ๊ตฌ์ถ•
C.2.2 ๋„์ปค ์ž‘์„ฑ
services:
  app:
    image: imgname:latest
    build: .
    build_volumes:  # "build_volumes" ?
    - ./.cache/pip:/app/.cache/pip
$ docker-compose build
  • ์˜ค๋Š˜์€ ๋ถˆ๊ฐ€๋Šฅ
  • ๋˜ํ•œ ์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅ์„ฑ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฌธ์„œ: ์บ์‹œ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•
  • docker-compose ์Šคํ‚ค๋งˆ ๊ฐœ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • ~O(1) ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋Œ€์—ญํญ
  • ์˜คํ”„๋ผ์ธ์œผ๋กœ ์ž‘๋™
  • ๋น ๋ฅธ ์žฌ๊ตฌ์ถ•

...

  • ๋ณต์‚ฌ || REMOTE_FETCH || ์ฝ๋‹ค()

    • ๋‹ค์Œ ์ค‘ ์žฌํ˜„์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

:point_up: ์•Œ๋ฆผ์ž…๋‹ˆ๋‹ค. ์ฒดํฌ์„ฌ์„ ํ™•์ธํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. pip์™€ ๊ฐ™์€ ์ผ๋ถ€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋„ ์ด๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

@westurner ์ž์„ธํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹ค์Œ์ด ๊ท€ํ•˜์˜ ์‚ฌ๋ก€ B์™€ ๋น„์Šทํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์บ์‹œ๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ๊ณ  ๊ท€ํ•˜์˜ ์‚ฌ๋ก€ C2์™€ ๊ฐ™์ด ๋๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๋ฐ”, ์ œ ์ƒ๊ฐ์—).

_docker-compose.yml:_

services:
  my-cache:
    build: ./my-cache
    image: local/my-cache

  my-image:
    build: ./my-image

_my-cache/๋„์ปคํŒŒ์ผ:_

FROM python

RUN pip install app

_my-image/๋„์ปคํŒŒ์ผ:_

FROM my-repo/my-image

RUN --mount=target=/export,type=bind,from=local/my-cache

RUN pip install /app/src/app

(https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md#run---mounttypecache)

๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose build my-cache

RUN --mount=target=/export,type=bind,from=local/my-cache ๋ช…๋ น์€ ์ด๋ฏธ์ง€์— ๋ฐ”์ธ๋”ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ ค๋ฉด ์บ์‹œ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

RUN --mount... ์˜ ์บ์‹œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฒ„์ „๊ณผ ํ•จ๊ป˜ .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. image: local/my-cache:$MY_VERSION ๋ฐ from=local/my-cache:$MY_VERSION ์— ๋ฒ„์ „์„ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์ธ์ˆ˜๋กœ ํฌํ•จ๋จ).

my-cache ์„œ๋น„์Šค๋ฅผ ๊ธฐ๋ณธ ์„œ๋น„์Šค์™€ ๋™์ผํ•œ ํŒŒ์ผ์— ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ๋‹ค๋ฅธ docker-compose ํŒŒ์ผ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ DOCKER_BUILDKIT=1 ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ(B ์ผ€์ด์Šค์—์„œ์ฒ˜๋Ÿผ, ๊ทธ๋Ÿฌ๋‚˜ ํ–ฅํ›„ ๋ฒ„์ „์—์„œ๋Š” ์ด๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ์—ฌ์ „ํžˆ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ C2 ์ผ€์ด์Šค๋„ ๊ทธ๋ ‡์ง€ ์•Š์Œ).

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

๋ฉด์ฑ… ์กฐํ•ญ: ์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@Yajo pip์˜ ์ฒดํฌ์„ฌ ์ง€์›์€ ์›๋ž˜ 'peep'์—์„œ ๊ตฌํ˜„๋œ ๋‹ค์Œ pip๋กœ ๋ณ‘ํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. pip ์š”๊ตฌ ์‚ฌํ•ญ ํŒŒ์ผ ํ•ญ๋ชฉ์— URL ์กฐ๊ฐ์œผ๋กœ ์•Œ๋ ค์ง„ ์–‘ํ˜ธํ•œ ํ•ด์‹œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ฌํ•ด PyPA ํ”„๋กœ์ ํŠธ์˜ ๋ณด์•ˆ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ž๊ธˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PyPI์˜ TUF(์—…๋ฐ์ดํŠธ ํ”„๋ ˆ์ž„์›Œํฌ, Docker Notary์™€ ๋™์ผ) ์ง€์›์€ ์˜ฌํ•ด ํ›„๋ฐ˜์— ๊ณ„ํš๋ฉ๋‹ˆ๋‹ค.) ๋„์ปค ์ด๋ฏธ์ง€์—์„œ pip ๋ฐ PyPI(ํ‚ค ๋ฐ ์‹ ๋ขฐ ํฌํ•จ)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์˜ฌํ•ด ๋ง์— ์ฃผ์ œ๊ฐ€ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
(ํŽธ์ง‘; ์•ฝ๊ฐ„ OTํ•˜์ง€๋งŒ ๊ด€๋ จ) https://discuss.python.org/t/pypi-security-work-multifactor-auth-progress-help-needed/1042/

@lucasbasquerotto ๋„์™€์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋นŒ๋“œ ์‹œ --volume ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • docker build ์‰˜ ํ™˜๊ฒฝ์—์„œ DOCKER_BUILDKIT=1 ์ง€์ •
  • RUN --mount=type=cache ๋ฐ args๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์—…์ŠคํŠธ๋ฆผ Dockerfile RUN ๋ช…๋ น ์ˆ˜์ •
  • ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ€๋ณ€์„ฑ! ์•„๋‹ˆ๋ฉด ์บ์‹œ๊ฐ€ ์•„๋งˆ๋„ ์˜ค๋ž˜๋œ ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •๋˜์—ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๊นŒ?

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

๋ณต์‚ฌ || REMOTE_FETCH || ์ฝ๋‹ค()

  • ๋‹ค์Œ ์ค‘ ์žฌํ˜„์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@westurner

๋„์ปค ๋นŒ๋“œ ์…ธ ํ™˜๊ฒฝ์—์„œ DOCKER_BUILDKIT=1 ์ง€์ •

๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋ณด์•˜๋“ฏ์ด docker-compose ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ:

$ sudo curl -L --fail https://github.com/docker/compose/releases/download/1.24.0/run.sh -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

๊ทธ๋Ÿฐ ๋‹ค์Œ /usr/local/bin/docker-compose ์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ํ•ด๋‹น ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ:

exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES -w "$(pwd)" $IMAGE "$@"

์—๊ฒŒ

DOCKER_BUILDKIT=1
exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $VOLUMES -w "$(pwd)" --env DOCKER_BUILDKIT=$DOCKER_BUILDKIT $IMAGE "$@"

์ด๊ฒƒ์€ ๋งค์šฐ ์‰ฌ์šด ๋ณ€๊ฒฝ์ด๋ฉฐ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ํˆฌ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

_(์ปจํ…Œ์ด๋„ˆ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฉด ์œ„์˜ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ)_

RUN --cache ๋ฐ args๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์—…์ŠคํŠธ๋ฆผ Dockerfile RUN ๋ช…๋ น ์ˆ˜์ •

๋‚ด๊ฐ€ ๋…ธ์ถœ ํ•œ ๊ฒฝ์šฐ RUN --mount=type=bind... ์ด์ง€๋งŒ ์–ด์จŒ๋“  Dockerfile ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ๋‚˜์œ IMO์ž…๋‹ˆ๋‹ค. -v ์˜ต์…˜์€ ํ›จ์”ฌ ๋” ์ข‹๊ณ  ํˆฌ๋ช… ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ€๋ณ€์„ฑ! ์•„๋‹ˆ๋ฉด ์บ์‹œ๊ฐ€ ์•„๋งˆ๋„ ์˜ค๋ž˜๋œ ๋ฒ„์ „์œผ๋กœ ๊ณ ์ •๋˜์—ˆ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๊นŒ?

์ด๋ฏธ์ง€๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ์•„๋งˆ๋„ ์ปจํ…Œ์ด๋„ˆ(๋˜๋Š” ๋ณต์ œ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์žˆ๋Š” ์ด๋ฆ„์ด ๋ฌด์—‡์ด๋“ )๋ฅผ ์ƒ์„ฑํ•  ๊ฒƒ์ด๊ณ  ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ ์ˆ˜ํ–‰๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค(์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Œ). ๋”ฐ๋ผ์„œ ๋นŒ๋“œ์—์„œ my-repo/my-cache:my-version ๋ผ๋Š” ์บ์‹œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•˜๋ฉด ๋‹ค์Œ ๋นŒ๋“œ์—์„œ ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค(๋ถˆ๋ณ€์„ฑ). ์ตœ์‹  ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด my-repo/my-cache:my-new-version ์™€ ๊ฐ™์ด ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ƒˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ค‘ ์žฌํ˜„์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

COPY ๋ช…๋ น์ด ์ปดํ“จํ„ฐ ์บ์‹œ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ pip install (๋˜๋Š” apt-get ๋˜๋Š” ๊ธฐํƒ€)๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค๋ฅธ ์‹œ๊ฐ„์— ์บ์‹œ์˜ ๋‚ด์šฉ์ด ๋™์ผํ•  ๊ฒƒ์ธ๊ฐ€? ์–ด์ฉŒ๋ฉด ์ด๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๊ฑฑ์ •๊ฑฐ๋ฆฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ.

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

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

์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ๋„ go mod download ๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ์ผ์ข…์˜ Docker ๋„คํŠธ์›Œํ‚น ๋ฒ„๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ์šฐ๋ฆฌ ํฌ๊ธฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š”). ๊ทธ๋ž˜์„œ ๋งค๋ฒˆ ๋‚ด GOPATH/pkg/mod ๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๋‚ญ๋น„์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ€์„œ์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿคทโ€โ™€

--volume ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ถˆํ•„์š”ํ•œ ํŒŒ์ผ ๋ณต์‚ฌ๋ฅผ ์™„์ „ํžˆ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

@kevincantu RUN --mount=type=cache๊ฐ€ ์œ ์Šค์ผ€์ด์Šค๋ฅผ ์ปค๋ฒ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋„์ปค ๋นŒ๋“œ ๋‚ด์—์„œ ๋ชจ๋“ˆ์„ ํ•œ ๋ฒˆ ์ด์ƒ ์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋ฉฐ, ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ์•„์ง ๋ณธ ์ ์ด ์—†์Šต๋‹ˆ๋‹ค.

https://github.com/moby/moby/issues/14080#issuecomment -484314314 by @westurner ๋Š” ๊ฝค ์ข‹์€ ๊ฐœ์š”์ด์ง€๋งŒ buildkit ๋ฅผ ์ž‘๋™์‹œํ‚ค์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

$ sudo docker -v
Docker version 19.03.1, build 74b1e89

$ sudo DOCKER_BUILDKIT=1 docker build .
ร„+รœ Building 0.1s (2/2) FINISHED                                                                                                                
 => ร„internalรœ load build definition from Dockerfile                                                                                       0.0s
 => => transferring dockerfile: 407B                                                                                                       0.0s
 => ร„internalรœ load .dockerignore                                                                                                          0.0s
 => => transferring context: 2B                                                                                                            0.0s
failed to create LLB definition: Dockerfile parse error line 8: Unknown flag: mount

๋‚ด Dockerfile ๋Š” # syntax=docker/dockerfile:experimental ๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ docker-compose ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. $# Dockerfile #$์—์„œ ENV DOCKER_BUILDKIT 1 ๋ฅผ ์‹œ๋„ํ•˜๊ณ  $ ARG DOCKER_BUILDKIT docker-compose.yml ์—์„œ ์ „๋‹ฌํ–ˆ์ง€๋งŒ ๋ชจ๋‘ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

$ sudo docker-compose up --build
Building web
ERROR: Dockerfile parse error line 10: Unknown flag: mount

@lucasbasquerotto https://github.com/moby/moby/issues/14080#issuecomment -484639378์—์„œ ์ œ์•ˆํ•œ ๊ฒƒ์ด ์„ค์น˜๋œ ๋ฒ„์ „์˜ docker-compose๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜๋ฉ๋‹ˆ๊นŒ?

๋งˆ์ง€๋ง‰์œผ๋กœ, ์ด๊ฒƒ์ด ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ์šฉ๋˜๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ์ผ๋ถ€๋Š” ์ œ๊ฐ€ ์ด๊ฒƒ์„ ์ถ”๊ตฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ์ƒˆ ํ•ญ๋ชฉ๋งŒ ๋‹ค์šด๋กœ๋“œํ•ด์•ผ ํ•˜๋„๋ก ๋นŒ๋“œ ๊ฐ„์— ์œ ์ง€๋˜๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ ๋นŒ๋“œ ์‹œ๊ฐ„ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Dockerfile ์— RUN --mount=type=cache,target=/deps ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ข…์†์„ฑ ๊ด€๋ฆฌ์ž์˜ ์บ์‹œ๋ฅผ /deps ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

docker compose์˜ ๊ฒฝ์šฐ https://github.com/docker/compose/pull/6865 ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๋Š” ๊ณง ์ถœ์‹œ๋  compose ๋ฆด๋ฆฌ์Šค ํ›„๋ณด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค... binfmt๊ฐ€ ๊ตฌ์„ฑ๋œ x86_64 ํ˜ธ์ŠคํŠธ์—์„œ arm์šฉ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” /usr/bin ์— ์•„ํ‚คํ…์ฒ˜๋ณ„ ์ •์  qemu cpu ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ˜„์žฌ ์†”๋ฃจ์…˜์€ qemu-arm-static ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒŒ์ผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

FROM arm32v7/alpine:3.10
COPY qemu-arm-static /usr/bin/qemu-arm-static
RUN apk update && apk upgrade
RUN apk add alpine-sdk cmake
...

๋” ์‰ฌ์šด ์†”๋ฃจ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋‚ด ํŒŒ์ผ์„ ๋งˆ์šดํŠธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
docker build -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static -t test:arm32v7 .
์ด๊ฒƒ์€ ๋„์ปค ์‹คํ–‰์— ๋งค์šฐ ํšจ๊ณผ์ ์ด์ง€๋งŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ด ๊ธฐ๋Šฅ์ด ๊ทธ๋ฆฌ์›Œ์š”.

x86_64 ํ˜ธ์ŠคํŠธ์—์„œ arm ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋˜ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ตœ์†Œํ•œ ์ด ๊ฒฝ์šฐ ๋นŒ๋“œ ์‹œ ๋ณผ๋ฅจ์„ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@jneuhauser ์ตœ์‹  ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ •์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งค๋ฒˆ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ถ€ํŒ… ํ›„ ๊ถŒํ•œ ๋ชจ๋“œ์—์„œ linuxkit/binfmt ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ์ปค๋„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ •์ ์œผ๋กœ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งค๋ฒˆ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@alehaa ๊ทธ๋ž˜๋„ ์ปจํ…Œ์ด๋„ˆ ๋‚ด์— ์ •์  qemu ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

@cybe F -flag๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค( linuxkit/binfmt ํŒจํ‚ค์ง€๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…). ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋นŒ๋“œํ‚ท์„ ์‹œํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ž‘๋™ ์„ค์ •์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ถ„ํˆฌ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

cat /etc/docker/daemon.json

{
  "experimental": true
}

Dockerfile

# syntax=docker/dockerfile:experimental

FROM ruby:2.6.3

RUN --mount=type=cache,target=/bundle/vendor

sudo docker -v

Docker ๋ฒ„์ „ 19.03.1, ๋นŒ๋“œ 74b1e89

DOCKER_BUILDKIT=1 sudo docker build .

๋ฐ๋ชฌ์˜ ์˜ค๋ฅ˜ ์‘๋‹ต: Dockerfile ๊ตฌ๋ฌธ ๋ถ„์„ ์˜ค๋ฅ˜ ๋ผ์ธ 12: ์•Œ ์ˆ˜ ์—†๋Š” ํ”Œ๋ž˜๊ทธ: ๋งˆ์šดํŠธ

sudo ๋Š” sudo -E ๋กœ ์ง€์‹œํ•˜๊ฑฐ๋‚˜ sudo ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๋Š” ํ•œ env vars๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋ช‡ ๋งˆ๋”” ์ผ๊ณ  ์บ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ตœ์†Œํ•œ์˜ ์˜ˆ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„๋ž˜ ์ฐธ์กฐ

@cpuguy83 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

@thisismydesign ๋‹น์‹ ์˜ ํฅ๋ถ„์„ ๋ง์ณ์„œ ์ฃ„์†กํ•˜์ง€๋งŒ --cache node_modules ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์ด๋ฏธ์ง€์— ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ฑ์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

@glensc ์  ์žฅ, ๋‹น์‹  ๋ง์ด ๋งž์•„.. ๋นŒ๋“œ ํƒ€์ž„ ์บ์‹œ๋ฅผ ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜์š”?

์†”์งํžˆ, ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ด‘๊ณ ๋˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ณ ๋ ค๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์šฉ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ~/.npm์„ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://docs.npmjs.com/files/folders.html#cache

@thisismydesign

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์บ์‹œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Dockerfile์— ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ ์–ด๋”˜๊ฐ€์— ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ €์žฅ๋œ ๋ฆฌํ„ฐ๋Ÿด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ณ  COPY --from ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

FROM example/my_node_modules:latest AS node_modules

FROM nodejs AS build
COPY --from=/node_modules node_modules 
...

์ด๊ฒƒ์€ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

Ugh ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์—ฌ๊ธฐ์— ๊ด€์—ฌํ•˜๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค (๋˜ํ•œ ์•ˆ๋…• ์นœ๊ตฌ)

ํ•˜์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ณณ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—์„œ ์š”์•ฝ์„ ์–ป๊ธฐ ์œ„ํ•ด ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ „ํ™”๋‚˜ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

TLDR ์ฝ”๋”ฉํ•ด๋„ ๋ ๊นŒ์š”? ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

_TLDR_ ์ฝ”๋”ฉํ•ด๋„ ๋ ๊นŒ์š”? ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” Docker์— ๋Œ€ํ•ด ๋งํ•  ์ˆ˜ ์—†์ง€๋งŒ ๋‚ด ์ธ์ƒ์€ ๊ทธ๋“ค์ด ๋นŒ๋“œ์— ๋ณผ๋ฅจ ๋งˆ์šดํŒ…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์—ด๋ ค ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ซ์•„์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค)

buildtime -v์˜ ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์ด์ œ buildkit์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ ์–ด๋„ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋นŒ๋“œํ‚ท์„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์œผ๋ฉด ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋Š” hacky bash๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@unilynx ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ด ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ @unilynx ์— +1, buildkit์ด ์ €๋ฅผ ์œ„ํ•ด ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณผ๋ฅจ ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋งํฌ ๋ช‡ ๊ฐœ์™€ ์˜ˆ์ œ๋ฅผ ๋“œ๋กญํ•˜๋ฉด ์นœ๊ตฌ๋“ค์ด ๋น›๋‚˜๋Š” ๋‹ซ๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋„๋ก ์„ค๋“ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


(๋‚˜๋„ ๊ทธ๋“ค๋กœ๋ถ€ํ„ฐ ํ˜œํƒ์„ ๋ฐ›์„ ๊ฒƒ์ด๋‹ค)

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

๋”ฐ๋ผ์„œ build ์‹œ๊ฐ„์— ์‚ฌ์šฉ๋œ ์ž„์‹œ ๋ณผ๋ฅจ์—์„œ ๋ชจ๋“  ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ๋Œ์–ด์˜ฌ ์ˆ˜ ์žˆ์—ˆ๊ณ  ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ด bash๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ ์บ์‹œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฒ„๋ ˆ์ด ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์ž‘์€ ๋ธํƒ€๋งŒ ๊ฐ€์ ธ์˜ค๋„๋ก ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€์˜ ๋ณผ๋ฅจ์„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

(์บ์‹œ) ๋งˆ์šดํŠธ๋Š” "์‹คํ—˜์ " ํ”„๋ŸฐํŠธ ์—”๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(ํšŒ์˜์— ์ฐธ์„ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ๋” ํ™•์žฅ๋œ ์˜ˆ์ œ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Œ).

@thaJeztah LMK ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋„์šธ ์ˆ˜ ์žˆ๋‹ค๋ฉด :)

https://github.com/moby/moby/issues/14080#issuecomment -547662701

@thisismydesign ๋‹น์‹ ์˜ ํฅ๋ถ„์„ ๋ง์ณ์„œ ์ฃ„์†กํ•˜์ง€๋งŒ --cache node_modules ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ตœ์ข… ์ด๋ฏธ์ง€์— ํ‘œ์‹œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ฑ์ด ์†์ƒ๋ฉ๋‹ˆ๋‹ค.

@thaJeztah ์œ„์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๊ฐ€ ์บ์‹œ๋œ ์„ค์น˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋นŒ๋“œ ์‹œ๊ฐ„ ๋™์•ˆ ์˜ˆ๋ฅผ ๋“ค์–ด npm install ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@kris-nova ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ๋‹ค์‹œ bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ AFAIK๊ฐ€ ์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๊ฝค ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

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

npm์˜ ๊ฒฝ์šฐ: npm ์บ์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์บ์‹œ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ(https://docs.npmjs.com/cli-commands/cache.html, ์ผ๋ฐ˜์ ์œผ๋กœ ~/.npm ์ฐธ์กฐ)?

@ankon ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์€ ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” Bundler์™€ Ruby์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Bundler์˜ ๊ฒฝ์šฐ $BUNDLE_PATH ์—์„œ ๋นŒ๋“œ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๋นŒ๋“œ ์ค‘์— ๋„คํŠธ์›Œํฌ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์•„์ง ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์Œ).

bundle install
bundle package
bundle install --standalone --local

์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์บ์‹œ๋œ ๋ฒˆ๋“ค ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—์„œ gem์„ ./vendor/cache ์— ํŒจํ‚ค์ง•ํ•˜๊ณ  ./bundle ์— ๋‹ค์‹œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ gem์„ ์„ค์น˜ํ•˜๊ณ  ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์•„๋ผ์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๋” ๊ธธ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€์— ์ €์žฅํ•˜๋ ค๋ฉด ์บ์‹œ์—์„œ ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋” ๋งŽ์Šต๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€ ๋ณต์‚ฌ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค
  • ๋นŒ๋“œ ํ™˜๊ฒฝ๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ ์‚ฌ์ด์— ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(๋นŒ๋“œ ์ค‘์— ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒ ์ฃ ?) ๊ทธ๋ž˜์„œ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

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

@thisismydesign ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์€ ๋นŒ๋“œ์™€ ์‹คํ–‰ ์‚ฌ์ด์— ์บ์‹œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

buildkit์€ Linux ์ „์šฉ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. Windows์—์„œ ๋ฌด์—‡์„ ํ•˜๋‚˜์š”?

@thisismydesign ์™œ (์บ์‹œ) ๋งˆ์šดํŠธ๊ฐ€ ์ตœ์ข… ์ด๋ฏธ์ง€์— ๋‚จ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ๋‹ค์šด๋กœ๋“œ ์บ์‹œ ๋งˆ์šดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์ด๋ฏธ์ง€์— ~1GB๋ฅผ ๊ฐ–๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

buildkit์€ Linux ์ „์šฉ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. Windows์—์„œ ๋ฌด์—‡์„ ํ•˜๋‚˜์š”?

Windows์—์„œ ๋นŒ๋“œํ‚ท์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://docs.docker.com/develop/develop-images/build_enhancements/

์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค Windows UI์šฉ Docker๋ฅผ ํ†ตํ•ด ๋ฐ๋ชฌ ์„ค์ •์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งํฌ ์ƒ๋‹จ์˜ @nigelgbanks :

Only supported for building Linux containers

์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ Linux ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@thisismydesign ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์€ ๋นŒ๋“œ์™€ ์‹คํ–‰ ์‚ฌ์ด์— ์บ์‹œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋ฉด ์บ์‹ฑ๊ณผ ๊ด€๋ จ๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๋ฉด CI์—์„œ ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ํŒจํ‚ค์ง€ ์žฌ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฐ๊ฐ„ ๋นŒ๋“œ.

์‹คํ—˜์  ๋นŒ๋“œํ‚ท ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” CI ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

2020๋…„ 6์›” 13์ผ ํ† ์š”์ผ ์˜คํ›„ 2:08 Csaba Apagyi [email protected] ์ž‘์„ฑ:

@thisismydesign https://github.com/thisismydesign
๋นŒ๋“œ์™€ ์‹คํ–‰ ๊ฐ„์— ์บ์‹œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋ฉด ์บ์‹ฑ๊ณผ ๊ด€๋ จ๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

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

์‹คํ—˜์  ๋นŒ๋“œํ‚ท ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” CI ์„œ๋น„์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ช…์‹œ์ ์œผ๋กœ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ €๋Š” buildkit๊ณผ ํ•จ๊ป˜ gitlab-ci๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ '๋„์ปค ๋นŒ๋“œ'๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ž์‹ ์˜ ๋Ÿฌ๋„ˆ๋ฅผ gitlab์— ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š” ํ•œ ๋นŒ๋“œ ์ค‘์— ์บ์‹œ ์ ์ค‘์„ ๋ฐ›์„ ํ™•๋ฅ ์€ ์–ด์จŒ๋“  ๋‚ฎ์Šต๋‹ˆ๋‹ค.

๋‹ค๋‹จ๊ณ„ ๋นŒ๋“œ์˜ ๋ช…๋ช…๋œ ๋‹จ๊ณ„์—์„œ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ๋˜ ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

FROM golang:1.7.3 AS builder
COPY --from=builder

๊ทธ๋Ÿฌ๋‚˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ง€์—ญ์„ฑ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹CI ์ž‘์—… ์ผ์ •์— ๋Œ€ํ•ด ๋Œ€๋ถ€๋ถ„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

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

๋ฐฉ๊ธˆ buildkit ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ "์‹ค์ œ" ๋ณผ๋ฅจ์ด๋‚˜ ํ˜ธ์ŠคํŠธ์— ๋งˆ์šดํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋ฉด 100% ๋„์›€์ด ๋˜๋Š” ์›Œํฌํ”Œ๋กœ๊ฐ€ ์•ฝ๊ฐ„๋งŒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.

docker build ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „ glibc ๋ฒ„์ „์„ ๊ต์ฐจ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ ์ด glibc ์•„๋ž˜์— ๋นŒ๋“œํ•˜๊ณ  ๋งํฌํ•  ์ƒˆ ๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

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

ํ•˜์ง€๋งŒ ๋นŒ๋“œ ์‹คํŒจ ํ›„ ๋ถ„์„์„ ์œ„ํ•ด ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œํ‚ท์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ์š”์ฒญ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ™•์‹คํžˆ ์•Œ๋ ค์ง„ ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

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

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

์—ฌ๊ธฐ์—์„œ ์›ํ•˜๋Š”/๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์„ ๋” ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์—์„œ ์›ํ•˜๋Š”/๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์„ ๋” ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๊ฒฝ์šฐ์—๋Š” 1๊ฐœ์˜ ๋Œ๋กœ 2๋งˆ๋ฆฌ์˜ ์ƒˆ๋ฅผ ์ฃฝ์ด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

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

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

์—ฌ๊ธฐ์—์„œ ์›ํ•˜๋Š”/๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์„ ๋” ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

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

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

๋‹ค๋ฅธ ๋„๊ตฌ๊ฐ€ ๊ท€ํ•˜์˜ ํ•„์š”์— ๋” ์ž˜ ๋งž๋Š”๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ถ„์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

Docker์˜ v1 ๋นŒ๋”์™€ ๋นŒ๋“œํ‚ท ๋นŒ๋” ๋ชจ๋‘์˜ ๋‹จ์ ์€ ์ด ๋งฅ๋ฝ์—์„œ ๊ฝค ์ž˜ ์ดํ•ด๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋งˆ์šดํŠธ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
GitHub ์•Œ๋ฆผ @github.com์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.
"@mcattle
๋‚ด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์™€ ์‹ค์ œ๋กœ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋ฉฐ์น  ์ „ buildah๋กœ ์ด์‚ฌํ•œ ์ดํ›„๋กœ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ๊ณผ ๊ทธ ์ด์ƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋นŒ๋“œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๋Š” ๊ฒƒ์€ ์ข…๋ฃŒ๋œ ์ปจํ…Œ์ด๋„ˆ์™€ ํ˜ธ์ŠคํŠธ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์—†์—ˆ๋‹ค๋ฉด ์™„์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋‚˜๋Š” ํ–‰๋ณตํ•œ ์บ ํ•‘์นด์ž…๋‹ˆ๋‹ค. (ํŒŒํ‹ฐ๋ฅผ "๊ฒฝ์Ÿ์ž"์™€ ์ถฉ๋Œ์‹œ์ผœ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค. ๋ถˆ์พŒ๊ฐ์„ ๋Š๋ผ๋ฉด ์ด ๋Œ“๊ธ€์„ ์‚ญ์ œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์Šค๋ ˆ๋“œ์— ์ œ์‹œ๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ํšจ๊ณผ์ ์ธ ์†”๋ฃจ์…˜์ด์–ด์„œ ์–ธ๊ธ‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.) .โ€

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

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋งˆ์šดํŠธ๋ฅผ ๋ฐ”์ธ๋“œํ•  ํ•„์š” ์—†์ด

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

https://github.com/moby/moby/issues/14080#issuecomment -484314314 :

๋ณต์‚ฌ || REMOTE_FETCH || ์ฝ๋‹ค()

  • ๋‹ค์Œ ์ค‘ ์žฌํ˜„์„ฑ์ด ๊ฐ€์žฅ ๋†’์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋นŒ๋“œ ์‹œ๊ฐ„ -v (๋ฐ cgroupsv2)์—๋„ buildah๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@mcattle ๋‚˜๋Š” ๊ฐ™์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ผ๋ฒจ๋ง์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ์‹œ๊ฐ„ -v (๋ฐ cgroupsv2)์—๋„ buildah๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

"-v" ์ง€์› ๋•Œ๋ฌธ์— ๋นŒ๋“œ ์„œ๋ฒ„์—์„œ Ubuntu(๋„์ปค๋งŒ ์žˆ์Œ)์—์„œ Fedora(docker๋ฅผ podman/buildah๋กœ ๋Œ€์ฒด)๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ใ…‹ Podman์€ ๋ฃจํŠธ ์—†๋Š” ๋ชจ๋“œ๋„ ์ง€์›ํ•˜๋ฉฐ ์ง€๊ธˆ๊นŒ์ง€๋Š” Docker์™€ ์™„์ „ํžˆ ํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค(Docker ๋ฐ๋ชฌ์ฒ˜๋Ÿผ ๋ฃจํŠธ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ๋ฃจํŠธ ์—†๋Š” ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” --user/USER ์˜ํ–ฅ ๋ฐ ์ด๋ฏธ์ง€ ์บ์‹ฑ์˜ ์ฐจ์ด์  ์ œ์™ธ).

์ถ”์‹ . ๋ฃจํŠธ ์—†๋Š” ์ž‘์—…์—๋Š” cgroups v2๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ์ด์— ๋Œ€ํ•œ ์ง€์›์€ ๋„์ปค๋ณด๋‹ค ์ปจํ…Œ์ด๋„ˆ ๋Ÿฐํƒ€์ž„์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. RunC ๋Œ€์‹  CRun์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ(Fedora์ฒ˜๋Ÿผ) cgroup v2๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. RunC๋Š” Git์—์„œ ์ผ๋ถ€ v2 ๋ฐ rootless ์ง€์›์„ ์ œ๊ณตํ•˜์ง€๋งŒ ๋ช‡ ๋‹ฌ ์ „์— Fedora(31)์—์„œ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: Ubuntu์—๋Š” ์ตœ์‹  20.04 LTS๊ฐ€ ์•„๋‹ˆ๋ผ Groovy์— podman/buildah/etc๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Debian์—์„œ ๋ถˆ์•ˆ์ •ํ•˜๊ฒŒ ๊ฐ€์ ธ์˜จ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์•„์ง๊นŒ์ง€๋Š” LTS๋กœ ๋ฐฑํฌํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 2018๋…„๋ถ€ํ„ฐ Fedora์— ์žˆ์—ˆ๋˜ ๋ฐ˜๋ฉด, ์ œ ์ƒ๊ฐ์—๋Š” ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

@eero-t ์•„๋งˆ๋„ ๋‹น์‹ ์€ ๋‹น์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๊ณ  BuildKit์ด ํ˜„์žฌ ์ œ๊ณตํ•˜๋Š” ์˜ต์…˜์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒƒ์€ ์ด์— ๋Œ€ํ•ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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