์๋ ํ์ธ์ ๊ตฌ๋ ์๋, DevOps ์์๊ณผ ๊ธฐ์ ์ง์์ ์ ๋ฆฌํด์ ๊ณต์ ํด๋๋ฆฌ๋ DevOps ์ฌํ์ ์ํ ์์์ง์ ๋๋ค.
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์ Container๋ผ๋ ๋ ๋ฆฝ๋ ํ๊ฒฝ์ ์คํํ๊ณ ๊ด๋ฆฌํด์ฃผ๋ ํด์ธ๋ฐ์. ๋ ๋ฆฝ๋ ํ๊ฒฝ์ด๋ผ๊ณ ํ์ง๋ง, ํธ์คํธ ์์ ๊ฑฐ์ ์๋ก์ด Linux ํ๊ฒฝ์ ๊ตฌ์ถํ๋ค๋ ๋๋์ ๋ฐ๊ธฐ๋ ํ์ฃ .
๊ทธ๋์ ์๋์ ๊ฐ์ ์ง๋ฌธ ๋์ฌ ์๋ ์์ต๋๋ค.
์ด๋ ๊ฒ ๋์จ ์ปจ์ ์ด ๋ฐ๋ก, 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์ ํจ๊ป ์ค์น๋๋ 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
์๊ฒฌ์ ๋จ๊ฒจ์ฃผ์ธ์