Docker-in-Docker๋ ์ปจํ
์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํด ์ปจํ
์ด๋ ์์ฒด ๋ด์์ ์คํ๋๋ ๊ฐ์ํ๋ Docker ๋ฐ๋ชฌ ํ๊ฒฝ์
๋๋ค. Docker-in-Docker๋ฅผ ๋ง๋๋ ์ฃผ์ ๋ชฉ์ ์ Docker ์์ฒด ๊ฐ๋ฐ์ ๋๋ ๊ฒ์ด์์ต๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ด๋ฅผ ์ฌ์ฉํ์ฌ Jenkins CI๋ฅผ ์คํํฉ๋๋ค. ์ฒ์์๋ ์ด๊ฒ์ด ์ ์์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง Jenkins CI ์ปจํ
์ด๋์ Docker๋ฅผ ์ค์นํ๋ฉด ํผํ ์ ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค. ์ธ๋ถ ์ฌํญ ์์ด ์ต์ข
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ด์ฌ์ด ์๋ค๋ฉด ๊ธฐ์ฌ์ ๋ง์ง๋ง ์น์
์ธ "๋ฌธ์ ํด๊ฒฐ"์ ์ฝ์ด ๋ณด์ญ์์ค.
Docker-in-Docker: "์ข์"
XNUMX๋
์ฌ ์ ์ ์ ๋ Docker๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ํดํน ํดํน;
- ์ง๋ค;
- ์คํ ์ค์ธ Docker ๋ฐ๋ชฌ์ ์ค์งํฉ๋๋ค.
- ์๋ก์ด Docker ๋ฐ๋ชฌ์ ์์ํฉ๋๋ค.
- ํ ์คํธ;
- ์ฌ์ดํด์ ๋ฐ๋ณตํ์ญ์์ค.
์๋ฆ๋ต๊ณ ์ฌํ ๊ฐ๋ฅํ ์ด์ ๋ธ๋ฆฌ(์ฆ, ์ปจํ ์ด๋ ๋ด)๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ฑ ๋ณต์กํด์ง๋๋ค.
- ํดํน ํดํน;
- Docker์ ์๋ ๋ฒ์ ์ด ์คํ ์ค์ธ์ง ํ์ธํ์ธ์.
- ๊ธฐ์กด Docker๋ก ์ Docker๋ฅผ ๋น๋ํฉ๋๋ค.
- Docker ๋ฐ๋ชฌ์ ์ค์งํฉ๋๋ค.
- ์๋ก์ด Docker ๋ฐ๋ชฌ์ ์์ํ์ญ์์ค.
- ์ํ;
- ์ Docker ๋ฐ๋ชฌ์ ์ค์งํฉ๋๋ค.
- ๋ฐ๋ณต.
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 ๋์ ์ด๋ฆ์ ์ผ๋ถ ๊ธฐ๋ณธ ๋ค์์คํ์ด์ค๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์ค์ ์ ๋ค์์์ ๋ณผ ์ ์๋ฏ์ด ์ ํ ๊ฐ๋จํ์ง ์์ต๋๋ค.
Docker-in-Docker: ์ํฉ์ด ๋์ฑ ์ ํ๋จ
๋น๋ ์บ์๋ ์ด๋ป์ต๋๊น? ์ด๊ฒ๋ ์๋นํ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ ์ข ์ข "Docker-in-Docker๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ๋ชจ๋ ๊ฒ์ ๋ด๋ถ Docker๋ก ๊ฐ์ ธ์ค๋ ๋์ ํธ์คํธ์ ํธ์คํ ๋ ์ด๋ฏธ์ง๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์ต๋๊น?"๋ผ๊ณ ๋ฌป์ต๋๋ค.
์ผ๋ถ ์ง์ทจ์ ์ธ ์ฌ๋๋ค์ ํธ์คํธ์ /var/lib/docker๋ฅผ Docker-in-Docker ์ปจํ ์ด๋์ ๋ฐ์ธ๋ฉํ๋ ค๊ณ ์๋ํ์ต๋๋ค. ๋๋ก๋ ์ฌ๋ฌ ์ปจํ ์ด๋์ /var/lib/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๋ฅผ ์ค์นํฉ๋๋ค.
์ผ๋ถ ๊ด๊ณ ๐
์ฐ๋ฆฌ์ ํจ๊ป์์ด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ฐ๋ฆฌ ๊ธฐ์ฌ๊ฐ ๋ง์์ ๋์ญ๋๊น? ๋ ์ฌ๋ฏธ์๋ ์ฝํ
์ธ ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด? ์ฃผ๋ฌธํ๊ฑฐ๋ ์น๊ตฌ์๊ฒ ์ถ์ฒํ์ฌ ์ฐ๋ฆฌ๋ฅผ ์ง์ํ์ญ์์ค.
Dell R730xd๋ ์์คํ
๋ฅด๋ด์ Equinix Tier IV ๋ฐ์ดํฐ ์ผํฐ์์ 2๋ฐฐ ๋ ์ ๋ ดํฉ๋๊น? ์ฌ๊ธฐ์ ๋ง
์ถ์ฒ : habr.com