Moby: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์š”์ฒญ: Dockerfile์—์„œ ํŠน์ • RUN ๋ช…๋ น์— ๋Œ€ํ•œ ์บ์‹ฑ์„ ์„ ํƒ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”

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

#1384์—์„œ ํ† ๋ก ์„ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

-no-cache๊ฐ€ ์ „์ฒด Dockerfile์— ๋Œ€ํ•œ ์บ์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŠน์ • RUN ๋ช…๋ น์— ๋Œ€ํ•ด ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์œ ์šฉํ• ๊นŒ์š”? ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์›๊ฒฉ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ... ๋“ฑ. ์บ์‹œ๋œ ๊ฒฝ์šฐ apt-get ์—…๋ฐ์ดํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์‹ค์ œ๋กœ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋กœ ์ธํ•ด ๊ฒฐ๊ณผ๊ฐ€ VM๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

arebuilder kinfeature

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

Dockerfile์˜ CACHE ON ๋ฐ CACHE OFF๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ฐ ๋ช…๋ น์€ ํ›„์† ๋ช…๋ น์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

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

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์บ์‹œํ•˜๋ ค๋Š” Dockerfile์˜ ์š”์ ์„ ์ทจํ•˜๊ณ  ์ด๋ฅผ ๋ฏธ๋ž˜์˜ Dockerfile์˜ FROM ์—์„œ ์‚ฌ์šฉํ•  ์ด๋ฏธ์ง€๋กœ ํƒœ๊ทธ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด -no-cache ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์‹œ ๋นŒ๋“œ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ ์—†์ด

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์บ์‹œ๋œ ๋ช…๋ น๊ณผ ์บ์‹œ๋˜์ง€ ์•Š์€ ๋ช…๋ น์„ ์‰ฝ๊ฒŒ ์ธํ„ฐ๋ฆฌ๋น™ํ•˜๋Š” ๊ฒƒ์ด ์ œํ•œ๋˜์ง€ ์•Š์„๊นŒ์š”?

์˜ˆ๋ฅผ ๋“ค์–ด ์„œ๋ฒ„์—์„œ ๋‚ด repo ๋ฐ wget ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๊ทธ ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด repo์—์„œ ์†Œํ”„ํŠธ์›จ์–ด ์„ค์น˜(์—…๋ฐ์ดํŠธ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Œ) - ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž‘์—… ์ˆ˜ํ–‰( ์„œ๋ฒ„) ๋“ฑ

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

์žˆ์œผ๋ฉด ์œ ์šฉํ•˜์ง€ ์•Š์„๊นŒ์š”?

Dockerfile์˜ CACHE ON ๋ฐ CACHE OFF๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๊ฐ ๋ช…๋ น์€ ํ›„์† ๋ช…๋ น์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

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

์ปจํ…Œ์ด๋„ˆ ID๋ฅผ "์ด ID๋ฅผ ์ง€๋‚˜ ์บ์‹œํ•˜์ง€ ์•Š์Œ" ๋ช…๋ น์œผ๋กœ '๋„์ปค ๋นŒ๋“œ'์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? '๋„์ปค ๋นŒ๋“œ'๊ฐ€ Dockerfile์˜ ๋ณ€๊ฒฝ๋œ ๋ผ์ธ๊นŒ์ง€ ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๊นŒ?

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

์•ž์œผ๋กœ ์ถœ์‹œ๋  API ํ™•์žฅ, ํŠนํžˆ ์ด๋ฆ„ ์ง€์ • ๋ฐ ๋‚ด์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๊ฒƒ์ด ๋” ์‰ฌ์›Œ์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‚˜๋Š” RUN a=a some-command ์™€ ๊ฐ™์€ ์–ด๋ฆฌ์„์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์บ์‹œ๋ฅผ ๊นจ๊ธฐ ์œ„ํ•ด RUN a=b some-command

์บ์‹œ๋ฅผ ๋” ์ž˜ ์ œ์–ดํ•˜๋ฉด CI์˜ docker๋ฅผ ํ›จ์”ฌ ๋” ํ–‰๋ณตํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@์ƒค์ดํฌ์Šค

--no-cache ๋ฅผ bool์—์„œ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋„์ปค์—์„œ ์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•˜๋ ค๋Š” ์œ„์น˜์— ๋Œ€ํ•ด ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

docker build --no-cache "apt-get install" .

IRC์—์„œ ์ด ์ •ํ™•ํ•œ ๊ธฐ๋Šฅ์— ๋™์˜ํ•˜๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ญ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ํ”Œ๋ž˜๊ทธ(์˜ˆ: "--uncache")๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” --cached๋ฅผ "--uncache .*"๋กœ ํ•ด์„๋˜๋Š” (๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”) bool ํ”Œ๋ž˜๊ทธ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2014๋…„ 2์›” 7์ผ ๊ธˆ์š”์ผ ์˜ค์ „ 9์‹œ 17๋ถ„, Michael Crosby ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

@์ƒค์ดํฌ์Šค
--no-cache ๋ฅผ bool์—์„œ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋„์ปค์—์„œ ์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•˜๋ ค๋Š” ์œ„์น˜์— ๋Œ€ํ•ด ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

docker build --no-cache "apt-get install" .

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

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‹œ์ž‘ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์˜ค๋Š˜ ์ด๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ž‘์—… ์„

  • noCache ํ•„๋“œ buildfile a๊ฐ€๋ฉ๋‹ˆ๋‹ค *regexp.Regexp .

    • nil ๊ฐ’์€ utilizeCache = true ์‚ฌ์šฉํ–ˆ๋˜ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • docker build --no-cache ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ•˜๋ฉด ์ด์ œ ์œ ํšจ์„ฑ ๊ฒ€์ฆ ์ •๊ทœ์‹ ๋ฌธ์ž์—ด์ด ์„œ๋ฒ„์— ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
  • --no-cache ํ˜ธ์ถœํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ .*
  • ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ •๊ทœ์‹์€ ์ƒˆ ๋ฉ”์„œ๋“œ buildfile.utilizeCache(cmd []string) bool ์—์„œ ์‚ฌ์šฉ๋˜์–ด ์บ์‹œ๋ฅผ ๋ฌด์‹œํ•˜๋Š” ๋ช…๋ น์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€: ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•œ flag/mflag ํŒจํ‚ค์ง€๋Š” ๊ฐ’์ด ์—†๋Š” ๋ฌธ์ž์—ด ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ --no-cache ๋ฐ --no-cache some-regex ๋ชจ๋‘ ์ง€์›ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ณ„๋„์˜ ์ƒˆ๋กœ์šด ๊นƒ๋ฐœ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. --no-cache ์˜ ๋™์ž‘๊ณผ ๊ตฌ๋ฌธ์€ ์ด๋ฏธ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์€ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” --break-cache ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์— ํˆฌํ‘œํ•˜๊ณ  --no-cache ๊ฐ€ ์˜ค๋Š˜๋‚  ํ•˜๋Š” ์ผ์„ ์ •ํ™•ํžˆ ํ•˜๋„๋ก ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์˜์กดํ•˜๊ณ  ์—ฌ์ „ํžˆ ์›ํ•˜๋Š” ๋งค์šฐ ์œ ์šฉํ•œ ํ–‰๋™์ด๊ธฐ ๋•Œ๋ฌธ์—).

์–ด์จŒ๋“ , IANTM(์ €๋Š” ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค)์ด๋ฏ€๋กœ ์ด๊ฒƒ์€ ์ œ ๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. :)

@tianon --no-cache ๋Š” ํ˜„์žฌ bool์ด๋ฏ€๋กœ ๋‹จ์ˆœํžˆ ๊ธฐ์กด ๋™์ž‘์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

  • docker build --no-cache - ์ด์ „๊ณผ ๋™์ผํ•œ ๋™์ž‘: ์บ์‹œ ๋ฌด์‹œ
  • docker build --no-cache someRegex - someRegex ์™€ ์ผ์น˜ํ•˜๋Š” RUN ๋˜๋Š” ADD ๋ช…๋ น์„ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๊ดœ์ฐฎ์•„์š”. ๋ฌธ์ œ๋Š” --no-cache ๊ฐ€ bool์ด๋ฏ€๋กœ ๊ธฐ์กด ๋™์ž‘์ด ์‹ค์ œ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • --no-cache=true - ์บ์‹œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”
  • --no-cache=false - ๋ช…์‹œ์ ์œผ๋กœ ์บ์‹œ ํ™œ์„ฑํ™”
  • --no-cache - --no-cache=true ์•ฝ์–ด

๋˜ํ•œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด "true" ๋ฐ "false" ํŠน์ˆ˜ ์ผ€์ด์Šค ์ •๊ทœ์‹ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค์–ด ์šฐ๋ฆฌ ์Šค์Šค๋กœ์—๊ฒŒ ํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ํ–ฅํ›„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž ์žฌ์ ์œผ๋กœ ๋†€๋ผ์šด ๋™์ž‘์ด ์ƒ์„ฑ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ("์ •๊ทœ์‹ 'true' ๋˜๋Š” 'false'์™€ ํ•จ๊ป˜ --no-cache ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค!")

@tianon ๋„ค ๋งž์Šต๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ์‚ดํŽด๋ณด๊ณ  ์‚ฌ๋žŒ๋“ค์€ =true/false๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ ์ƒˆ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก PR ์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค . ์œ ์ง€ ๊ด€๋ฆฌ์ž๋Š” ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ(

@wagerlabs ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ +1

@crosbymichael , @timruffles Dockerfile ์ž‘์„ฑ์ž๊ฐ€ ์บ์‹œํ•ด์•ผ ํ•  ๋นŒ๋“œ ๋‹จ๊ณ„์™€ ์บ์‹œํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๊ฒฐ์ •ํ•˜๋ฉด ๋”

์ผ๋ถ€ ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์ด๋ฏธ์ง€ ๊ณ„์ธต์„ ์žฌ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๊ธฐ์—… ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๊ธฐ์กด Dockerfile ํŠธ๋ฆฌ๋Š” ๋ช‡ ๋…„ ์ „์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@wagerlabs ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ +1

@wagerlabs ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ +1์ด์ง€๋งŒ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์— ๋ฒ„์ŠคํŠธ๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ํ›จ์”ฌ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

CACHE [interval | OFF]
RUN apt-get update
CACHE ON

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

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

FROM ubuntu:13.10
ADD ./files/cachebusters/per-day /root/cachebuster
...
ADD ./files/cachebusters/per-build /root/cachebuster
RUN git clone [email protected]:cressie176/my-project.git /root/my-project

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

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ํ˜„์žฌ ๊ณ„ํš์€ ๋ฐ˜์˜ฌ๋ฆผ๋œ ์ˆซ์ž๊ฐ€ ์ ํ”„ํ•  ๋•Œ ์บ์‹œ ์š”์†Œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋งˆ์ง€๋ง‰ 15๋ถ„์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋œ ์ƒ์„ฑ๋œ ํ–‰๊ณผ ํ•จ๊ป˜ RUN echo 2014-04-17-00:15:00 ์™€ ๊ฐ™์€ ๋ช…๋ น์„ ๋™์ ์œผ๋กœ ์ฃผ์ž…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 15๋ถ„๋งˆ๋‹ค. ๋งค๋ฒˆ dockerfile์„ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์ง€๋งŒ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค.

์ €๋„ ์ด ๊ธฐ๋Šฅ์— ํˆฌํ‘œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ๋งŒ ์—…๋ฐ์ดํŠธ๋˜๋Š” git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ์ผ๋ถ€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์บ์‹œ๋Š” ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.
:+1:

@hiroprotagonist ๊ฐ–๋Š” git pull ๋‹น์‹ ์˜ ENTRYPOINT ํž˜์˜ ๋„์›€์„?

@amarnus ๋‚˜๋Š” ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์•„์ด๋””์–ด @tfoote์—์ด ์œ ์‚ฌํ•œ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” jenkins ์ž‘์—…์—์„œ ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ docker build ๋ช…๋ น์„ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ํ…œํ”Œ๋ฆฟ์—์„œ Dockerfile์„ ์ƒ์„ฑํ•˜๊ณ  git ๋ช…๋ น ์œ„์— 'RUN echo currentsMillies' ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. sed์™€ ํŒŒ์ดํ”„ ๋•๋ถ„์— ์ด๊ฒƒ์€ ๋ช‡ ๋ถ„ ๋งŒ์— ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ์—ฌ์ „ํžˆ Dockerfile ์ž์ฒด์˜ ์ผ๋ถ€๋กœ ์ด ๊ธฐ๋Šฅ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@wagerlabs ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋‚ด +1 ์ถ”๊ฐ€. CI์—๋„ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น๋ถ„๊ฐ„์€ ๋‹จ์ˆœํžˆ ๋™์  ์—์ฝ” RUN ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด ๊ธฐ๋Šฅ์ด ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

์บ์‹œ ON/OFF์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋„ CI ์ž๋™ํ™”์ž…๋‹ˆ๋‹ค.

+1, ํŠนํžˆ @cressie176 ์˜ ์˜ˆ์—์„œ์™€ ๊ฐ™์ด ์‹คํ–‰ ๋ช…๋ น ์บ์‹œ ๊ฐ„๊ฒฉ์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ

"์˜ˆ: ์ €์žฅ์†Œ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์›๊ฒฉ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ"

+1

๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด๋œ๋‹ค๋ฉด ๋‹ค์Œ์€ Jenkins ๋นŒ๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

echo "Using build $BUILD_NUMBER for docker cachebusting"
sed -i s/cachebust_[0-9]*/cachebust_"$BUILD_NUMBER"/g Dockerfile

์บ์‹œ ON/OFF์˜ ๊ฒฝ์šฐ +1

CACHE ON/OFF ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์œผ๋กœ "ALWAYS"์™€ ๊ฐ™์€ ์ถ”๊ฐ€ ํ‚ค์›Œ๋“œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ํ‚ค์›Œ๋“œ๋Š” ๊ธฐ์กด ๋ช…๋ น(์˜ˆ: "ALWAYS RUN" ๋˜๋Š” "ALWAYS ADD")๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜๋„์ ์œผ๋กœ "ALWAYS" ํ‚ค์›Œ๋“œ๋Š” ์ธ์ ‘ ๋ช…๋ น์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์บ์‹œ๋กœ ์ด๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ๊ณผ๋ฅผ CACHE(์•”์‹œ์ ์œผ๋กœ ๋™์ผํ•œ ํ–‰์ด ์‹คํ–‰๋œ ๋‹ค๋ฅธ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์บ์‹œ)์™€ ๋น„๊ตํ•˜์—ฌ ALWAYS ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์บ์‹œ๋œ ์ด๋ฏธ์ง€์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ทผ๋ณธ์ ์ธ ํ•„์š”์„ฑ์€ "๋ฉฑ๋“ฑ์„ฑ์ด ์•„๋‹Œ ๋ช…๋ น" ์„ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ALWAYS ๋ช…๋ น์€ ์ด๋ฅผ ๋งค์šฐ ๋ช…์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์ธ์ƒ์€ CACHE ON/OFF ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋˜‘๊ฐ™์ด ์ž˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ”๋“œ ๋ธ”๋ก์„ ๋งŽ์ด ์ „ํ™˜ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ์ค„์„ ์ฐจ๋‹จํ•˜๋„๋ก ๊ถŒ์žฅํ•  ์ˆ˜ ์žˆ์Œ).

๋‚˜๋Š” ๋˜ํ•œ ALWAYS ๋˜๋Š” CACHE 1 WEEK ADD์™€ ๊ฐ™์€ ๋ช…๋ น ์ ‘๋‘์‚ฌ์— ๋” ๊ฐ€๊น์Šต๋‹ˆ๋‹ค ...

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

From ubuntu:14.04

RUN apt-get -yqq update
RUN apt-get -yqq install git
RUN git clone https://github.com/coreos/fleet
ADD http://www.random.org/strings/?num=10&len=8&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new uuid
RUN cd fleet && git pull

๋ถ„๋ช…ํžˆ ์ž์‹ ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ๋„คํŠธ์›Œํฌ ์ž„์˜ ์ƒ์„ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ทธ๊ฒƒ์€ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@wagerlabs ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ +1

๊ธฐ๋Šฅ์— ๋˜ ๋‹ค๋ฅธ +1. ํ•œํŽธ @cruisibesarescondev ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ ๋” +1ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด @cruisibesarecondev ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ +1์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด @cruisibesarescondev ๋ฅผ

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

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด ํŒŒ์ด์ฌ์—์„œ ๋นˆ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜์—ฌ Dockerfile์„ ์ƒ์„ฑํ•˜๊ณ  ๋‘ ๋ฒˆ์˜ ์—ฐ์† ์‹คํ–‰์—์„œ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ ๋งค XXX์ดˆ๋งˆ๋‹ค ์žฌํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฐ•์ œ ์‹คํ–‰ํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ  ์œ„์™€ ๊ฐ™์ด ์ž‘๋™ํ•˜๋Š” ๋‹ค์Œ ์Šค๋‹ˆํŽซ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ƒ๋‹จ:

@{
import time
def cache_buster(seconds):
    ts = time.time()
    return ts - ts % seconds
}@

์žฌ์‹คํ–‰์„ ๊ฐ•์ œํ•˜๊ณ  ์‹ถ์€ ๊ณณ:

RUN echo @(cache_buster(60))

Dockerfile์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

RUN echo 1407705360.0

๋ณด์‹œ๋‹ค์‹œํ”ผ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด 60์œผ๋กœ ๋ฐ˜์˜ฌ๋ฆผ๋˜๋ฏ€๋กœ 60์ดˆ๊ฐ€ ์ง€๋‚˜๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋‹ค์Œ ์‹คํ–‰์€ ๋‹ค์Œ ๋ช…๋ น์„ ๋ชจ๋‘ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ALWAYS ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. CACHE ON/CACHE OFF์˜ ๊ฒฝ์šฐ +.5.

ALWAYS ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค.

์˜ˆ, ALWAYS ๊ตฌ๋ฌธ์€ ๋งค์šฐ ์ง๊ด€์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ €๋Š” CACHE ON/OFF๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ผ์ธ์€ "์ž์ฒด ํฌํ•จ"๋˜์–ด์•ผ ํ•˜๊ณ  Dockerfiles์— ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋งŽ์€ "๋ฌธ์ œ"๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์˜ˆ: ๋ณ‘ํ•ฉํ•  ๋•Œ "์ด ๋ผ์ธ์ด ์บ์‹œ๋กœ ๋ฎ์—ฌ ์žˆ์Šต๋‹ˆ๊นŒ?"๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€). .).

@kuon USER ๋ฐ WORKDIR ์™€ ๊ฐ™์ด ํ›„์† ๋ช…๋ น์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ช…๋ น์ด ์ด๋ฏธ ๋งŽ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ™์€ ์ด์œ ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ RUN cd ... && ๋˜๋Š” RUN su -c ...&& ํ•ฉ๋‹ˆ๋‹ค.

๋ธ”๋ก ํ‘œ๊ธฐ๋ฒ•์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

CACHE OFF {
    RUN ...
}

์ด๊ฒƒ์€ ๋” ๋ช…์‹œ์ ์ด๋ฉฐ ์‹ค์ˆ˜๋กœ CACHE OFF ํ–‰์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค(๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ).

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

์ด ๋ฌธ์ œ๋Š” ์ƒˆ๋กœ์šด Dockerfile ํ˜•์‹์˜ ๊ธฐํšŒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ๋งํ•œ ๋‚ด์šฉ์œผ๋กœ ๋Œ์•„๊ฐ€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” @shykes ๊ฐ€ ๋‹ค๋ฅธ ๋ฌธ์ œ https://github.com/docker/docker/pull/2266 ์—์„œ ๋งํ•œ ๊ฒƒ์„ ์ฝ์—ˆ๊ณ  ๊ทธ์—๊ฒŒ๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค(Dockerfile์€ ์–ธ์–ด์™€ ๊ฐ™์€ ์ •๋ง ๊ฐ„๋‹จํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•จ).

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

NOIMAGE ALWAYS RUN USER:jon  apt-get update

ํ•ญ์ƒ ๋ช…๋ น(์บ์‹œ ์—†์Œ)์„ ์‹คํ–‰ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž jon์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

ํŽธ์˜๋ฅผ ์œ„ํ•ด RUN! ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์— ๋Œ€ํ•œ ์ƒํƒœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์บ์‹œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. awscli ๋ช…๋ น(amazon AWS ํˆดํ‚ท์—์„œ)์„ ํ†ตํ•ด ์›๊ฒฉ amazon s3 ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๊ณ  ADD ๋ช…๋ น์„ ํ†ตํ•ด ์บ์‹œ๋ฅผ ๋ฒ„์ŠคํŠธํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ Dockerfile์„ ํŽธ์ง‘ํ•˜์ง€ ์•Š๊ณ ๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๊ฑฐ). RUN์„ ์‚ฌ์šฉํ•  ๋•Œ ์บ์‹œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ฒ„์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ์–ด๊ถŒ์„ ๋Œ๋ ค์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋‚˜์—๊ฒŒ ์ œ์•ˆ์ด ์žˆ์œผ๋ฉด ๊ธฐ๊บผ์ด ๋“ฃ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์—ฌ์ „ํžˆ ALWAYS ๊ตฌ๋ฌธ์ด ์ด์ƒ์ ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ BREAK ๋ฌธ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

@cpuguy83 ์€ ๋‚ด ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ ์บ์‹œํ•˜์ง€ ์•Š๊ณ  ๋‚˜๋จธ์ง€ ๋ช…๋ น์€ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. docker๊ฐ€ ์ฆ๋ถ„ diff๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BREAK ๋ฅผ ์ง€์›ํ•˜๋ฉด @CheRuisiBesares์˜ ์ œ์•ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ๊ธฐ๋Šฅ ํŒจ๋ฆฌํ‹ฐ๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

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

@orrery ํ•ด๋‹น ๋นŒ๋“œ ๋‹จ๊ณ„ _์ „์—_ COPY ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์บ์‹œ๋ฅผ " ํŒŒ๊ดด "ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณต์‚ฌ๋œ ํŒŒ์ผ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ ๊ทธ ์ดํ›„์˜ ๋ชจ๋“  ๋‹จ๊ณ„๋Š” ๋” ์ด์ƒ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค( ์ด ์„น์…˜ ์ฐธ์กฐ ). ๋”๋Ÿฌ์šด ์†์ž„์ˆ˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ALWAYS (๋˜๋Š” EVERY # DAYS ์™€ ๊ฐ™์€ ์œ ์‚ฌํ•œ ๊ฐœ๋…)์˜ ํ•ต์‹ฌ์€ ์ฒจ๋ถ€๋œ ๋ช…๋ น ์ดํ›„์˜ ์บ์‹œ ๋น„๊ต์ž…๋‹ˆ๋‹ค. ๋‚˜ ์ž์‹ ์„ ์œ„ํ•ด(๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค๋„ ๊ฐ€์ •), ๋ชฉํ‘œ๋Š” ์บ์‹œ ์ž์ฒด๋ฅผ ํŒŒ๊ดดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์€ ALWAYS ์˜ ์ถœ๋ ฅ์ด ์บ์‹œ๋œ ๋ฒ„์ „๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ›„์† ๋ช…๋ น์— ๋Œ€ํ•œ ์บ์‹œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— @hellais ์˜ ์ฃผ์„์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‰ฝ๊ฒŒ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ).

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

@tfoote ์™€ ์ •ํ™•ํžˆ ๊ฐ™์€ ์ƒํ™ฉ์—

EVERY ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ALWAYS ๊ตฌ๋ฌธ๋„ ์ž‘์—…์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

@claytondaley ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช…๋ น์— ๋Œ€ํ•œ ์บ์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Docker์—๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ณด์ด์ง€ ์•Š๋Š” ์ˆจ๊ฒจ์ง„ ์ƒํƒœ๊ฐ€ ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์›๊ฒฉ ์„œ๋ฒ„์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ์ˆจ๊ฒจ์ง„ ์ƒํƒœ๋ฅผ ๋งŒ๋“ค๊ณ ( ALWAYS ์‹คํ–‰ํ•ด์•ผ ํ•จ)
  • ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Œ

๋‹ค์Œ ๋ช…๋ น์— ์ˆจ๊ฒจ์ง„ ์ƒํƒœ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(์‚ฌ์†Œํ•˜๊ฒŒ๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ mv ๋ช…๋ น) ์บ์‹œ๋Š” 100% ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ, ๋™์ผํ•œ ๋ช…๋ น, ์ˆจ๊ฒจ์ง„ ์ •๋ณด์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ช…๋ น(๋˜๋Š” ํ›„์† ๋ช…๋ น)์— ์ˆจ๊ฒจ์ง„ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ฒฐ๊ณผ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์บ์‹œ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์บ์‹œ๋ฅผ ์žฌ๊ฐœํ•˜๊ณ  ALWAYS ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@claytondaley ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ ๋‚˜์—๊ฒŒ ๋งค์šฐ ์šฐ์•„ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ตฌํ˜„๋œ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :+1: :๋ฌธ์–ด:

ALWAYS ๋ฐ EVERY X ์ œ์•ˆ๋œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค. CACHE ON/OFF๋Š” ์•ฝ๊ฐ„ ์–ด์ƒ‰ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์บ์‹œ๋ฅผ ์žฌ๊ฐœํ•˜์ž๋Š” @claytondaley ์˜ ์ œ์•ˆ์„ ์ •๋ง ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

ALWAYS ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ +1์ž…๋‹ˆ๋‹ค. ํŠนํžˆ git repo์˜ ํ’€ ์ฝ”๋“œ์— ๋Œ€ํ•ด.

+1 ์ด๋Ÿฌํ•œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด.

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

์ œ์•ˆ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ๋‚˜์˜ ์ดํ•ด๋Š” Dockerfile ๋ช…๋ น์˜ ์ผ๋ถ€๋กœ "ํ•ญ์ƒ"์„ ์ง€์ •ํ•˜์—ฌ ํ•ญ์ƒ ๋‹จ๊ณ„๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "RUN ALWAYS git clone https://example.com/myrepo.git "์€ ํ•ญ์ƒ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ํ•ญ์ƒ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณต์ œ). ๊ทธ๋Ÿฐ ๋‹ค์Œ @claytondaley ๊ฐ€ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์€ ์ด ๋ช…๋ น์ด ๋‹ค์‹œ ์‹คํ–‰๋œ ํ›„ Docker๊ฐ€ ์บ์‹œ์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒดํฌ์„ฌ์ด ๋™์ผํ•˜๋ฉด(์ฆ‰, ๋ณต์ œ๋œ ์ €์žฅ์†Œ์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†์–ด ์ตœ์‹  ๊ณ„์ธต์ด ์บ์‹œ์˜ ๋™์ผํ•œ ๊ณ„์ธต๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ) ์บ์‹œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋˜๋ฉด ์ดํ›„์˜ ๋ชจ๋“  ๋‹จ๊ณ„์—์„œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ œ์•ˆ์„ ํ†ตํ•ด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•  ์‹œ๊ธฐ๋ฅผ ๋” ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์บ์‹œ์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

@curtiszimmerman... ์ •ํ™•ํžˆ

@duglin... ์ˆ˜ํ•™์  ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ด๋””์–ด๊ฐ€ ๋” ๋ช…ํ™•ํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ (์ด ๋งฅ๋ฝ์—์„œ)์˜ ๊ฒฐ๊ณผ์— ๋ถˆ๊ณผ ๋ฉ”๋ชจ๋ฆฌ์ž…๋‹ˆ๋‹ค action B ์— ์ ์šฉ ํ•  ๋•Œ state A ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋‹ค์‹œ ์ฒ˜๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ จ์˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • 6
  • ํ•ญ์ƒ ์‹คํ–‰ * x ์˜ ๊ฐ€์น˜ x ์ž์‹์˜์˜ repo์—์„œ ๋‹ค์šด๋กœ๋“œ (๋”ฐ๋ผ์„œ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)๋ฅผ
  • + 12

๋ช…๋ น์„ ์ฒ˜์Œ ์‹คํ–‰ํ•  ๋•Œ x ๋Š” 8์ด๋ฏ€๋กœ ๋‹ค์Œ ์‹œํ€€์Šค๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

  • 6
  • 48 ( * x ๊ฐ€ 6 ์ ์šฉ๋œ ๊ฒฐ๊ณผ)
  • 60 ( + 12 ๊ฐ€ 48 ์ ์šฉ๋œ ๊ฒฐ๊ณผ)

๋‚ด ์‹œ์Šคํ…œ์ด 48 ๋‹ค์‹œ ๋„๋‹ฌํ•˜๋ฉด(์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด)... ๊ทธ๋ฆฌ๊ณ  + 12 ๋ช…๋ น์ด ์ฃผ์–ด์ง€๋ฉด ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ์บ์‹œ๋Š” ์ด ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๊ฐ€ 60 ์ž„์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋ ค์šด ๋ถ€๋ถ„์€ ๋™์ผํ•œ ์ƒํƒœ( 48 )์— ๋‹ค์‹œ ์žˆ์„ ๋•Œ๋ฅผ ์•Œ์•„๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ด๋ก ์ ์œผ๋กœ ๋ชจ๋“  ๋ช…๋ น ํ›„ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฅธ ๋ชจ๋“  ์บ์‹œ๋œ ์ด๋ฏธ์ง€์™€ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์ผ์น˜ ํ•ญ๋ชฉ์„ ์ฐพ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋‚ฎ์Šต๋‹ˆ๋‹ค.
  • ๋‚ด ์ œ์•ˆ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒํƒœ(์˜ˆ: 6 )์— ์žˆ๊ณ  ๋ช…๋ น(์˜ˆ: * x )์„ ์น  ๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋™์ผํ•œ ์ƒํƒœ์— ์žˆ์—ˆ๋˜ ๋งˆ์ง€๋ง‰ ์‹œ๊ฐ„(๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฒˆ)์˜ ์บ์‹œ์™€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค ์ดํ›„์˜ ์‹œ์Šคํ…œ ์ƒํƒœ๊ฐ€ ๋™์ผํ•˜๋ฉด(์˜ˆ: ์—ฌ์ „ํžˆ 48 ) ์บ์‹œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์ด ์—ฌ์ „ํžˆ + 12 ์ด๋ฉด ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹  ์บ์‹œ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

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

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

@claytondaley @duglin "์บ์‹œ ์—†์Œ" ์ž‘์—…์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„ ์บ์‹œ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ์„ค๋ช… ํ–ˆ๋“ฏ์ด ์–ด๋ ค์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ผญ ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ์žˆ์œผ๋ฉด ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

RUN install_stuff_take_forever
RUN always_do_it   #will not run every time
RUN more_stuff

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

RUN install_stuff_take_forever
NOCACHE
RUN always_do_it
RUN more_stuff

@pikeas ๋‚˜๋Š” NOCACHE ๋ช…๋ น์„ ์™„์ „ํžˆ

๋‚˜๋Š” ๋‹ค์Œ์„ ์˜๋ฏธํ•˜๋Š” Docker ์˜

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

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

๋ช…๋ น์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์‹คํ–‰๋œ ์‹œ๊ฐ„๊ณผ ์ƒˆ ๋ ˆ์ด์–ด๋งŒ ๋น„๊ตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(์™„์ „ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ).

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

๋ฌผ๋ก  ๋ชจ๋“  ์ด์ „ ๋ฒ„์ „์— ๋Œ€ํ•ด ํ•ด์‹œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค... ์ „์ฒด ํŒŒ์ผ ๊ฒ€์‚ฌ๊ฐ€ ๋’ค๋”ฐ๋ฅด๋Š”... ์˜ค๋ฒ„ํ—ค๋“œ ์—†์ด ์™„์ „ํ•œ ์ง€์›์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/docker/docker/pull/9934 ์˜ ํ•˜๋‹จ์„ ๋ณด๋ฉด Dockerfile ๋ช…๋ น์— ๋Œ€ํ•œ ์ง€์› ์˜ต์…˜์— ๋Œ€ํ•œ ๋…ผ์˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์— ๋Œ€ํ•ด "์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ"์„ ์˜๋ฏธํ•˜๋Š” --no-cache ์˜ต์…˜์ด ๋ชจ๋‘(๋˜๋Š” ๋‹จ์ง€ RUN)์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์˜ˆ:
RUN --no-cache apt-get install -y my-favorite-tool
๊ทธ๋Ÿฌ๋ฉด ๋‚˜๋จธ์ง€ ๋ช…๋ น์— ๋Œ€ํ•ด์„œ๋„ ์บ์‹œ๊ฐ€ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(์ œ ์ƒ๊ฐ์—๋Š”).
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๊นŒ?

์˜๋ฏธ์ ์œผ๋กœ ๋™์ผํ•œ "RUN ALWAYS"์™€ "RUN --no-cache" ์ค‘์—์„œ ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๋” ์ž์—ฐ์Šค๋Ÿฌ์šด "RUN ALWAYS" ๊ตฌ๋ฌธ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ PR์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. --option์ด ๊ฐ€๋…์„ฑ์„ ๊นจ๊ณ  Dockerfiles๋ฅผ ๋ณด๊ธฐ ํ‰ํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Dockerfile ๋ช…๋ น์€ ๋’ค์— ์˜ค๋Š” ์‹ค์ œ ๋ช…๋ น๊ณผ ๋งค์šฐ ๊ตฌ๋ณ„๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "RUN --no-cache myapp --enable-cache"์™€ ๊ฐ™์€ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ๋ณต์žกํ•œ ๊ตฌ๋ฌธ์˜ ์˜ˆ๋ฅผ ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค.

@curtiszimmerman ๋‹น์‹ ์˜ ์˜ˆ๋Š” ๋‚˜์—๊ฒŒ ๋งค์šฐ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. --no-cache๋Š” RUN์šฉ์ด๊ณ  --enable-cache๋Š” myapp์šฉ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์น˜๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ๋ณด์‹ญ์‹œ์˜ค.
๋„์ปค ์‹คํ–‰ -ti ์šฐ๋ถ„ํˆฌ ls -la
์‚ฌ๋žŒ๋“ค์€ -ti๊ฐ€ '์‹คํ–‰'์„ ์œ„ํ•œ ๊ฒƒ์ด๊ณ  '-la'๊ฐ€ 'ls'๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž„์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์ด ํŽธ์•ˆํ•ด ๋ณด์ด๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
RUN ALWAYS์™€ ๊ฐ™์€ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ํ™•์žฅ์„ฑ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  Dockerfile ๋ช…๋ น์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๊ณ  ๊ฐ’ ์ „๋‹ฌ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ๋žŒ๋“ค์€ ํŠน์ • ๋ช…๋ น์— ๋Œ€ํ•ด USER๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์„ ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์‹คํ–‰=foo myapp
๊ธฐ์ˆ ์ ์œผ๋กœ env var USER๋ฅผ myapp์˜ ์…ธ ๋‚ด์—์„œ 'foo'๋กœ ์„ค์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๋™์•ˆ: RUN --user=foo myapp์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
Is: RUN var=foo myapp
์„ค์ • ๋ฐ env var 'var' ๋˜๋Š” ์ผ๋ถ€ RUN ์˜ต์…˜์„ ๊ฐ€์ ธ์˜ค๋ ค๋Š” ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
IOW, ๊ธฐ์กด์˜ ์œ ํšจํ•œ ๋ช…๋ น IMO์™€ ๊ฒน์น  ํ™•๋ฅ ์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ์„ ์‹œ์ž‘ํ•  ๋•Œ ๋‹จ์–ด๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์‹ค์ œ๋กœ ์—ญ์ˆœ EVERY <options> COMMAND ํ•ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์ด์œ :

  • "user"์™€ "cache"(์ ์–ด๋„)์˜ ๊ฒฝ์šฐ, ๊ทธ๊ฒƒ๋“ค์€ ์–ด๋–ค COMMAND๋ผ๋„ ๊ฐ์Œ€ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์  ํŠน์„ฑ์ž…๋‹ˆ๋‹ค.
  • RUN ALWAYS ๊ตฌ๋ฌธ์€ RUN ๋ช…๋ น ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.
  • RUN EVERY 5 days ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๊ฐ€ ๋” ์‹ฌ๊ฐํ•ฉ๋‹ˆ๋‹ค. EVERY์— ์ฒจ๋ถ€๋œ ์˜ต์…˜์ด ๋” ๋งŽ์€ ๋ชจํ˜ธ์„ฑ์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. EVERY 5 days RUN ์˜ต์…˜์ด ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ช…๋ น์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. RUN USER usr ๋Œ€ USER usr RUN ์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (1) ๋ช…๋ น ํ‚ค์›Œ๋“œ๊ฐ€ ์ ˆ๋Œ€ ์˜ต์…˜์ด ์•„๋‹ˆ๊ฑฐ๋‚˜ (2) ํ‚ค์›Œ๋“œ๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•˜๋Š” ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ๋Š” ํ•œ ์ด๊ฒƒ์€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์— ์˜ต์…˜( ALWAYS AS user RUN ... )์„ ์ ‘๋‘์‚ฌ๋กœ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…˜์— GNU ์Šคํƒ€์ผ์˜ longopts๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ง๋กœ ๊ฑฑ์ •ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ๋“ค์€ ๋Š™๊ฑฐ๋‚˜ ์œ ์•ฝ์„ ๋ฐ”๋ฅธ ๋ˆˆ๊ณผ ๋งค์šฐ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” 20์‹œ๊ฐ„ ํ›„์— wtf๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ดํ•˜๋ฉด์„œ ๋ณต์žกํ•œ Dockerfile ๋ช…๋ น์„ ์‘์‹œํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค -- ์„ ํƒ๊ถŒ์€ ๊ด€๊ณ„์—†์ด ์ผ์–ด๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ˆ์ธกํ•ฉ๋‹ˆ๋‹ค -- ์„ ํƒ๊ถŒ์€ ๊ด€๊ณ„์—†์ด ์ผ์–ด๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ์•„์ง ๊ฒฐ์ •๋œ ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. @duglin ์ด ์ œ์•ˆํ•˜๋Š” ๊ตฌ๋ฌธ์€ ์ด์ „์— ์ œ์•ˆ/๊ฒฐ์ •๋œ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ _๋ฐ˜๋Œ€ ์ œ์•ˆ_์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ #9934๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๋˜ํ•œ @duglin ์€ ๊ทธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ์‚ฌ๋žŒ์ด

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

์ด ๋ฌธ์ œ๋Š” ๊ฐ€๋…์„ฑ์„ ์œ„ํ•ด Dockerfile ํ˜•์‹์„ ์ง€์ •ํ•˜์—ฌ ๊ทน๋ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ํ˜•์‹์„ ์ง€์ •ํ•  ๋•Œ ๊ฐ€๋…์„ฑ์ด ๋ฌธ์ œ์ธ์ง€ ํ…Œ์ŠคํŠธ/ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋” ๋งŽ์€ ์˜ˆ์ œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” Dockerfile ์ž์ฒด๊ฐ€ ์บ์‹œ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์—ฌ์ „ํžˆ ๋งค์šฐ -1์ž…๋‹ˆ๋‹ค.
์ ์šฉํ•ด์•ผ ํ•˜๊ณ  ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ์ข‹์€ ์˜ˆ๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ๋‹ค.
์บ์‹œ ๋ฒ„์ŠคํŠธ๋กœ ์ ์ ˆํ•˜๊ฒŒ ๋‹ค์‹œ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋Š” Dockerfile ๋ฐ
๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•  ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ.

ํŠน์ • ์œ„์น˜์—์„œ ์บ์‹œ๋ฅผ ์ค‘์ง€ํ•˜๊ธฐ ์œ„ํ•ด "๋„์ปค ๋นŒ๋“œ"์— ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Œ
ํ›จ์”ฌ ๋” ์œ ์—ฐํ•˜๊ณ  IMO(์บ์‹œ ์ œ์–ด๋ฅผ ๋‹ค์‹œ
์–ด์จŒ๋“  ํ•ด๋‹น ์บ์‹œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ ์šด์˜์ž์˜ ์†์— ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.)

@tianon ์˜ -1์— +1(๋”ฐ๋ผ์„œ -1์ด ๋ฉ๋‹ˆ๋‹ค!)์ด๊ณ  N ๋‹จ๊ณ„์—์„œ ์ค‘๋‹จํ•  ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์บ์‹œ๊ฐ€ ์†์ƒ๋˜๋ฉด ์–ด์จŒ๋“  ๋‚˜๋จธ์ง€ Dockerfile์— ๋Œ€ํ•ด ์†์ƒ๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด ์ด๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Š๋ผ๋Š”์ง€ ๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ•ด์„œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ("docker ๋นŒ๋“œ"์—์„œ) N ๋‹จ๊ณ„์—์„œ ๋ฉˆ์ถ”๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์ƒ์ƒํ•˜์‹ญ๋‹ˆ๊นŒ? ์˜ค๋Š˜ N ๋‹จ๊ณ„๊ฐ€ ๋‚ด์ผ N+1 ๋‹จ๊ณ„๊ฐ€ ๋  ๋•Œ ๋ถ€์„œ์ง€๊ธฐ ์‰ฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์‚ฌ๋žŒ๋“ค์ด ๋นŒ๋“œ cmd ํ–‰์—์„œ ํ•ด๋‹น ๋ ˆ์ด๋ธ”์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋„๋ก Dockerfile ๋‚ด์— ์ผ์ข…์˜ "๋ ˆ์ด๋ธ”"์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด Dockerfile์— ๋‚˜ํƒ€๋‚˜๋Š” "STOP-CACHING"๋ช…๋ น์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๊ณผ ๋งŽ์€ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋งค๋ฒˆ ์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•˜๋Š” Dockerfile cmd์˜ ์ข‹์€ ์˜ˆ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ธ€์Ž„, ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์›๋ž˜ ๊ทธ๊ฒƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ผ์˜ ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค.
line-content-based regexp๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํŠนํžˆ
์–ด๋Š ๋‹จ๊ณ„ ๋ฒˆํ˜ธ๋ฅผ ์ •ํ™•ํžˆ ์•„๋Š” ๊ฒƒ๋ณด๋‹ค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.
์บ์‹œ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค -- ํ˜„์žฌ์˜ ์ „์ฒด ์‚ฌ๋ณธ์„ ์“ฐ๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.
Bash์˜ Dockerfile ํŒŒ์„œ, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. D).

Tianon Gravi [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๊ธ€์Ž„, ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์›๋ž˜ ๊ทธ๊ฒƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ผ์˜ ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค.
line-content-based regexp๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํŠนํžˆ
~๋ถ€ํ„ฐ
์ •ํ™•ํžˆ ์–ด๋–ค ๋‹จ๊ณ„ ๋ฒˆํ˜ธ๋ฅผ ์•„๋Š” ๊ฒƒ๋ณด๋‹ค ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.
๋„ˆ
์บ์‹œ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค -- ํ˜„์žฌ์˜ ์ „์ฒด ์‚ฌ๋ณธ์„ ์“ฐ๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.
Bash์˜ Dockerfile ํŒŒ์„œ, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. D).

ํ•ญ์ƒ/์บ์‹œ ํŒŒ๊ดด๋ผ๋Š” ์ด์ „ ์ œ์•ˆ์„ ๋‹ค์‹œ ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
"RUN"์€ "RUN!"์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1๋‹จ์–ด ๋ช…๋ น ๊ตฌ์กฐ(?)๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋‹จ๊ณ„์—์„œ ์บ์‹œ๋ฅผ ๊นจ๋œจ๋ฆฌ๊ธฐ ์œ„ํ•ด Dockerfile์„ ํŽธ์ง‘ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ(์ž๋ฆฌ ํ‘œ์‹œ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž„์˜์˜ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์—ฌ)์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ•ญ์ƒ ํŠน์ • ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” docker build CLI ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด์ง€๋งŒ, ๋ช…๋ น์— ์ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ๋ผ์ธ ๋ฒˆํ˜ธ๋ฅผ ์ถ”์ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค๋ฃจ๊ธฐ ํž˜๋“ค๋‹ค ๋Š” git clone ๋ฐ”๋กœ ์•ž์— Dockerfile์— ์ž„์˜์˜ ๋ฌธ์ž(!)๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@curtiszimmerman ์˜์–ด๋กœ ๊ธด๋ฐ•ํ•จ๊ณผ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— (!) ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ("์ด๋ ‡๊ฒŒ ํ•ด์•ผ์ง€!")

Dockerfile์€ ์–ด๋–ค ๋ช…๋ น์ด ์บ์‹œ ํ•ด์ œ/์บ์‹œ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์ ์ ˆํ•œ ์žฅ์†Œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. "--no-cache=git"์œผ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ(์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๋‹น์‹ ์€ ๋‚ด๊ฐ€ ์ธ์šฉ/๋น„๊ตํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค)๊ฐ€ ๋” ํˆฌ๋ฐ•ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

์™œ RUN์— ์ดˆ์ ์„ ๋งž์ถ”๋Š”๊ฐ€? ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•ด ์บ์‹œ๊ฐ€ ๋ฒ„์ŠคํŠธ๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ‰์ƒ ์บ์‹œ
Dockerfile ๋ช…๋ น์˜ ์œ ํ˜•์€ ํ›จ์”ฌ ๋” ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์œ ์—ฐ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์„ ํƒ์ ์œผ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฒ„์ŠคํŠธ ์บ์‹œ $doit
์—ฌ๊ธฐ์„œ $doit์ด ์ •์˜๋œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ -e ์˜ต์…˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋ฉด( https://github.com/docker/docker/pull/9176 ) ์‚ฌ๋žŒ๋“ค์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋„์ปค ๋นŒ๋“œ -e doit=true ...

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

@duglin ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค? ๋ฒ„๊ทธ ์ œ๋ชฉ์€ RUN์œผ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์–ด ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

@curtiszimmerman ์•„.

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

@zamabe ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค๋ฉด ์บ์‹œ ๋ฒ„์ŠคํŒ… ์‹๋ณ„์ž์™€ ๋ณ„๊ฐœ์ธ ์บ์‹œ์—์„œ ๊ณ„์†ํ•˜๋Š” ํŠน์ˆ˜ ๋ช…๋ น์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ • ์ง€์ ์—์„œ DISABLE-CACHE ์™€ ๊ฐ™์€ ๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋จธ์ง€ Dockerfile์ด ์บ์‹œ์—์„œ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ DISABLE-CACHE? ์™€ ๊ฐ™์€ ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋ฉด ์บ์‹œ์—์„œ ๊ณ„์†ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์€ ์ œ์•ˆ์ด ์•„๋‹ˆ๋ผ ๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์—ฐ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

git repo์˜ ํ’€ ์ฝ”๋“œ์— ๋Œ€ํ•ด +1

+1

์ด๊ฒƒ์€ ์—„์ฒญ๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ง€๊ธˆ ๋‹น์žฅ์€ git ํด๋ก ์— ๋Œ€ํ•œ ์บ์‹œ๋ฅผ ๋Š๊ธฐ ์œ„ํ•ด git commit ํ•ด์‹œ๋ฅผ Dockerfile์— ์“ฐ๋Š”(์ž๋ฆฌ ํ‘œ์‹œ์ž ๋ฎ์–ด์“ฐ๊ธฐ) ์ง€์†์ ์ธ ํ†ตํ•ฉ์˜ ์ผ๋ถ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด https://github.com/docker/docker/pull/10682 PR์„ ์ œ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
์บ์‹ฑ์„ ๋‹ค์‹œ ์ผœ๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ์˜ค๋Š˜๋‚ ์—๋Š” ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

+1

Dockerfile์—์„œ ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์บ์‹œ๋ฉ๋‹ˆ๋‹ค...
NOCACHERUN ๋ช…๋ น์˜ ๊ฒฝ์šฐ +1

+1
๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ๋งค๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์ผ๋ถ€ RUN์— ์ •๋ง ์œ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

git clone ๋Š” ์บ์‹œ์— ๋„๋‹ฌํ•˜์ง€๋งŒ go get -d ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ ์–ด๋–ค ์•„์ด๋””์–ด?

_ @LK4D4 @calavera @jfrazelle @crosbymichael @tiborvass_์˜

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ด€๋ จ #10682 ์ฐธ์กฐ).

์‹คํ–‰์— ๋Œ€ํ•ด +1์ž…๋‹ˆ๋‹ค. ์ข‹์€ ๊ฒƒ.

+1

docker 1.9์—๋Š” ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณ€์ˆ˜๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œ๋ฅผ ๊ฐ•์ œ๋กœ ๊นจ๊ธฐ ์œ„ํ•ด ๊ทธ๊ฒƒ๋“ค์„ (์ž˜๋ชป) ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/docker/docker/issues/15182๋ฅผ ์ฐธ์กฐ

์ด๊ฒƒ์ด ์•„์ง ๊ธฐ๋Šฅ์ด ์•„๋‹Œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@hacksaw6 ์—ฌ๊ธฐ์—์„œ ๋งํ•œ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/docker/docker/pull/10682

+1

+1

+1 ์ด๊ฒŒ ์•„์ง ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹Œ๋ฐ!!!!!

+1 ๊ฑด๋ฌผ์„ ๋ณด๋‹ค ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•˜๋ ค๋ฉด ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

+1

+1

+1

+1

+1 ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค
(์ง€๊ธˆ์€ @timruffles ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์‚ฌ์šฉ)

+1

+1

+1

์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์ด ๋‹จ์ง€ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ธ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์‚ฌ๋žŒ๋“ค์ด +1 ๋Œ€์‹  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

+1, ์บ์‹œ๋œ git ํด๋ก ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ฐพ๊ธฐ ์œ„ํ•ด Google์„ ํ†ตํ•ด ์—ฌ๊ธฐ์— ๋„์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€:
๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ gradle์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ชจ๋“œ์—์„œ groovy ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•ฑ์„ ํ˜ธ์ถœํ•˜๋Š” ๋„์ปค ๊ตฌ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ์ข…์† Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์›๊ฒฉ mvn ์ €์žฅ์†Œ์—์„œ)๊ฐ€ ๋กœ์ปฌ docker mvn ์ €์žฅ์†Œ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์‹คํ–‰์€ ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์ฆ‰์‹œ ๋ฐ˜ํ™˜๋˜์ง€๋งŒ ๋ชจ๋“  Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ์ด ๋กœ๋“œ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
๋„์ปค ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ๋™์ผํ•œ ์•ฑ์ด gradle --offline ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•ฑ์€ ๋กœ์ปฌ mvn ์ €์žฅ์†Œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ๋น„์‹ธ๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์›๊ฒฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ ์Šค๋ƒ…์ƒท ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•  ๋•Œ docker ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ docker๋Š” ๋นŒ๋“œ ์ค‘์— ์›๊ฒฉ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, ๊ทธ๋Š” ๋‚ด gradle dryrun cmd๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Œ).

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

์ตœ์‹  ๋ฒ„์ „์ธ IMHO๋ณด๋‹ค ๋นŒ๋“œ ์‹œ์Šคํ…œ "๊ธฐ๋Šฅ"์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค.

์ƒˆ ๊ตฌ๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ: FORCE RUN git clone .... ?

์ง€๊ธˆ์€ RUN _=$(date) git clone ... ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@c9s ์‹ค์ œ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

@duglin ์„ค์ • ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. "FORCE RUN"์€ ์ œ์•ˆ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.]

@c9s Dockerfile ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹Œ ์ปจํ…Œ์ด๋„ˆ์˜ ์…ธ์—์„œ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— env var ์„ค์ •์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. RUN _=$(date) echo hi ์‹œ๋„ํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ๋นŒ๋“œ์—์„œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

@duglin ๋‹น์‹  ๋ง์ด ๋งž์•„์š” :| ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

@ c9 ๋Œ€์‹ 

FROM foo
ARG CACHE_DATE=2016-01-01
RUN git clone ...
docker build --build-arg CACHE_DATE=$(date) ....

@thaJeztah ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํšจ๊ณผ๊ฐ€์žˆ๋‹ค!

+1 git repos ๋ณต์ œ(์‚ฌ์šฉ ์‚ฌ๋ก€)

๋„ˆ๋ฌด ๋งŽ์€ +1, ๋„์ปค ํŒŒ์ผ์—์„œ git repo๋ฅผ ๊ฐ€์ ธ์˜ค๋ฉด ์บ์‹œ๊ฐ€ ์ด๋ฏธ์ง€๊ฐ€ ๋นŒ๋“œ๋˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. CI๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ๋ฅผ ํ‘ธ์‹œํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

+1 git repos ๋ณต์ œ(git repo์—์„œ ์•ฝ๊ฐ„์˜ ํŽธ์ง‘์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๋งˆ๋‹ค ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค)

@Vingtoft ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์˜ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒฝ์šฐ ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค.

@itsprdp ๊ทธ๊ฑด ๋ชฐ๋ž๋Š”๋ฐ ๋ช…ํ™•ํžˆ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@itsprdp ๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ Docker๋Š” ์—ฌ์ „ํžˆ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ์˜คํ•ดํ•˜๊ณ  ์žˆ๋Š” ๊ฑด ์•„๋‹๊นŒ?

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

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

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

@itsprdp ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์—์„œ ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๊ต‰์žฅํ•˜์ง€๋งŒ ๋” ์ ์€(๋˜๋Š” ๋” ๋งŽ์ด ๋งํ•ด์•ผ ํ• ๊นŒ์š”?) ๋˜ํ•œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์œ ์Šค ์ผ€์ด์Šค(๋ฐ ๋งŽ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค)์—์„œ ์‹ค์ œ git pull์€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ๋ฆ„์„ ์ฃฝ์ด๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1, git clone ์ค‘ ์บ์‹œ ์‚ฌ์šฉ :(

ํ†ตํ•ฉ ์†”๋ฃจ์…˜์ด ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๊ทธ ๋™์•ˆ ARG ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • Dockerfile ๋ช…๋ น์—์„œ ์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dockerfile์—์„œ:

ARG CACHEBUST=1
RUN git clone https://github.com/octocat/Hello-World.git

๋ช…๋ น์ค„์—์„œ:

docker build -t your-image --build-arg CACHEBUST=$(date +%s) .

CACHEBUST ๋ฅผ ํ˜„์žฌ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ํ•ญ์ƒ ๊ณ ์œ ํ•˜๋ฉฐ Dockerfile์—์„œ ARG ์„ ์–ธ ์ดํ›„์˜ ๋ช…๋ น์€ ์บ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. CACHEBUST build-arg๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ๋นŒ๋“œํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’ 1์„ ์‚ฌ์šฉํ•˜๊ณ  ์บ์‹œ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•ญ์ƒ git repos์˜ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์„ ํ™•์ธํ•˜๊ณ  ์ตœ์‹  SNAPSHOT ์ข…์†์„ฑ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์–ด, @thaJeztah๊ฐ€ ๋งํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ทธ์˜ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์„ค๋ช…์œผ๋กœ ๋‚จ๊ฒจ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

@shane-axiom CACHEBUST ๊ฐ’์œผ๋กœ git commit hash๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

export CACHEBUST=`git ls-remote https://[email protected]/username/myRepo.git | grep refs/heads/develop | cut -f 1` && \
echo $CACHEBUST && \
docker build -t myDockerUser/myDockerImage \
   --build-arg blah=blue \
   --build-arg CACHEBUST=$CACHEBUST \
   .

http://stackoverflow.com/questions/15677439/how-to-get-latest-git-commit-hash-command#answer -15679887์˜ ๋‹จ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

@pulkitsinghal git repos์— ๋Œ€ํ•œ ์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•˜๋Š” ๋ฐ ๋ฉ‹์ง€๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์šฉ๋„(์˜ˆ: SNAPSHOT ์ข…์†์„ฑ ๊ฐ€์ ธ์˜ค๊ธฐ ๋“ฑ)์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ๋ฒ„์ŠคํŒ… ํƒ€์ž„์Šคํƒฌํ”„ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์บ์‹œ ON์— ๋Œ€ํ•ด +1 | ๋„๋‹ค

+1

+1

@CheRuisiBesares ์ ‘๊ทผ ๋ฐฉ์‹ ์— ๋Œ€ํ•ด ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์บ์‹œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ญ์ƒ ADD https://www.random.org/strings/?num=16&len=16&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new uuid ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฒŒ์‹œํ•˜๋ ค๋ฉด ....

COPY package.json /usr/src/
RUN npm install

package.json ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๋ถ€ ๋น„๊ณต๊ฐœ github ์ข…์†์„ฑ์— ๋Œ€ํ•ด master ํƒœ๊ทธ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ package.json ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํ•œ ์‹ค์ œ๋กœ ์ตœ์‹  master ์–ป์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์ผ๋ฐ˜์ ์œผ๋กœ ์„ค๋ช…์— - ๋ฅผ ์„ค๋ช…์— ์ถ”๊ฐ€ํ•œ ๋‹ค์Œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋™์•ˆ ์ œ๊ฑฐ).

A๋Š” RUN NO CACHE ๋Œ€์‹  ์ทจํ•  RUN ๊ทธ๊ฒƒ์ด ์ข‹์€ ์†”๋ฃจ์…˜์ด ๋  ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

+1

์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  npm์—์„œ ๋‚ด ์ƒˆ ๊ฒŒ์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” npm ์„ค์น˜์— ๋Œ€ํ•ด ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ปค ํŒŒ์ผ์—์„œ RUN ๋ช…๋ น๋‹น ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@brycereynolds @mmobini ์บ์‹œ๋ฅผ ์ˆ˜๋™์œผ๋กœ https://github.com/docker/docker/issues/1996#issuecomment -172606763์„ ์ฐธ์กฐ

์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์—†์–ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Docker์—์„œ Dropwizard ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Maven์œผ๋กœ ๋นŒ๋“œ๋œ Java REST Services)์„ ์‹คํ–‰ ์ค‘์ด๊ณ  ์ž๋™ํ™”๋œ ์‹œ์Šคํ…œ์ด ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ €์žฅ์†Œ์— Dockerfile์„ ํฌํ•จํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์€ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ๋•์…˜ ๋ฒ„์ „๊ณผ ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ฐœ๋ฐœ ๋ฒ„์ „์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋นŒ๋“œ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

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

@ctrimble --no-cache ๋˜๋Š” --build-arg ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์บ์‹œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ช…๋ น์ด ํฌํ•จ๋œ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ --no-cache ์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  1. ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋™์ผํ•œ ๊ฒฝ์šฐ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ์ˆ˜ํ–‰
  2. ์‹คํ–‰ ์‹œ์ ์— ๋”ฐ๋ผ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ์ˆ˜ํ–‰
  3. ์ด์ „ ๋‹จ๊ณ„์—์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์บ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์„ ๋” ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒจํ„ด์€ ๊ฐœ๋ฐœ ๋นŒ๋“œ์—์„œ ์ž์ฃผ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Dockerfile์— ์˜๋ฏธ ์ฒด๊ณ„๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ctrimble ํ•œ ๋‹จ๊ณ„์—์„œ ์บ์‹œ๋ฅผ ๋ฒ„์ŠคํŠธ ๋ฉ๋‹ˆ๋‹ค.

@cpuguy83 ์ •ํ™•ํžˆ. ๋‚ด ๋นŒ๋“œ ์‹œ์Šคํ…œ์˜ ์˜๋ฏธ๋Š” ๊ฐœ๋ฐœ ๋นŒ๋“œ์— ๋Œ€ํ•ด ์ผ์‹œ์ ์ž…๋‹ˆ๋‹ค. ์บ์‹ฑ๋ณด๋‹ค ์˜ฌ๋ฐ”๋ฅธ ๋นŒ๋“œ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ๋‘˜ ๋‹ค ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

CHECK [FILE_PATH]

๋ชจ๋“  ๋„์ปค๋Š” ํŒŒ์ผ์˜ MD5(๋˜๋Š” ๋‹ค๋ฅธ ํ•ด์‹œ๊ฐ€ ํž™ํ•œ ๋ชจ๋“  ๊ฒƒ)๋ฅผ ์ €์žฅํ•˜๊ณ  ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ดํ›„์˜ ๋ชจ๋“  ๋‹จ๊ณ„๊ฐ€ ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค.

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

CHECK Gemfile
CHECK package.json
CHECK composter.json
CHECK project.json

์ผ์ • ๊ธฐ๊ฐ„์ด ์ง€๋‚œ ํ›„ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ํ˜๋ €๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. apt ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•œ Ansible์˜ cache_valid_time ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์˜๊ฐ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://docs.ansible.com/ansible/apt_module.html

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

EXPIRE 1234567 
RUN apt-get update
RUN bundle install

Docker๋Š” ๋งˆ์ง€๋ง‰ ์‹คํ–‰ ์‹œ๊ฐ„์„ ์•Œ๊ณ  "์ง€๊ธˆ"์„ ๊ธฐ์ค€์œผ๋กœ ์‹œ๊ฐ„์ด ๊ฒฝ๊ณผํ–ˆ๋Š”์ง€ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

@atrauzzi 1.13์˜ ๋นŒ๋“œ์—์„œ --squash ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(์ง€๊ธˆ์€ ์‹คํ—˜์šฉ).

@cpuguy83 ๋‚ด๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” --squash ์— ๋Œ€ํ•œ ๋ฌธ์„œ๋‚˜ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฒ˜์Œ์—๋Š” ์ด๋ฆ„์ด ๋‚ด ์ƒ๊ฐ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ํ‹€๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@atrauzzi ์˜ˆ, ๋นŒ๋“œ ์ฐธ์กฐ์—์„œ.

๊ธฐ๋ณธ์ ์œผ๋กœ --squash ๋‘˜ ๋‹ค ๊ณ„์ธต ์บ์‹œ๋ฅผ ๋ณด์กดํ•˜๊ณ  Dockerfile์˜ ๋ชจ๋“  ๊ฒƒ์ด ๋‹จ์ผ ๊ณ„์ธต์—์„œ ๋ฐœ์ƒํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‘ ๋ฒˆ์งธ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

@cpuguy83 ์ข‹์€ ์ , ์ƒ๊ฐ๋„ ๋ชปํ–ˆ๋Š”๋ฐ, ๋ฌผ๋ก  ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

ํƒ€์ž„์Šคํƒฌํ”„/๊ธฐ๊ฐ„ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

ํƒ€์ž„์Šคํƒฌํ”„/๊ธฐ๊ฐ„ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?

๋นŒ๋“œ ์ธ์ˆ˜๋ฅผ ํ†ตํ•ด;

ARG expire_after=never
RUN do some thing
docker build --build-arg expire_after=2016-12-01 -t foo .

์บ์‹œ๋ฅผ ํŒŒ๊ดดํ•˜๋„๋ก ๋นŒ๋“œ ์ธ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

๋” ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด +1

๋” ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด +1

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

+1

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

์ด ๊ฐ™์€:
docker build --step 5 .

๋นŒ๋“œ ์ค‘ 5๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜์—ฌ ์ดํ›„์˜ ๋ชจ๋“  ์บ์‹œ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

+1
์ œ๋ฐœ.

์บ์‹œ ์ผœ๊ธฐ|๋„๊ธฐ +1

์ด๋Ÿฌํ•œ CACHE ON|OFF ๋ช…๋ น์˜ ๋ฌธ์ œ๋Š” ์บ์‹œ๊ฐ€ ๊บผ์ง„ ๋‹จ๊ณ„์—์„œ ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ์บ์‹œํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ์ผํ•˜๊ฒŒ ํ•ฉ๋ฆฌ์ ์ธ ๋ช…๋ น์€ ENDCACHE ์ž…๋‹ˆ๋‹ค.

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

+1

+1 ํ•„์ˆ˜ ๊ธฐ๋Šฅ

CACHE ON|OFF +1 ๋™์˜

+1 ๋†€๋ž์Šต๋‹ˆ๋‹ค.

Docker๊ฐ€ ์ด์ „์— ๋‹จ๊ณ„๋ฅผ ์บ์‹œํ•˜๋Š” ๋ฐฉ์‹์„ ์‹ค์ œ๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ๋‚ด ์‹œ์Šคํ…œ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋นŒ๋“œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๋ฐ ๋ฐ˜๋‚˜์ ˆ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. "git clone" ์บ์‹ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ALWAYS ํ‚ค์›Œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋‹ซํ˜€?

๊ฐ€์žฅ ์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

https://github.com/moby/moby/issues/1996#issuecomment -185872769 ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
Dockerfile์—์„œ:

ARG CACHEBUST=1
RUN git clone https://github.com/octocat/Hello-World.git

๋ช…๋ น์ค„์—์„œ:

docker build -t your-image --build-arg CACHEBUST=$(date +%s)

RUN๊ณผ ์œ ์‚ฌํ•œ ์ƒˆ ๋ช…๋ น์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์ง€๋งŒ RUN NO CACHE์— ๋Œ€ํ•ด RUNNC๋ฅผ ์บ์‹œํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@habeebr (https://github.com/moby/moby/issues/1996#issuecomment-295683518) - https://github.com/moby/moby/issues/1996# ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

+1

RUNNC๋Š” ์ข‹์€ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค!

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

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋ ต๊ณ  ์•„๋งˆ๋„ ์•„๋ฌด๋„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ณ  ๋งค๋ ฅ์ ์ธ Docker ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถฉ๋ถ„ํžˆ ๊นจ๋—ํ•œ ์ถฉ๋ถ„ํžˆ ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด _ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

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

์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค: https://github.com/moby/moby/pull/10682
์‰ฌ์šด ์†”๋ฃจ์…˜, ์‰ฌ์šด UX. ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ํ•ฉ์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์™€์šฐ ๊ทธ๋ƒฅ ์™€์šฐ...

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

+1

ํ•ฉ๋ฆฌ์ ์ธ ๋ณด์•ˆ๊ณผ ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ์œ„ํ•ด +1

+1

+1

+1

+1

+1

+1

+1 ์ŠคํŒธ์„ ๊ทธ๋งŒ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐ˜์‘ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ํˆฌํ‘œํ•˜์„ธ์š”.

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

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

์™œ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๊นŒ? ์œ ์šฉํ•œ ๊ฒƒ ๊ฐ™์•„์š”

+1

+1

+1

ํ˜„์žฌ ๋ ˆ์ด์–ด(๋ฐ ๋‹ค์Œ)์— ๋Œ€ํ•œ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•:

๋„์ปคํŒŒ์ผ

ARG CACHE_DATE
RUN wget https://raw.githubusercontent.com/want/lastest-file/master/install.sh -O - | bash

๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ --build-arg ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

docker build  --build-arg CACHE_DATE="$(date)"

๊ทธ๋Ÿฌ๋ฉด ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ๋งˆ๋‹ค wget ๋ช…๋ น์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

RUNNC ๋˜๋Š” CACHE OFF ๊ฐ€ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ๋™์•ˆ ์ด๊ฒƒ์€ ์œ ๋งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.
http://dev.im-bot.com/docker-select-caching/

๊ทธ๊ฑด:

screenshot 2018-05-26 19 03 09

๋‚˜๋Š” ์นจ์ฐฉํ•˜๊ฒŒ ๊ฐ€์„œ ๋ฌด๋ฆฌ์— ํ•ฉ๋ฅ˜ํ•  ๊ฒƒ์ด๋‹ค.

+1

์˜ˆ, ๋ช…๋ น์— ์„ ํƒ์  ์บ์‹ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ํ•œ ๋‹จ์–ด๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‚ด COPY ๊ฐ€ 80% ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋‚ด COPY ์บ์‹œํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์„ ์บ์‹œํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. CACHE ON ๋ฐ CACHE OFF ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

RUN X
RUN X
CACHE OFF
COPY /config /etc/myapp/config
CACHE ON

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

๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ • ์ง€์ ์—์„œ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๋ ค๋ฉด ์•ž์—์„œ ์–ธ๊ธ‰ํ•œ --build-arg ๋ฐ ARG ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ์˜๊ฒฌ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@shadycuz @curtiszimmerman ์˜ˆ, CACHE OFF ๋งŒ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์ง€๋งŒ CACHE ON ๋ณด์กดํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ ˆ์ด์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋‹ค์Œ ๋ ˆ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” CACHE ON ์ด ๊ธฐ์ˆ ์ ์ธ ๊ด€์ ์—์„œ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์–ด๋–ค ๋ ˆ์ด์–ด๊ฐ€ ๋ฌดํšจํ™”๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์˜๋„๋ฅผ ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ข€ ๋” ์œ ์—ฐํ•œ ์†”๋ฃจ์…˜์€ RUN ์™€ ์œ ์‚ฌํ•œ ๋ช…๋ น์œผ๋กœ ์ผ๋ถ€ ์…ธ ์ฝ”๋“œ์—์„œ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…๋ฃŒ ์ฝ”๋“œ 0์€ "์บ์‹œ ์‚ฌ์šฉ"์„ ์˜๋ฏธํ•˜๊ณ  1์€ "์บ์‹œ ๋ฌดํšจํ™”"๋ฅผ ์˜๋ฏธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰˜ ์ฝ”๋“œ๊ฐ€ ์ œ๊ณต๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ช…๋ น์„ INVALIDATE๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™œ ๋Œ“๊ธ€๋„ ์—†์ด ๋‹ซํ˜”์ง€?

๋Œ“๊ธ€์ด ์žˆ์—ˆ์ง€๋งŒ github์— ์ˆจ๊ฒจ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/moby/moby/issues/1996#issuecomment -93592837

+1

์ด ๊ธฐ๋Šฅ์€ ์ง€๊ธˆ ์ €์—๊ฒŒ ์ƒ๋ช…์˜ ์€์ธ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

+1

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

212๊ฐœ์˜ ๋Œ“๊ธ€๊ณผ ๊ณ„์‚ฐ์ด ์žˆ์ง€๋งŒ ์•„์ง ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ? ๊ฝค ๋ฌด์ง€ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

+1

+1

+1

+1

+1

๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์—ฌ๊ธฐ์— ์žˆ์œผ๋ฉฐ ์—ฌ์ „ํžˆ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„์ง ์‹ค์ œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

+1

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

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

์ „๋ฐ˜์ ์œผ๋กœ ์ด ๋ฌธ์ œ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์— ๊ด€ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์„œ๋น„์Šค ํ™•์žฅ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@jaromil ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ๋„ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํžˆ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ž์ฒด ํ˜ธ์ŠคํŒ… ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฌด์—‡์„ ์–ธ๊ธ‰ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ฐ„๋‹จํ•œ ์ž์ฒด ํ˜ธ์ŠคํŒ… ์†”๋ฃจ์…˜์€ cron cloning git repos ๋ฐ runnig docker build --no-cache์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ˆ„๊ตฌ๋‚˜ docker ๋นŒ๋“œ ๋ช…๋ น์ค„์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jaromil ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. DockerHub์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค(์œ ๋ฃŒ ํ”„๋กœ์ ํŠธ๋Š” ๋ฌผ๋ก  ๋นŒ๋“œ ์ˆ˜์— ๋Œ€ํ•ด ๋น„์šฉ์„ ์ฒญ๊ตฌํ•˜์ง€ ์•Š์Œ). ๋นŒ๋“œ๊ฐ€ ๋นˆ๋ฒˆํ•œ CI/CD ํ™˜๊ฒฝ์—์„œ๋Š” ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•˜๋Š” ํ•œ(docker ๋ฐ git์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ณ  ๊ณต์œ  ๋ณผ๋ฅจ์„ ์‹คํ–‰ํ•˜๋Š” 5๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์›ํ•˜์ง€ ์•Š์Œ), ์ƒˆ ๋ฒ„์ „์„ ์—…๋กœ๋“œํ•  ๋•Œ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์—…๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.
์ธ์ฝ”๋“œ ์บ์‹œ ์—†์Œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•ด ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ ๋Œ€์‹  ํ•ด๋‹น ๋‹จ์ผ ๋ ˆ์ด์–ด๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ž์ฒด ํ˜ธ์ŠคํŒ… ๋‹ด๋‹น์ž์— ๋Œ€ํ•ด์„œ๋Š” ๋†€๋ž„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. @bluzi ์˜๊ฒฌ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์ž์ฒด ํ˜ธ์ŠคํŒ…(๋˜๋Š” aws ecr ์‚ฌ์šฉ)ํ•˜๋Š” ๊ฒฝ์šฐ ddos โ€‹โ€‹์˜ํ–ฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

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

TLDR: Docker ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์„  ์‚ฌํ•ญ์ด ๋งŽ์€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์บ์‹ฑ์— ๋Œ€ํ•œ ๋‚ด ์ž์‹ ์˜ ๋ฌธ์ œ/ํ˜ผ๋ž€์ด ๋ฐœ์ƒํ•œ ํ›„ ์—ฌ๊ธฐ์—์„œ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์™€ https://github.com/moby/moby/pull/10682์—์„œ ๋ชจ๋“  ์˜๊ฒฌ์„ ์ฝ์€ ํ›„ ๋‚ด ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ป๊ฒŒ๋“  ๋‚˜๋Š” ์ด์— ๋Œ€ํ•œ Docker์˜ ์‘๋‹ต์— ์—ฌ์ „ํžˆ ์ขŒ์ ˆ๊ฐ์„ ๋Š๊ผˆ๊ณ  ๋งŽ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค๋„ ๊ฐ™์€ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ค„ ์‚ฌ์ด๋ฅผ ์ฝ์œผ๋ฉด ์ด ๊ธฐ๋Šฅ ์š”์ฒญ์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๋Œ“๊ธ€ ์ž‘์„ฑ์ž ๋Œ€๋ถ€๋ถ„์ด docker image build ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Dockerfile์˜ ํŠน์ • ์ง€์ ์—์„œ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ์†”๋ฃจ์…˜์— ๋งŒ์กฑํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ Docker์˜ ํ˜„์žฌ ์†”๋ฃจ์…˜(https://github.com/moby/moby/issues/1996#issuecomment-172606763์— ์„ค๋ช…๋จ)์€ ์ด๋Ÿฌํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์ถฉ๋ถ„ํ•ด์•ผ ํ•˜๋ฉฐ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ด์— ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. . (๋ˆ„๊ตฐ๊ฐ€ docker image build ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์ง€๋งŒ ์ด ์†”๋ฃจ์…˜์ด ์—ฌ์ „ํžˆ ๋ถ€์ ์ ˆํ•˜๋‹ค๋ฉด ์ด๊ฒƒ์ด ๋ถ€์ ์ ˆํ•œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

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

์ค„ ์‚ฌ์ด๋ฅผ ๋‹ค์‹œ ์ฝ์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ docker image build ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋น„์Šค์™€ ๊ด€๋ จ๋˜๊ฑฐ๋‚˜ docker image build ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌ๋˜๋Š” Dockerfile๊ณผ ๊ด€๋ จ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. docker image build ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์ธ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์ด๋Ÿฌํ•œ ๋งŽ์€ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” Dockerfile์˜ ํŠน์ • ์ง€์ (์ด ๊ธฐ๋Šฅ ์š”์ฒญ์˜ ์›๋ž˜ ์ง€์ )์—์„œ ์บ์‹ฑ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋Œ€์‹ , ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ docker image build "--no-cache" ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ ์ž‘์—… ์ „์— Dockerfile์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด Dockerfile ๋‚ด์—์„œ ์บ์‹ฑ์„ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋งŒ์กฑํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ง“๋‹ค. (์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ๋ถ€๋ถ„ ์บ์‹ฑ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•œ์ง€ ๋˜๋Š” ์บ์‹œ๋ฅผ ์™„์ „ํžˆ ๋น„ํ™œ์„ฑํ™”ํ•ด๋„ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ถฉ๋ถ„ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ docker image build ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ Docker๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ์บ์‹œ๋ฅผ ๋ฌด์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์บ์‹œ ๋น„ํ™œ์„ฑํ™” ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. https://github.com/moby/moby/pull/10682#issuecomment-73777822 ์— ๋”ฐ๋ฅด๋ฉด Docker Hub๋Š” ์บ์‹œ๋ฅผ ๋ฌด์กฐ๊ฑด ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ์•„์ง ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ Docker๋Š” https://github.com/moby/moby/pull/10682#issuecomment-159255451์— ๋Œ€ํ•ด ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์— ๋ถˆ๋งŒ์„ ์ œ๊ธฐํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ docker image build ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์„œ๋น„์Šค์™€ ๊ด€๋ จํ•˜์—ฌ Docker๊ฐ€ ์ทจํ•˜๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์ž…์žฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ž…์žฅ์€ ์„œ๋น„์Šค ์ œ๊ณต์ž์™€ ์‚ฌ์šฉ์ž ๋ชจ๋‘๊ฐ€ ๋ฌด์—‡์„ ๊ธฐ๋Œ€ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ๋ˆˆ์— ์ž˜ ๋„๋Š” ๊ณณ์— ๊ณต์‹์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์œ„์น˜ ๋˜๋Š” Docker Hub ์บ์‹ฑ ๋™์ž‘์€ ํ˜„์žฌ ๊ทธ ๊ฑฐ๋Œ€/๊ณ ๋Œ€/๋‹ซํžŒ ํ’€ ์š”์ฒญ ๊นŠ์ˆ™์ด ๋ฌปํžŒ ๋น„๊ณต์‹ ๋Œ“๊ธ€์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ณณ์—์„œ๋Š” ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„œ๋น„์Šค ์ œ๊ณต์—…์ฒด์™€ ์‚ฌ์šฉ์ž ๋ชจ๋‘๊ฐ€ ์ผ์ƒ์ ์œผ๋กœ ์ด๊ฒƒ์„ ์ž˜๋ชป ์ดํ•ดํ•˜์‹ญ์‹œ์˜ค. ๋นŒ๋“œ ์„œ๋น„์Šค์˜ ์บ์‹ฑ ์‚ฌ์šฉ์— ๋Œ€ํ•œ Docker์˜ ์˜๊ฒฌ์„ ์„ค๋ช…ํ•˜๋Š” docker build ์ฐธ์กฐ ์— ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  Docker Hub ์บ์‹ฑ ๋™์ž‘์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ Docker Hub ์ž๋™ํ™” ๋นŒ๋“œ ๋ฌธ์„œ ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Dockerfile์ด docker image build ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐํฌ๋˜๋Š” ๊ฒฝ์šฐ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ๊ฐ„๋‹จํ•œ docker build . ๋ช…๋ น(์ถ”๊ฐ€ ์ธ์ˆ˜ ์—†์ด)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ์ผ๋ฐ˜์ ์ด์–ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. Dockerfile ๋นŒ๋”๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋™์•ˆ ๋น„ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค(์˜ˆ: https://github.com/moby/moby/issues/1996#issuecomment-72238673 https://github.com/moby/moby/pull /10682#issuecomment-73820913 https://github.com/moby/moby/pull/10682#issuecomment-73992301)๋Š” ์‚ฌ์šฉ์ž๊ฐ€ Dockerfile์— ์บ์‹œ ์žฌ์ •์˜๋ฅผ ํ•˜๋“œ ์ฝ”๋”ฉํ•˜์—ฌ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๋ฌด์กฐ๊ฑด ๋ง‰๋Š” ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ƒ์„ธ/๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์—†๋Š” ์ƒํ™ฉ์—์„œ Docker๋Š” ์บ์‹ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ์š”๊ตฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์œผ๋ฉฐ, ์ด๊ฒƒ์ด ๊ณ„์†๋˜๋Š” ์ขŒ์ ˆ์˜ ์›์ธ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (์ด์™€ ๊ด€๋ จ๋œ ๊ฐ•๋ ฅํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

๊ทธ๋Ÿฌ๋‚˜ Docker๋Š” ์ถ”๊ฐ€ ์ธ์ˆ˜ ์—†์ด docker build . ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‚ฌ์šฉ์ž์˜ ์Šต๊ด€์„ ๊นจ๋œจ๋ฆฌ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋ชจ๋‘๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์บ์‹ฑ ๋™์ž‘ ๋ฐ "--no-cache" ์ธ์ˆ˜๋Š” ๊ด€๋ จ Docker ์ž์Šต์„œ(์˜ˆ: this ๋˜๋Š” this
๋˜๋Š” ์ด ). ๋˜ํ•œ docker build ๋ฌธ์„œ ์—๋Š” "--no-cache" ์ธ์ˆ˜๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์ง€๋งŒ ๊ทธ ์ค‘์š”์„ฑ์„ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ๋งŽ์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ์ค‘์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ•์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋˜ํ•œ docker image build ๋ฌธ์„œ ๋Š” ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ docker build ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์•ผ Dockerfile ์ฐธ์กฐ ๋ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ๋ฌธ์„œ๋งŒ ์‹ค์ œ๋กœ ์บ์‹ฑ ๋™์ž‘์„ ์„ค๋ช…ํ•˜๊ณ  ์—ญํ• ์„ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. "--no-cache" ์ธ์ˆ˜. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฌธ์„œ๋Š” ๊ณ ๊ธ‰ Dockerfile ์ž‘์„ฑ์ž๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋งŒ "--no-cache" ์ธ์ˆ˜์— ์ต์ˆ™ํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ถ”๊ฐ€ ์ธ์ˆ˜ ์—†์ด docker build . ๋งŒ ์‹คํ–‰ํ•œ ๋‹ค์Œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๋•Œ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋˜๋Š” Dockerfile ์ž‘์„ฑ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š”/์›ํ•˜๋Š” ๋ฐฉ๋ฒ•. "--no-cache" ์ธ์ˆ˜์™€ ๊ทธ ์ค‘์š”์„ฑ์„ ์–ธ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ํŠœํ† ๋ฆฌ์–ผ๊ณผ docker build ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

+1

+1

docker์˜ ๊ณต์‹ ๋„๊ตฌ bashbrew๋ฅผ ์‚ฌ์šฉ ํ•˜๋ฉด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ "๊ณต์‹์ ์œผ๋กœ ์ง€์›๋˜๋Š”" ๋‹ต๋ณ€์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

+1

+1

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

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

๋‚ด๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๋™์ž‘์€ ๋นŒ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ Dockerfile ๋˜๋Š” CLI์—์„œ ARG์— ํ•ญ์ƒ ์บ์‹ฑ์œผ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์ข…์ข… ๊ทธ๊ฒƒ์ด ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๋ชฉ๋ก์˜ ๋‚ด์šฉ์€ ARG์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋œ ์‹œ์ ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๋ผ์ธ ์ง€์‹œ๋ฌธ์—์„œ CACHE OFF ๋กœ +1 - ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ๊ธฐ๋‹ค๋ ค ์™”์Šต๋‹ˆ๋‹ค.

๋„์ปค ํ—ˆ๋ธŒ/๋„์ปค ํด๋ผ์šฐ๋“œ์—์„œ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ–ˆ์œผ๋ฉฐ ํฐ ๋ ˆ์ด์–ด๋ฅผ ์บ์‹œํ•œ ๋‹ค์Œ dockerfile ๋ ๋ถ€๋ถ„์—์„œ nocache ์—…๋ฐ์ดํŠธ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์—„์ฒญ๋‚œ ์‹œ๊ฐ„๊ณผ ๋นŒ๋“œ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณด๊ณ  ์‹ถ์€ ๋™์ž‘์€ ๋นŒ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ Dockerfile ๋˜๋Š” CLI์—์„œ ARG์— ํ•ญ์ƒ ์บ์‹ฑ์œผ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋น„๋ฐ€๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ์ข…์ข… ๊ทธ๊ฒƒ์ด ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๋ชฉ๋ก์˜ ๋‚ด์šฉ์€ ARG์— ์ „๋‹ฌ๋œ ์ธ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์บ์‹œ๊ฐ€ ๋ฌดํšจํ™”๋œ ์‹œ์ ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

--build-arg PASSWORD=<wrong> ๋Š” --build-arg PASSWORD=<correct> ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์˜ ๋‚ด์šฉ์„ ๋ณด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํšจ๊ณผ๊ฐ€ ์žˆ์„์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋นŒ๋”๋Š” ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„( make DEBUG=1 foo ์™€ make DEBUG=0 foo ๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๊นŒ?)์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •/๋ณ€๊ฒฝ์ด ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ž์ฒด์ ์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์œ ์ผํ•œ ์˜ˆ์™ธ๋Š” xx_PROXY ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์—๋Š” ํ”„๋ก์‹œ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ํ”„๋ก์‹œ๋กœ ์ „ํ™˜ํ•˜๋ฉด ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ์บ์‹ฑ์„ ์œ„ํ•ด ๋ฌด์‹œํ•  ํŠน์ • ํ™˜๊ฒฝ ๋ณ€์ˆ˜(/build arg)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

BuildKit์€ ์ด์ œ RUN --mount=type=secret ๋ฐ RUN --mount=type=ssh ๋Œ€ํ•œ ์‹คํ—˜์  ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„๋ฐ€/์ž๊ฒฉ ์ฆ๋ช…์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋น„๋ฐ€์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์บ์‹œ๋ฅผ ๋ฌดํšจํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ™•์‹คํ•˜์ง€ ์•Š์Œ, ๋นŒ๋“œํ‚ท ๋ฌธ์ œ ์ถ”์ ๊ธฐ(https://github.com/moby/buildkit/issues)์—์„œ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

๋„์ปค ํ—ˆ๋ธŒ/๋„์ปค ํด๋ผ์šฐ๋“œ์—์„œ ์บ์‹œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Docker Hub/Cloud๋Š” ์‹ค์ œ๋กœ ์บ์‹ฑ์„ _์‚ฌ์šฉ_ํ•ฉ๋‹ˆ๊นŒ? ์บ์‹ฑ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์ž„์‹œ ๋นŒ๋“œ ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ).

DockerHub๋Š” ๋นŒ๋“œ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ํ‹ฐ์ผ“ ์ง์ „์— Docker Cloud์—์„œ ์ž๋™ํ™”๋œ ๋นŒ๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์žˆ์—ˆ๊ณ  ๊ธฐ๋ณธ์ ์œผ๋กœ ๊บผ์ ธ ์žˆ์ง€๋งŒ ๊ฐ ๋ถ„๊ธฐ์˜ Autobuild ์Šฌ๋ผ์ด๋” ์˜†์— ํ˜„์žฌ Building Caching ์Šฌ๋ผ์ด๋”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ๋งŽ์ด ์„ ํ˜ธ ์ดˆ๊ธฐ git clone && make build ์บ์‹œ ๋œ ํ›„ ๋ฐ”๋กœ ํ•  ์ˆ˜ NO CACHE A์˜ git pull && make build ๋‹จ๊ณ„๋ฅผ ์ด๋ฏธ ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ค์น˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ›จ์”ฌ ์ž‘์€ ์ฝ”๋“œ ์—…๋ฐ์ดํŠธ + ์ข…์†์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ๋”ฐ๋ผ์„œ ๋นŒ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ง€๊ธˆ ๋‹น์žฅ ์ˆ˜๋ฐฑ MB์˜ ๋ ˆ์ด์–ด๋ฅผ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ๊ต์ฒดํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•ด ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์บ์‹ฑํ•˜๋ฏ€๋กœ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

ํฌ๊ธฐ๋Š” ๋งŽ์€ ํ”„๋กœ์ ํŠธ์— ๋งŽ์€ ์ข…์†์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ + Perl CPAN ๋ชจ๋“ˆ + Python PyPI ๋ชจ๋“ˆ ๋“ฑ

Alpine์„ ์‚ฌ์šฉํ•ด๋„ ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์ข…์†์„ฑ๊ณผ CPAN ๋ฐ PyPI ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋” ์ž‘์€ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋…„ ๋™์•ˆ Alpine์„ ์‚ฌ์šฉํ•ด ์™”์ง€๋งŒ ์ผ๋‹จ ์ข…์†์„ฑ์ด ๋งŽ์œผ๋ฉด ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๋‹ค์‹œ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ด ๋” ์ž‘๊ฒŒ ์‹œ์ž‘ํ•˜๋ฉด ๋งŽ์€ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ + CPAN + PyPI ๋ชจ๋“ˆ์„ ํฌํ•จํ•˜๋Š” ์ด์ „ ๊ณ„์ธต์„ ์บ์‹ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์„ค์น˜๋œ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋“ˆ์„ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ์˜ ๋งˆ์ง€๋ง‰ ๊ณ„์ธต์—์„œ ๊ฑฐ์˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•„์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋‚ด bash-tools์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ

ํ•œ๋™์•ˆ ARG๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(http://dev.im-bot.com/docker-select-caching/๊ณผ ๊ฐ™์€ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์–ป์€ ์•„์ด๋””์–ด).

Dockerfile์—์„œ:

ARG NOCACHE=0

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„์ปค ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

docker build --build-arg NOCACHE=$(date +%s) ...

ํ•˜์ง€๋งŒ Docker Cloud์—์„œ๋Š” ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ ์œ„์˜ epoch์™€ ๊ฐ™์€ ๋™์  ๋‚ด์šฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๋˜๋Š” ์ ์–ด๋„ ๋‚ด๊ฐ€ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์Œ). ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ง€์‹œ๋ฌธ ํ–‰์— ๋Œ€ํ•œ ์บ์‹ฑ์„ ๋ฌดํšจํ™”ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@thaJeztah ์˜ˆ, ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํ–‰๋™์€ ์ž˜๋ชป โ€‹โ€‹์ดํ•ด๋˜๊ฑฐ๋‚˜ ๋‚จ์šฉ๋˜๋ฉด ์‰ฝ๊ฒŒ ๋ถ€์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋งค์šฐ ํ›Œ๋ฅญํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--build-arg PASSWORD=<wrong> ๋Š” --build-arg PASSWORD=<correct> ์™€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŒจํ‚ค์ง€ ๋ชฉ๋ก์˜ ๋‚ด์šฉ์„ ๋ณด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์˜ˆ, docker build --force-cache-build-arg SECRET=supersecret ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ทธ๋ฆฌ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฝค ํˆฌ๋ฐ•ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋” ๋‚˜์€ ๊ฒƒ์„ ์ƒ๊ฐํ•ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

@HariSekhon ๋‹น์‹ ์˜ ์œ ์Šค ์ผ€์ด์Šค๋Š” ์‹ค์ œ๋กœ ๋‚˜์™€ ๋ฐ˜๋Œ€์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ๋งž์Šต๋‹ˆ๊นŒ? ๋‹น์‹ ์€ ์„ ํƒ์ ์œผ๋กœ ํž˜์ด ์บ์‹œ๋ฅผ ๊ณต๊ฒฉํ•˜๊ธฐ๋ณด๋‹ค๋Š”, ์„ ํƒ์ ์œผ๋กœ ํž˜ ๋ฏธ์Šค์— ์บ์‹œ ์‹ถ์–ด?

์ด๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ADD http://date.jsontest.com/ /tmp/bustcache

ํ•˜์ง€๋งŒ ๊ทธ ์‚ฌ์ดํŠธ๋Š” ์ง€๊ธˆ ๋‹ค์šด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

ADD http://api.geonames.org/timezoneJSON?formatted=true&lat=47.01&lng=10.2&username=demo&style=full /tmp/bustcache

@itdependsnetworks

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

๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ๊ณ  ์œ ์‚ฌํ•œ ๋‹ค๋ฅธ ํŠน์ˆ˜ ํŒŒ์ผ์ด ๋งค๋ฒˆ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

COPY /dev/random ...

๊ทธ๋Ÿฌ๋‚˜ RUN ls -l -R /etc ๊ฐ€ ๊ทธ๋Ÿฌํ•œ ํŒŒ์ผ์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํ‘œ์‹œํ–ˆ์ง€๋งŒ ํ•ญ์ƒ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Œ์—๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํŠน์ˆ˜ ํŒŒ์ผ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ณดํ˜ธ ์žฅ์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ DockerHub/Docker Cloud์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „ ๋นŒ๋“œ ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ ์งœ ์Šคํƒฌํ”„๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์บ์‹œ ๋ฒ„์ŠคํŠธํ•˜๋ ค๋Š” ๋ ˆ์ด์–ด ๋ฐ”๋กœ ์•ž์˜ ์ด๋ฏธ์ง€์— ๋ณต์‚ฌํ•˜์—ฌ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์— ํ‘œ์‹œ๋œ ๊ฒƒ์ด ๋กœ์ปฌ ๋„์ปค ๋ฐ ํด๋ผ์šฐ๋“œ ๋นŒ๋“œ์— ๋” ์ด์‹์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ์บ์‹œ ๋ฌดํšจํ™” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์œ„ํ•ด ๋” ์•ˆ์ •์ ์ธ ๋‚ ์งœ ์ธ์‡„ ์‚ฌ์ดํŠธ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๋ฐ๋ชจ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ํ• ๋‹น๋Ÿ‰์ด ์žˆ์œผ๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๊ณ  ๋นŒ๋“œ๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ๊ฒƒ์€ ํ•ญ์ƒ ์ผ์ผ ํ• ๋‹น๋Ÿ‰์„ ๊นจ๊ณ  ๋‘ ๋ฒˆ์งธ ๊ฒƒ์€ ์ด์ œ์ด ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

{"status": {
  "message": "the daily limit of 20000 credits for demo has been exceeded. Please use an application specific account. Do not use the demo account for your application.",
  "value": 18
}}

๋ชจ๋“  ๋นŒ๋“œ์—์„œ ์‹คํ–‰๋˜๊ณ  ์ถœ๋ ฅ์ด ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ํ›„์† ๋ ˆ์ด์–ด๊ฐ€ ๋‹ค์‹œ ๋นŒ๋“œ๋˜๋Š” ๋„์ปค ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ง€์นจ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

FROM something
... 
CACHE_BUST git ls-remote my-git-repo HEAD
RUN git clone --depth=1 my-git-repo ...
...
CMD ["my-cmd"]

์œ„์˜ CACHE_BUST ๋ช…๋ น์— ์žˆ๋Š” ๋ช…๋ น์€ ์ง€์ •๋œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ HEAD์—์„œ SHA๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด dockerfile์ด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ณต์ œํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ARG SHA_TO_BUILD
RUN echo SHA_TO_BUILD
RUN git clone ...
...everything else reliant on that clone
$> ./build-my-image.sh $(get-latest-sha)

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

ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ธ๋ฐ ์™œ ์•„์ง ๋ณด๋ฅ˜ ์ค‘์ž…๋‹ˆ๊นŒ?

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

์˜ˆ๋ฅผ ๋“ค์–ด COPY file.txt . ์žˆ๊ณ  file.txt ์ˆ˜์ •ํ•˜๋ฉด Docker๋Š” ์บ์‹œ๋œ ์ด์ „ ๋ฒ„์ „์„ ๊ณ„์† ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Docker๊ฐ€ ๋ณต์‚ฌํ•œ ํŒŒ์ผ์˜ ์ฒดํฌ์„ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค์Œ ๋ฒˆ์— ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์บ์‹œ๋œ ๊ณ„์ธต์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹น์žฅ์€ --no-cache ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ํ•„์š”ํ•œ ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค(์‹œ๊ฐ„๊ณผ ๋Œ€์—ญํญ ๋‚ญ๋น„).

@brennancheung ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค.

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

Am Mi., 20. Mรคrz 2019 um 00:10 Uhr schrieb Tibor Vass <
์•Œ๋ฆผ@github.com>:

@brennancheung https://github.com/brennancheung ๊ทธ๋ ‡๋‹ค๋ฉด,
๊ทธ๊ฒƒ์€ ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋‹จ๊ณ„๊ฐ€ ์žˆ๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ฌ์‹ญ์‹œ์˜ค.

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

--
ํ‹ฐ์•„๊ณ  ๋กœ๋“œ๋ฆฌ๊ฒŒ์Šค

์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค https://github.com/moby/moby/issues/1996#issuecomment -185872769

๊ทธ๋Ÿฌ๋‚˜ ์บ์‹œ์˜ ์ •์˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒ˜์Œ ์‚ฌ์šฉ ์‹œ/ํ›„ ์บ์‹œ์—๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

https://docs.docker.com/engine/reference/builder/#impact -on-build-caching

Dockerfile์ด ์ด์ „ ๋นŒ๋“œ์™€ ๊ฐ’์ด ๋‹ค๋ฅธ ARG ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ •์˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ฒ˜์Œ ์‚ฌ์šฉํ•  ๋•Œ "์บ์‹œ ๋ˆ„๋ฝ"์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@samstav "์ฒ˜์Œ ์‚ฌ์šฉ" RUN 1 RUN ARG ( ARG ๊ฐ€ ๋นŒ๋“œ ๋‹จ๊ณ„์— ์žˆ๋Š” ๊ฒฝ์šฐ).

ARG FOO=bar

FROM something
RUN echo "this won't be affected if the value of FOO changes"
ARG FOO
RUN echo "this step will be executed again if the value of FOO changes"

FROM something-else
RUN echo "this won't be affected because this stage doesn't use the FOO build-arg"

์œ„์˜ ๋‚ด์šฉ์€ ์ฐจ์„ธ๋Œ€ ๋นŒ๋”(BuildKit)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์•ฝ๊ฐ„ ๋‹ฌ๋ผ์ง€๋ฏ€๋กœ DOCKER_BUILDKIT=1 ํ™œ์„ฑํ™”ํ•˜๋ฉด BuildKit์ด ์ตœ์ข… ๋‹จ๊ณ„์— ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(๋˜๋Š” ๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค) ์™„์ „ํžˆ ์บ์‹œ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ)

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