์ฃผ๊ฐ„ ์†Œ์‹์ง€

๐Ÿ”ญDocker ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ ?

Docker ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ Docker ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Docker In Docker ๊ฐœ๋…์„ ์„ค๋ช…ํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.

2024.06.10 | ์กฐํšŒ 493 |
0
|

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

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

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

Docker๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Container๋ผ๋Š” ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ํˆด์ธ๋ฐ์š”. ๋…๋ฆฝ๋œ ํ™˜๊ฒฝ์ด๋ผ๊ณ  ํ–ˆ์ง€๋งŒ, ํ˜ธ์ŠคํŠธ ์•ˆ์— ๊ฑฐ์˜ ์ƒˆ๋กœ์šด Linux ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•œ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›๊ธฐ๋„ ํ•˜์ฃ .

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ์งˆ๋ฌธ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker Container ์•ˆ์— Docker๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€ ์•Š์„๊นŒ?

์ด๋ ‡๊ฒŒ ๋‚˜์˜จ ์ปจ์…‰์ด ๋ฐ”๋กœ, Docker In Docker(DID)์ž…๋‹ˆ๋‹ค.

 

๐Ÿ“œ์šฐ๋ฆฌ๊ฐ€ Docker๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” docker.sock ํŒŒ์ผ

์šฐ๋ฆฌ๊ฐ€ Docker๋ฅผ ์„ค์น˜ํ•  ๋•Œ Docker daemon๊ณผ Docker CLI๊ฐ€ ํ•จ๊ป˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ docker build, docker run ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด Docker CLI๊ฐ€ ๋ช…๋ น์–ด๋ฅผ Docker daemon์—๊ฒŒ ์ „๋‹ฌํ•ด์„œ ํ•ด๋‹น ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๋Š”๋ฐ์š”.

Docker CLI๊ฐ€ Docker daemon์—๊ฒŒ ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ทธ ํ†ต๋กœ ์—ญํ• ์„ ํ•˜๋Š” ํŒŒ์ผ์ด ํ•˜๋‚˜ ์žˆ์œผ๋‹ˆ, ๋ฐ”๋กœ docker.sock์ž…๋‹ˆ๋‹ค.

Docker CLI๊ฐ€ Docker daemon์— ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
Docker CLI๊ฐ€ Docker daemon์— ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

Docker์™€ ํ•จ๊ป˜ ์„ค์น˜๋˜๋Š” docker.sock ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ์œ„์น˜๋Š” /var/run/docker.sock์ธ๋ฐ์š”. Docker CLI์—์„œ๋„ ํ•ด๋‹น ์œ„์น˜์— docker.sock ํŒŒ์ผ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์„ค์ •์ด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ง€์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ DID๋ผ๋Š” ๊ฐœ๋…์„ ์„ค๋ช…๋“œ๋ฆฌ๊ธฐ ์ „์— docker.socket์ด๋ผ๋Š” ํŒŒ์ผ์„ ๋จผ์ € ์‚ดํŽด๋ณธ ๊ฒƒ์€, Docker In Docker(DID) ๊ตฌํ˜„์„ ์œ„ํ•ด docker.socket ํŒŒ์ผ์„ ํ™œ์šฉํ•  ์˜ˆ์ •์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ Docker CLI๊ฐ€ Docker daemon์— Docker ๋ช…๋ น์–ด๋ฅผ ์ „๋‹ฌํ•  ๋•Œ docker.sock ํŒŒ์ผ์„ ์ด์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์—ˆ์ฃ . ์ด๋Š” ๊ณง ์™ธ๋ถ€ Docker CLI๊ฐ€ docker.socket์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, ์ด์™€ ์—ฐ๊ฒฐ๋œ Docker daemon์— ๋ช…๋ น์–ด๋ฅผ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ‹Docker In Docker(DID)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ๋•Œ DID๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํŽธํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ์š”. ์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด Jenkins๊ฐ€ Docker Container๋กœ ๋™์ž‘ํ•˜๋Š” ์ƒํ™ฉ์—์„œ Jenkins ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑ ์ค‘์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊ฒŒ์š”.

ํŒŒ์ดํ”„๋ผ์ธ์ด ๋™์ž‘ํ•  ๋•Œ ํŠน์ • ์Šคํ…Œ์ด์ง€์—์„œ Docker Image๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹คํ–‰ํ•˜๋Š” Jenkins๊ฐ€ Docker Container ์ƒ์—์„œ ๋™์ž‘ ์ค‘์ธ ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ํ•ด๋‹น Container ๋‚ด๋ถ€์—์„œ Docker Build ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ์œ„์—์„œ ์„ค๋ช…ํ•œ DID ์ปจ์…‰์„ ์ด์šฉํ•œ๋‹ค๋ฉด, Container ๋‚ด๋ถ€์— Docker CLI๋ฅผ ์„ค์น˜ ํ›„, ์ด๋ฏธ ํ˜ธ์ŠคํŠธ์— ์„ค์น˜๋œ docker.sock์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ŠคํŠธ์˜ Docker daemon์œผ๋กœ Docker Build ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ–ฅ๏ธDocker In Docker(DID)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

DID ์ปจ์…‰์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ํ•ต์‹ฌ์€, Docker ๋ช…๋ น์–ด ์‹คํ–‰์ด ํ•„์š”ํ•œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์•„๋ž˜ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • docker run -v /var/run/docker.sock:/var/run/docker.sock ...

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๊ฐ€์ •ํ–ˆ๋˜ ์ƒํ™ฉ์˜ ๊ฒฝ์šฐ, Jenkins๊ฐ€ ์‹คํ–‰๋˜๋Š” Docker Container๊ฐ€ ์—ฌ๊ธฐ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

์ด Container๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ธฐ์กด docker run ๋ช…๋ น์–ด์— ์œ„์™€ ๊ฐ™์ด ํ˜ธ์ŠคํŠธ์˜ docker.sock ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ Container ๋‚ด๋ถ€์˜ ๋™์ผํ•œ ๊ฒฝ๋กœ์— ๋ณต์‚ฌํ•˜๋Š” -v ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ์š”.

์—ฌ๊ธฐ์— ์ถ”๊ฐ€๋กœ ํ•ด๋‹น Container ๋‚ด๋ถ€์— Docker CLI๋ฅผ ์„ค์น˜ํ•˜๋ฉด, Container ๋‚ด ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ docker ๋ช…๋ น์–ด๋ฅผ ๋ฐ”๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

โš ๏ธDocker In Docker(DID) ์‚ฌ์šฉ ์‹œ ๊ณ ๋ฏผํ•ด์•ผ ํ•  ์ 

์œ„์—์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ, DID๋Š” Container ๋‚ด๋ถ€์˜ Docker CLI๊ฐ€ ํ˜ธ์ŠคํŠธ์— ์„ค์น˜๋œ Docker daemon์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, Container ์•ˆ์œผ๋กœ ์ ‘๊ทผ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ˜ธ์ŠคํŠธ์˜ Docker daemon์„ ์ œํ•œ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด์ฃ .

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

์ด์™€ ๊ด€๋ จํ•ด์„œ Container ๋Ÿฐํƒ€์ž„ ๋ณด์•ˆ์— ๋Œ€ํ•ด ์ง€๋‚œ ์†Œ์‹์ง€์—์„œ ๋‹ค๋ฃฌ ์ ์ด ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š” ๐Ÿ˜Š

 

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

์˜ค๋Š˜์€ Docker Container ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ Docker daemon์„ ๋™์ž‘์‹œํ‚ค๋Š” DID ์ปจ์…‰์— ๋Œ€ํ•ด ์•Œ์•„๋ดค๋Š”๋ฐ์š”.

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

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

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

 

๐Ÿ”—References

 

 

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

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

โœ‰๏ธ

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

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

๋Œ“๊ธ€

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

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

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

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

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

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

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

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

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