Container

๐Ÿ”ญ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ณด์•ˆ์„ ์œ„ํ•œ Dockerfile ์ž‘์„ฑ ํŒ 5๊ฐ€์ง€

๋”์šฑ ์•ˆ์ „ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” Dockerfile ์ž‘์„ฑ 5๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

2024.06.17 | ์กฐํšŒ 211 |
0
|

DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€

DevOps, ํด๋ผ์šฐ๋“œ, IT ๊ธฐ์ˆ  ๊ด€๋ จ ์ตœ์‹  ์†Œ์‹๊ณผ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ฃผ 1ํšŒ ์ด๋ฉ”์ผ๋กœ ์ „ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค๐Ÿ˜บ

์•ˆ๋…•ํ•˜์„ธ์š” ๊ตฌ๋…์ž๋‹˜, DevOps ์†Œ์‹๊ณผ ๊ธฐ์ˆ  ์ง€์‹์„ ์ •๋ฆฌํ•ด์„œ ๊ณต์œ ํ•ด๋“œ๋ฆฌ๋Š” DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€์ž…๋‹ˆ๋‹ค.

Docker ์ด๋ฏธ์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์„œ ์ด๋ฏธ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”.

์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€ ๋งŒ๋“ค์–ด๋‘” Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ง์ ‘ Dockerfile์„ ์ž‘์„ฑํ•ด์„œ Docker ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ์ฃ .

๋”์šฑ ์•ˆ์ „ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” Dockerfile ์ž‘์„ฑ ํŒ์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค, ์•Œ๊ณ  ๊ณ„์…จ๋‚˜์š”?

โš ๏ธDockerfile์„ ์ž‘์„ฑํ•  ๋•Œ ๋ณด์•ˆ์— ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋Š” ์ด์œ 

Dockerfile์„ ์ž‘์„ฑํ•  ๋• ๋ณด์•ˆ์„ ๊ณ ๋ คํ•ด์•ผ ์นจํ•ด ์‚ฌ๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Dockerfile์„ ์ž‘์„ฑํ•  ๋• ๋ณด์•ˆ์„ ๊ณ ๋ คํ•ด์•ผ ์นจํ•ด ์‚ฌ๊ณ ๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” Dockerfile์„ ์ž‘์„ฑํ•  ๋•Œ๋ถ€ํ„ฐ ๋ณด์•ˆ์— ์‹ ๊ฒฝ์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”’๋”์šฑ ์•ˆ์ „ํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” Dockerfile ์ž‘์„ฑ ํŒ 5๊ฐ€์ง€

๊ทธ๋ ‡๋‹ค๋ฉด Dockerfile์„ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ• ๊นŒ์š”? ์—ฌ๊ธฐ ๋ณด์•ˆ์— ๊ฐ•ํ•œ Dockerfile ์ž‘์„ฑ ํŒ 5๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Multi-Stage ๋ฐฉ์‹์œผ๋กœ ๋นŒ๋“œ

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

ํ•„์š”์—†๋Š” ํŒจํ‚ค์ง€ ์ œ๊ฑฐ

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

Root๊ฐ€ ์•„๋‹Œ ๋ณ„๋„์˜ ์‚ฌ์šฉ์ž๋ฅผ ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ

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

Container ๋‚ด ๋ฏผ๊ฐํ•œ ํŒŒ์ผ๋“ค์€ Read Only๋กœ

  • ๋ฐฐํฌ ์ดํ›„ Docker Container ๋‚ด์—์„œ ์ถ”ํ›„ ์ˆ˜์ •์ด ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํŒŒ์ผ๋“ค์„ 'Read Only'๋กœ ์„ค์ •ํ•˜๋ฉด ๋ณด์•ˆ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Shell ์ ‘๊ทผ ์ œ๊ฑฐ

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

 

๐Ÿ”Ž์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋˜๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

์ง€๊ธˆ๊นŒ์ง€ Dockerfile์„ ์ž‘์„ฑํ•  ๋•Œ ๋ณด์•ˆ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋Š”๋ฐ์š”. ๋งŒ์•ฝ Docker ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ, ์ด๋ฏธ ๋ˆ„๊ตฐ๊ฐ€ ์ œ์ž‘ํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ทธ ์ด๋ฏธ์ง€๊ฐ€ ์•ˆ์ „ํ•œ์ง€๋Š” ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์„๊นŒ์š”?

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ ์Šค์บ๋‹์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ ์Šค์บ๋‹ ํˆด๋กœ๋Š” Trivy์™€ Clair๊ฐ€ ์žˆ๋Š”๋ฐ์š”.

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ณด์•ˆ ์Šค์บ๋‹์— ๋Œ€ํ•ด์„œ๋Š” ์ง€๋‚œ ์†Œ์‹์ง€์—์„œ ๋‹ค๋ฃฌ ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜น์‹œ ๊ด€์‹ฌ ์žˆ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ์—์„œ ํ™•์ธํ•ด๋ณด์„ธ์š”.๐Ÿ˜Š

 

๐Ÿ”ญ๋งˆ์น˜๋ฉฐ...

์˜ค๋Š˜์€ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋ณด์•ˆ์„ ์œ„ํ•œ Dockerfile ์ž‘์„ฑ ํŒ 5๊ฐ€์ง€์™€ ์ปจํ…Œ์ด๋„ˆ ๋ณด์•ˆ ์Šค์บ๋‹์— ๋Œ€ํ•ด ๋‹ค๋ค„๋ดค๋Š”๋ฐ์š”. 

ํ˜น์‹œ ์ด๋ฒˆ ๋‚ด์šฉ ๊ด€๋ จํ•ด์„œ ๋” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋ฉ”์ผ๋ฆฌ ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.๐Ÿ˜€

๊ทธ๋Ÿผ, ๋‹ค์Œ ์†Œ์‹์ง€์—์„œ ๋ณด๋‹ค ์•Œ์ฐจ๊ณ  ํฅ๋ฏธ๋กœ์šด ๋‚ด์šฉ์œผ๋กœ ์ฐพ์•„๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๊ตฌ๋…์ž๋‹˜ ๐Ÿ˜บ

 

๐Ÿ”—References

 

 

๋‹ค๊ฐ€์˜ฌ ๋‰ด์Šค๋ ˆํ„ฐ๊ฐ€ ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”?

์ง€๊ธˆ ๊ตฌ๋…ํ•ด์„œ ์ƒˆ๋กœ์šด ๋ ˆํ„ฐ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”

์ด๋ฒˆ ๋‰ด์Šค๋ ˆํ„ฐ ์–ด๋– ์…จ๋‚˜์š”?

DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€ ๋‹˜์—๊ฒŒ โ˜•๏ธ ์ปคํ”ผ์™€ โœ‰๏ธ ์ชฝ์ง€๋ฅผ ๋ณด๋‚ด๋ณด์„ธ์š”!

๋Œ“๊ธ€

์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

ํ™•์ธ
์˜๊ฒฌ์ด ์žˆ์œผ์‹ ๊ฐ€์š”? ์ œ์ผ ๋จผ์ € ๋Œ“๊ธ€์„ ๋‹ฌ์•„๋ณด์„ธ์š” !
ยฉ 2024 DevOps ์—ฌํ–‰์„ ์œ„ํ•œ ์†Œ์‹์ง€

DevOps, ํด๋ผ์šฐ๋“œ, IT ๊ธฐ์ˆ  ๊ด€๋ จ ์ตœ์‹  ์†Œ์‹๊ณผ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•ด์„œ ์ฃผ 1ํšŒ ์ด๋ฉ”์ผ๋กœ ์ „ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค๐Ÿ˜บ

๋‰ด์Šค๋ ˆํ„ฐ ๋ฌธ์˜eduukulelekim@gmail.com

์ž์ฃผ ๋ฌป๋Š” ์งˆ๋ฌธ ์„œ๋น„์Šค ์†Œ๊ฐœ์„œ ์˜ค๋ฅ˜ ๋ฐ ๊ธฐ๋Šฅ ๊ด€๋ จ ์ œ๋ณด

์„œ๋น„์Šค ์ด์šฉ ๋ฌธ์˜admin@team.maily.so

๋ฉ”์ผ๋ฆฌ ์‚ฌ์—…์ž ์ •๋ณด

๋ฉ”์ผ๋ฆฌ (๋Œ€ํ‘œ์ž: ์ดํ•œ๊ฒฐ) | ์‚ฌ์—…์ž๋ฒˆํ˜ธ: 717-47-00705 | ์„œ์šธ ์„œ์ดˆ๊ตฌ ๊ฐ•๋‚จ๋Œ€๋กœ53๊ธธ 8, 8์ธต 11-7ํ˜ธ

์ด์šฉ์•ฝ๊ด€ | ๊ฐœ์ธ์ •๋ณด์ฒ˜๋ฆฌ๋ฐฉ์นจ | ์ •๊ธฐ๊ฒฐ์ œ ์ด์šฉ์•ฝ๊ด€