๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

๊ฐœ๋ฐœ์„ ํ•˜๋Š”๋ฐ ์žˆ์–ด ์ปจํ…Œ์ด๋„ˆ๋Š” ๋” ์ด์ƒ ๋น ์งˆ ์ˆ˜ ์—†์„ ๋งŒํผ ์ค‘์š”ํ•œ ๊ฐœ๋…์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Docker ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋งค๋‹ˆ์ง€ ํˆด ์ค‘ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ฃ .

 

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ด๋ฏธ์ง€๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋ณดํŽธ์ ์œผ๋กœ Docker ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Dockerfile ์— ์ž‘์„ฑ ํ•œ ํ›„ Docker ์ปค๋งจ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ  ์•„์ฃผ ์‰ฝ๊ฒŒ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œ ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ๋ฌผ๋ก  ๊ฒฝ๋Ÿ‰ํ™”๋„ ์ค‘์š”ํ•˜์ง€๋งŒ, ๊ทธ ๋ชป์ง€ ์•Š๊ฒŒ ์ด๋ฏธ์ง€ ๋ณด์•ˆ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

 

--previliged ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๊ฑธ ์ง€์–‘ํ•˜๊ณ , Dockerfile ์— ์ง์ ‘์ ์œผ๋กœ crendentials ๊ด€๋ จํ•œ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€(COPY) ํ•˜๋Š” ๊ฑธ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

trivy ๋ฅผ ์ด์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ์ด๋ฏธ์ง€์˜ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์™œ Dockerfile ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ crendentials ์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€(COPY) ํ•˜๋ฉด ์•ˆ๋˜๋Š”์ง€ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

๋ ›์ธ ๋‘๋”์ฝ”๋“œ~

 

 

OverlayFS


 

๋“ค์–ด๊ฐ€๊ธฐ ์•ž์„œ ๋จผ์ € ์ปจํ…Œ์ด๋„ˆ์˜ ํ•ต์‹ฌ ๊ตฌ์กฐ์ธ OverlayFS ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

overlayFS

 

ํฌ๊ฒŒ lower dir, upper dir, merged dir ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

lower dir ์€ read-only ๋กœ ๋งˆ์šดํŠธ๋˜๋Š” ๋ ˆ์ด์–ด๋“ค์ด ์กด์žฌํ•˜๊ณ , upper dir ์€ read-write ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ ˆ์ด์–ด๋กœ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ๋Š” ๋ชจ๋‘ upper dir ์—์„œ ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  upper dir ์—์„œ์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด lower dir ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ, ์ด๋Ÿฐ์‹์œผ๋กœ ๋ ˆ์ด์–ด๊ฐ€ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์Œ“์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ๋ ˆ์ด์–ด๋Š” ํ•˜๋‚˜๋กœ merged ๋˜์–ด merged dir ์— ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

docker run ์„ ํ†ตํ•ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ชจ๋“  ๋ ˆ์ด์–ด๋Š” lower dir ์ด๊ณ , docker exec ๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰๋˜๋Š” ํŒŒ์ผ ์ƒ์„ฑ/์ˆ˜์ •/์‚ญ์ œ๋Š” upper dir ์— ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ OverlayFS ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

Container ๋‚ด credentials


 

์•ž์„œ OverlayFS ๋ฅผ ์‚ดํŽด๋ดค๋Š”๋ฐ ์–ด๋Š ์ •๋„ ๋ˆˆ์น˜๋ฅผ ์ฑ„์…จ์„ ๊ฒ๋‹ˆ๋‹ค. Dockerfile ๋‚ด credentials ํŒŒ์ผ์„ ์ถ”๊ฐ€(COPY) ํ•˜๋Š” ์ž‘์—…๋„ ์ด๋ฏธ์ง€ ๋‚ด์—์„œ ๋ ˆ์ด์–ด๋กœ ์กด์žฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋ ˆ์ด์–ด๋„ ๊ฒฐ๊ตญ ํด๋”๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— rm -rf ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง€์šฐ๋”๋ผ๋„ COPY ๋ ˆ์ด์–ด์—๋Š” ์—ฌ์ „ํžˆ credentials ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒƒ์ด๊ณ , ๋ ˆ์ด์–ด ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ง์ ‘ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ข€ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ฃ !

 

alpine ๊ธฐ๋ฐ˜์˜ ๊ฐ„๋‹จํ•œ Dockerfile ์ž…๋‹ˆ๋‹ค.

FROM alpine

COPY credentials.txt /credentials.txt

...

#-- credentials.txt ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€์ง€๊ณ  ์–ด๋– ํ•œ ์ž‘์—…์„ ์ง„ํ–‰ํ•œ ํ›„,

...

RUN rm -rf /credentials.txt

ENTRYPOINT ["tail", "-f", "/dev/null"]

 

 

์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ›„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ docker build -t test .

$ docker run --rm -d --name test test

 

 

๋นŒ๋“œํ•œ ์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ–ˆ๊ณ , credentails.txt ๊ฐ€ ์ง€์›Œ์ง„ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

credentails.txt ์€ ์ฐพ์•„๋ณผ ์ˆ˜ ์—†์Œ

 

์ด๋ ‡๊ฒŒ๋งŒ ๋ณด๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š์ฃ .

 

์œ„์—์„œ credentials.txt ์— ์–ด๋– ํ•œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ๋ง์”€์„ ์•ˆ๋“œ๋ ธ๋Š”๋ฐ, ํ•œ๋ฒˆ ์–ด๋–ค ๋ฐ์ดํ„ฐ์˜€๋Š”์ง€ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

์šฐ์„  ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ ˆ์ด์–ด๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด์ฃ .

$ docker save test -o layers.tar

 

์ดํ›„ layers.tar ์˜ ์••์ถ•์„ ํ’€์–ด์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ ˆ์ด์–ด๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

layers

 

์šฐ์„  ๊ฐ€์žฅ ์ตœ์ƒ์œ„์— ์žˆ๋Š” b96b*.json ์™€ manifest.json ์„ ์‚ดํŽด๋ณด๋ฉด ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

empty_layer ๊ฐ€ false ์ด ๋ ˆ์ด์–ด๋“ค์€ ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๋ ˆ์ด์–ด์ด๋ฉฐ lower dir ์— ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

empty_layer: true ๋Š” ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๋ ˆ์ด์–ด๊ฐ€ ์—†๋‹ค๋Š” ๊ฑธ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๋‘๋ฒˆ์งธ ๋ ˆ์ด์–ด์—์„œ credentials ๋ฅผ COPY ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋‘๋ฒˆ์งธ ๋ ˆ์ด์–ด์˜ ์ด๋ฆ„์€ ์•„๋ž˜ ์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5a3762b16a0553fbd33c44434322b4e201f1e916cc6b134ce6aa5467717c59ab

 

ํ•ด๋‹น ๋ ˆ์ด์–ด(ํด๋”)๋กœ ์ด๋™ํ•œ ํ›„ layer.tar ์˜ ์••์ถ•์„ ํ’€์–ด์ฃผ๋ฉด credentials.txt ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๊ณ ,

credentials.txt ๊ฐ€ ๋ ˆ์ด์–ด์— ์กด์žฌ

 

์‹ค์ œ๋กœ ํด๋ฆญํ•ด๋ฉด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ

 

์ด๋ ‡๋“ฏ ์ด๋ฏธ์ง€ ๋นŒ๋“œ๋Š” ์–ธ๋œป๋ณด๋ฉด ์•ˆ์ „ํ•ด ๋ณด์ด์ง€๋งŒ ๋ ˆ์ด์–ด์— ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ์ง€ ๋นŒ๋“œ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์œ„ํ—˜ํ•œ ํ–‰์œ„์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ถ”๊ฐ€์ ์œผ๋กœ rm -rf ๋ฅผ ์‹คํ–‰ํ•œ ๋ ˆ์ด์–ด๋ฅผ ์‚ดํŽด๋ณด๋ฉด credentials.txt ์•ž์— .wh ๊ฐ€ ๋ถ™์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์„ ํ–‰ํ•œ ๋ ˆ์ด์–ด์—์„œ ์‚ญ์ œํ•œ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋Š” ์•ž์— .wh ๋ฅผ ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค.

.wh ๊ฐ€ ๋ถ™์€ credentials.txt

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€!

๋ฐ˜์‘ํ˜•
profile on loading

Loading...