CI ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— Docker-in-Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

CI ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— Docker-in-Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

Docker-in-Docker๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ ์ž์ฒด ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€์ƒํ™”๋œ Docker ๋ฐ๋ชฌ ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค. Docker-in-Docker๋ฅผ ๋งŒ๋“œ๋Š” ์ฃผ์š” ๋ชฉ์ ์€ Docker ์ž์ฒด ๊ฐœ๋ฐœ์„ ๋•๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Jenkins CI๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด๊ฒƒ์ด ์ •์ƒ์ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ Jenkins CI ์ปจํ…Œ์ด๋„ˆ์— Docker๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํ”ผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์‚ฌํ•ญ ์—†์ด ์ตœ์ข… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ๊ธฐ์‚ฌ์˜ ๋งˆ์ง€๋ง‰ ์„น์…˜์ธ "๋ฌธ์ œ ํ•ด๊ฒฐ"์„ ์ฝ์–ด ๋ณด์‹ญ์‹œ์˜ค.

CI ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— Docker-in-Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

Docker-in-Docker: "์ข‹์Œ"

XNUMX๋…„์—ฌ ์ „์— ์ €๋Š” Docker๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ โ€“ํŠน๊ถŒ์„ ๊ฐ–๊ณ  ๊ธ€์„ ์ผ๋‹ค DIND์˜ ์ฒซ ๋ฒˆ์งธ ๋ฒ„์ „. ๋ชฉํ‘œ๋Š” ํ•ต์‹ฌ ํŒ€์ด Docker๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๋„๋ก ๋•๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. Docker-in-Docker ์ด์ „์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

  • ํ•ดํ‚น ํ•ดํ‚น;
  • ์ง“๋‹ค;
  • ์‹คํ–‰ ์ค‘์ธ Docker ๋ฐ๋ชฌ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด Docker ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ;
  • ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•˜์‹ญ์‹œ์˜ค.

์•„๋ฆ„๋‹ต๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ(์ฆ‰, ์ปจํ…Œ์ด๋„ˆ ๋‚ด)๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋”์šฑ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

  • ํ•ดํ‚น ํ•ดํ‚น;
  • Docker์˜ ์ž‘๋™ ๋ฒ„์ „์ด ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.
  • ๊ธฐ์กด Docker๋กœ ์ƒˆ Docker๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • Docker ๋ฐ๋ชฌ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด Docker ๋ฐ๋ชฌ์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.
  • ์‹œํ—˜;
  • ์ƒˆ Docker ๋ฐ๋ชฌ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต.

Docker-in-Docker์˜ ์ถœํ˜„์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋”์šฑ ๋‹จ์ˆœํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ํ•ดํ‚น ํ•ดํ‚น;
  • ํ•œ ๋‹จ๊ณ„์—์„œ ์กฐ๋ฆฝ + ์ถœ์‹œ;
  • ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ฐฉ๋ฒ•์ด ํ›จ์”ฌ ๋‚ซ์ง€ ์•Š๋‚˜์š”?

CI ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— Docker-in-Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.

Docker-in-Docker: "๋‚˜์จ"

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์ค‘์˜ ๋ฏฟ์Œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ Docker-in-Docker๋Š” 100% ์Šคํƒ€, ์กฐ๋ž‘๋ง, ์œ ๋‹ˆ์ฝ˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” AppArmor ๋ฐ SELinux์™€ ๊ฐ™์€ LSM(Linux ๋ณด์•ˆ ๋ชจ๋“ˆ)๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ "๋‚ด๋ถ€ Docker"๋Š” "์™ธ๋ถ€ Docker"์™€ ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜ ํ˜ผ๋™ํ•˜๋Š” ๋ณด์•ˆ ํ”„๋กœํ•„์„ ์ ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” โ€“privileged ํ”Œ๋ž˜๊ทธ์˜ ์›๋ž˜ ๊ตฌํ˜„์„ ๋ณ‘ํ•ฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ•ด๊ฒฐํ•˜๊ธฐ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๊ณ  ๋ชจ๋“  ํ…Œ์ŠคํŠธ๋Š” Debian ์‹œ์Šคํ…œ๊ณผ Ubuntu ํ…Œ์ŠคํŠธ VM์—์„œ ํ†ต๊ณผํ–ˆ์ง€๋งŒ Michael Crosby์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•˜๊ณ  ํ™”์ƒ์„ ์ž…์—ˆ์Šต๋‹ˆ๋‹ค(์ œ๊ฐ€ ๊ธฐ์–ตํ•˜๊ธฐ๋กœ ๊ทธ๋Š” Fedora๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค). ๋ฌธ์ œ์˜ ์ •ํ™•ํ•œ ์›์ธ์€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์ง€๋งŒ Mike๊ฐ€ SELINUX=enforce(์ €๋Š” AppArmor๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค)๋กœ ์ž‘์—…ํ•˜๋Š” ํ˜„๋ช…ํ•œ ์‚ฌ๋žŒ์ด๊ณ  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์—์„œ SELinux ํ”„๋กœํ•„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Docker-in-Docker: "์•…"

๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” Docker ์Šคํ† ๋ฆฌ์ง€ ๋“œ๋ผ์ด๋ฒ„์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Docker-in-Docker๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์™ธ๋ถ€ Docker๋Š” ์ผ๋ฐ˜ ํŒŒ์ผ ์‹œ์Šคํ…œ(EXT4, BTRFS ๋˜๋Š” ๊ธฐํƒ€ ๋ชจ๋“  ๊ฒƒ) ์œ„์—์„œ ์‹คํ–‰๋˜๊ณ  ๋‚ด๋ถ€ Docker๋Š” ์“ฐ๊ธฐ ์ค‘ ๋ณต์‚ฌ ์‹œ์Šคํ…œ(AUFS, BTRFS, Device Mapper) ์œ„์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋“ฑ). , ์™ธ๋ถ€ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ํ•ญ๋ชฉ์— ๋”ฐ๋ผ). ์ด๋กœ ์ธํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋งŽ์€ ์กฐํ•ฉ์ด ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AUFS ์œ„์—์„œ AUFS๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๋ถ€ Docker์—์„œ AUFS๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด /var/lib/docker ํด๋”๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฉ๋‹ˆ๋‹ค. Docker๋Š” ์—ฌ๋Ÿฌ Docker ํ˜ธ์ถœ์ด ๋™์ผํ•œ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์„œ๋กœ ๋ฐŸ์ง€ ์•Š๋„๋ก Device Mapper ๋Œ€์ƒ ์ด๋ฆ„์— ์ผ๋ถ€ ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์„ค์ •์€ ๋‹ค์Œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ „ํ˜€ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์กฐํ•ญ GitHub์˜ DIND ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.

Docker-in-Docker: ์ƒํ™ฉ์ด ๋”์šฑ ์•…ํ™”๋จ

๋นŒ๋“œ ์บ์‹œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ๋„ ์ƒ๋‹นํžˆ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์ข…์ข… "Docker-in-Docker๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์„ ๋‚ด๋ถ€ Docker๋กœ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  ํ˜ธ์ŠคํŠธ์— ํ˜ธ์ŠคํŒ…๋œ ์ด๋ฏธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?"๋ผ๊ณ  ๋ฌป์Šต๋‹ˆ๋‹ค.

์ผ๋ถ€ ์ง„์ทจ์ ์ธ ์‚ฌ๋žŒ๋“ค์€ ํ˜ธ์ŠคํŠธ์˜ /var/lib/docker๋ฅผ Docker-in-Docker ์ปจํ…Œ์ด๋„ˆ์— ๋ฐ”์ธ๋”ฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ์™€ /var/lib/docker๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

CI ๋˜๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— Docker-in-Docker๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค.
๋ฐ์ดํ„ฐ๋ฅผ ์†์ƒ์‹œํ‚ค๊ณ  ์‹ถ๋‚˜์š”? ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์†์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

Docker ๋ฐ๋ชฌ์€ /var/lib/docker์— ๋…์ ์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํด๋”์— ์žˆ๋Š” Docker ํŒŒ์ผ์„ "๋งŒ์ง€๊ฑฐ๋‚˜ ์ฐŒ๋ฅด๊ฑฐ๋‚˜ ์ž๊ทน"ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

์™œ ๊ทธ๋Ÿด๊นŒ์š”? ์ด๋Š” dotCloud๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๋ฐฐ์šด ๊ฐ€์žฅ ์–ด๋ ค์šด ๊ตํ›ˆ ์ค‘ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. dotCloud ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์€ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ /var/lib/dotcloud์— ๋™์‹œ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ•˜์—ฌ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์›์ž ํŒŒ์ผ ๊ต์ฒด(๋‚ด๋ถ€ ํŽธ์ง‘ ๋Œ€์‹ ), ๊ถŒ๊ณ  ๋ฐ ํ•„์ˆ˜ ์ž ๊ธˆ์ด ํฌํ•จ๋œ ์ฝ”๋“œ ์ถ”๊ฐ€, SQLite ๋ฐ BDB์™€ ๊ฐ™์€ ๋ณด์•ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•œ ๊ธฐํƒ€ ์‹คํ—˜๊ณผ ๊ฐ™์€ ๊ต๋ฌ˜ํ•œ ํŠธ๋ฆญ์ด ํ•ญ์ƒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ Docker๊ฐ€ ๋œ ์ปจํ…Œ์ด๋„ˆ ์—”์ง„์„ ์žฌ์„ค๊ณ„ํ•  ๋•Œ ์ค‘์š”ํ•œ ์„ค๊ณ„ ๊ฒฐ์ • ์ค‘ ํ•˜๋‚˜๋Š” ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ์ž‘์—…์„ ๋‹จ์ผ ๋ฐ๋ชฌ์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๋ชจ๋“  ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์—†์• ๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ฆ‰, ์—ฌ๋Ÿฌ Docker ์ธ์Šคํ„ด์Šค ๊ฐ„์— /var/lib/docker ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋Š” ํŠนํžˆ ํ…Œ์ŠคํŠธ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ€œ์—„๋งˆ, ๋“ค์–ด๋ณด์„ธ์š”. ์ €๋Š” ๋„์ปค๋กœ ์šฐ๋ถ„ํˆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”!โ€ ํ•˜์ง€๋งŒ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค์—์„œ ๋™์ผํ•œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋“ฑ ์ข€ ๋” ๋ณต์žกํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•˜๋ฉด ์„ธ์ƒ์ด ๋ถˆํƒ€๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฆ‰, CI ์‹œ์Šคํ…œ์ด ๋นŒ๋“œ ๋ฐ ์žฌ๊ตฌ์ถ•์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ Docker-in-Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ํ•ต์ด ์บ์‹œ์— ๋–จ์–ด์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑด ์ „ํ˜€ ๋ฉ‹์ง€์ง€ ์•Š์•„์š”!

์†”๋ฃจ์…˜

ํ•œ๋ฐœ ๋’ค๋กœ ๋ฌผ๋Ÿฌ๋‚˜ ๋ณด์ž. Docker-in-Docker๊ฐ€ ์ •๋ง๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด CI ์‹œ์Šคํ…œ ์ž์ฒด๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์žˆ๋Š” ๋™์•ˆ Docker๋ฅผ ์‹คํ–‰ํ•˜๊ณ  CI ์‹œ์Šคํ…œ์—์„œ ์ปจํ…Œ์ด๋„ˆ์™€ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ํ›„์ž์˜ ์˜ต์…˜์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Jenkins์™€ ๊ฐ™์€ CI ์‹œ์Šคํ…œ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ Docker ์†Œ์ผ“์„ CI ์ปจํ…Œ์ด๋„ˆ์— ์‚ฝ์ž…ํ•˜๊ณ  -v ํ”Œ๋ž˜๊ทธ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ CI ์ปจํ…Œ์ด๋„ˆ(Jenkins ๋˜๋Š” ๊ธฐํƒ€)๋ฅผ ์‹คํ–‰ํ•  ๋•Œ Docker-in-Docker์™€ ํ•จ๊ป˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๋Œ€์‹  ๋‹ค์Œ ์ค„๋กœ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

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

์ด์ œ ์ด ์ปจํ…Œ์ด๋„ˆ๋Š” Docker ์†Œ์ผ“์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, "ํ•˜์œ„" ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  "ํ˜•์ œ" ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ณต์‹ Docker ์ด๋ฏธ์ง€(Docker ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

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

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

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

๋”ฐ๋ผ์„œ Jenkins CI์—์„œ Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Docker API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ์ด๋ฏธ์ง€ ํŒจํ‚ค์ง• ์‹œ์Šคํ…œ(์˜ˆ: ์ด๋ฏธ์ง€๊ฐ€ Debian ๊ธฐ๋ฐ˜์ธ ๊ฒฝ์šฐ .deb ํŒจํ‚ค์ง€ ์‚ฌ์šฉ)์„ ์‚ฌ์šฉํ•˜์—ฌ Docker CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ถ€ ๊ด‘๊ณ  ๐Ÿ™‚

์šฐ๋ฆฌ์™€ ํ•จ๊ป˜์žˆ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ๊ธฐ์‚ฌ๊ฐ€ ๋งˆ์Œ์— ๋“œ์‹ญ๋‹ˆ๊นŒ? ๋” ์žฌ๋ฏธ์žˆ๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด? ์ฃผ๋ฌธํ•˜๊ฑฐ๋‚˜ ์นœ๊ตฌ์—๊ฒŒ ์ถ”์ฒœํ•˜์—ฌ ์šฐ๋ฆฌ๋ฅผ ์ง€์›ํ•˜์‹ญ์‹œ์˜ค. $4.99๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์šฉ ํด๋ผ์šฐ๋“œ VPS, ๊ท€ํ•˜๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๊ฐ€ ๋ฐœ๋ช…ํ•œ ๊ณ ์œ ํ•œ ๋ณด๊ธ‰ํ˜• ์„œ๋ฒ„ ์•„๋‚ ๋กœ๊ทธ: VPS(KVM) E5-2697 v3(6์ฝ”์–ด) 10GB DDR4 480GB SSD 1Gbps์— ๋Œ€ํ•œ ์ „์ฒด ์ง„์‹ค ๋˜๋Š” ์„œ๋ฒ„ ๊ณต์œ  ๋ฐฉ๋ฒ•์€? (RAID1 ๋ฐ RAID10์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, ์ตœ๋Œ€ 24๊ฐœ ์ฝ”์–ด ๋ฐ ์ตœ๋Œ€ 40GB DDR4).

Dell R730xd๋Š” ์•”์Šคํ…Œ๋ฅด๋‹ด์˜ Equinix Tier IV ๋ฐ์ดํ„ฐ ์„ผํ„ฐ์—์„œ 2๋ฐฐ ๋” ์ €๋ ดํ•ฉ๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์„œ ๋งŒ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV $199๋ถ€ํ„ฐ ๋„ค๋œ๋ž€๋“œ์—์„œ! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ์ตœ์ € $99! ์— ๋Œ€ํ•ด ์ฝ๋‹ค ์ธํ”„๋ผ ๊ณต์‚ฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•. 730ํŽ˜๋‹ˆ์— 5์œ ๋กœ ์ƒ๋‹น์˜ Dell R2650xd E4-9000 vXNUMX ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค?

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€