01A. Docker
01A. Docker ๊ด๋ จ
Docker๋ ์ง๊ธ๊น์ง ์ฌ์ฉํด์๋ VMware, Microsoft Hyper-V, Xen, ๋ฆฌ๋ ์ค KVM ๋ฑ์ ๊ฐ์ ๋จธ์ ๊ณผ ๋น์ทํฉ๋๋ค.
๊ฐ์ ๋จธ์ ์ ๋ฆฌ๋ ์ค๋ฅผ ์ค์นํ ๋ค ๊ฐ์ข ์๋ฒ ํ๋ก๊ทธ๋จ๊ณผ DB๋ฅผ ์ค์นํ๊ณ , ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์น์ฌ์ดํธ๋ฅผ ์คํํ์ต๋๋ค. ์ด๋ ๊ฒ ๊ตฌ์ถํ ๊ฐ์ ๋จธ์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฌ ์๋ฒ์ ๋ณต์ฌํด์ ์คํํ๋ฉด ์ด๋ฏธ์ง ํ๋๋ก ์๋ฒ๋ฅผ ๊ณ์ ๋ง๋ค์ด๋ผ ์ ์์์ต๋๋ค.
๋ณดํต ๊ฐ์ ๋จธ์ ์๋ฒ๋ฅผ ๋ ์์ ์ผ๋ก ์ด์ํ๊ฑฐ๋, ์๋น์ค ํํ๋ก ์ ๊ณต๋๋ Amazon Web Services, Microsoft Azure, Google Cloud Platform์ ์ฌ์ฉํ๊ธฐ๋ ํฉ๋๋ค.
๊ฐ์ ๋จธ์
๊ฐ์ ๋จธ์ ์ ํธํ๊ธด ํ์ง๋ง ์ฑ๋ฅ์ด ์ข์ง ๋ชปํ ๊ฒ์ด ๋จ์ ์ด์์ต๋๋ค. ์ง๊ธ๊น์ง CPU์ ๊ฐ์ํ๋ฅผ ์ํ ๊ธฐ๋ฅ๋ค์ด ๋ง์ด ์ถ๊ฐ๋์์ง๋ง ์์ง๋ ๊ฐ์ ๋จธ์ ์ ๋ฆฌ์ผ ๋จธ์ ์ ๋นํด ์๋๊ฐ ๋๋ฆฝ๋๋ค.
์ ๊ฐ์ํ(Full Virtualization)์ ๋๋ฆฐ ์๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ๋ฐ๊ฐ์ํ(Paravirtualization) ๋ฐฉ์์ด ๊ฐ๋ฐ๋์๊ณ , ํ์ฌ ๋๋ฆฌ ์ฐ์ด๊ณ ์์ต๋๋ค.
๊ฐ์ ๋จธ์ ์์ฒด๋ ์์ ํ ์ปดํจํฐ๋ผ ํญ์ ๊ฒ์คํธ OS๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค. ๊ทธ๋์ ์ด๋ฏธ์ง ์์ OS๊ฐ ํฌํจ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ์ง ์ฉ๋์ด ์ปค์ง๋๋ค.
์๋ฌด๋ฆฌ ๋คํธ์ํฌ์ ์ธํฐ๋ท ์๋๊ฐ ๋นจ๋ผ์ก๋ค ํ๋๋ผ๋ ๊ฐ์ํ ์ด๋ฏธ์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ์ ๊ฝค ๋ถ๋ด์ค๋ฝ์ต๋๋ค. ํนํ ์คํ ์์ค ๊ฐ์ํ ์ํํธ์จ์ด๋ OS๋ฅผ ๊ฐ์ํํ๋ ๊ฒ์๋ง ์ด์ ์ด ๋ง์ถฐ์ ธ ์์ต๋๋ค. ๊ทธ๋์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ณ ์คํํ๋ ๊ธฐ๋ฅ๋ง ์์ ๋ฟ ๋ฐฐํฌ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค.
๊ฐ์ ๋จธ์ ๋ฐฐํฌ
๊ฐ์ ๋จธ์ ์ ์ค์์์ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌํ๋ ์์ฉ ์ ํ์ VMware vCenter, Microsoft System Center๊ฐ ์์ต๋๋ค.
Docker
Docker๋ ๋ฐ๊ฐ์ํ๋ณด๋ค ์ข๋ ๊ฒฝ๋ํ๋ ๋ฐฉ์์ ๋๋ค. ๊ทธ๋ฆผ 1-6์ ๊ฐ์ด ๊ฒ์คํธ OS๋ฅผ ์ค์นํ์ง ์์ต๋๋ค. Docker ์ด๋ฏธ์ง์ ์๋ฒ ์ด์์ ์ํ ํ๋ก๊ทธ๋จ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๊ฒฉ๋ฆฌํด์ ์ค์นํ ์ ์๊ณ , OS ์์(์์คํ ์ฝ)์ ํธ์คํธ์ ๊ณต์ ํฉ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด์ ์ด๋ฏธ์ง ์ฉ๋์ด ํฌ๊ฒ ์ค์ด๋ค์์ต๋๋ค.
Docker๋ ํ๋์จ์ด๋ฅผ ๊ฐ์ํํ๋ ๊ณ์ธต์ด ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ, ํ์ผ์์คํ , ๋คํธ์ํฌ ์๋๊ฐ ๊ฐ์ ๋จธ์ ์ ๋นํด ์๋ฑํ ๋น ๋ฆ ๋๋ค. ํ 1-1์ Docker 20.10.17์์ ์ฐ๋ถํฌ 22.04 ํธ์คํธ์ ์ฐ๋ถํฌ 22.04 Docker ์ปจํ ์ด๋์ ์ฑ๋ฅ์ ์ธก์ ํ ๊ฒฐ๊ณผ์ ๋๋ค. ์์น์์ผ๋ก ํธ์คํธ์ Docker ์ปจํ ์ด๋ ์ฌ์ด์ ์ฑ๋ฅ์ฐจ์ด๋ ํฌ์ง ์์ต๋๋ค. ํธ์คํธ์ ๊ฑฐ์ ๋์ผํ ์๋๋ผ ํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ์ธก์ ๋๊ตฌ | ํธ์คํธ | Docker | |
---|---|---|---|
CPU | sysbench | 1 | 0.9937 |
๋ฉ๋ชจ๋ฆฌ ์ฐ๊ธฐ | sysbench | 1 | 0.9913 |
๋ฉ๋ชจ๋ฆฌ ์ฝ๊ธฐ | sysbench | 1 | 0.9987 |
๋์คํฌ I/O | dd | 1 | 0.9921 |
๋คํธ์ํฌ | iperf | 1 | 0.9893 |
Docker 20.10.17์์ ์ฐ๋ถํฌ 22.04 ํธ์คํธ์ ์ฐ๋ถํฌ 22.04 Docker ์ปจํ ์ด๋ ์ฑ๋ฅ ์ธก์
Docker๋ ๊ฐ์ ๋จธ์ ๊ณผ๋ ๋ฌ๋ฆฌ ์ด๋ฏธ์ง ์์ฑ๊ณผ ๋ฐฐํฌ์ ํนํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. Git์์ ์์ค๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ์ด๋ฏธ์ง ๋ฒ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ํ, ์ค์ ๊ด๋ฆฌ๋ฅผ ์ํด ์ ์ฅ์์ ์ด๋ฏธ์ง๋ฅผ ์ฌ๋ฆฌ๊ณ , ๋ฐ์ ์ ์์ต๋๋ค(Push/Pull). ๊ทธ๋ฆฌ๊ณ GitHub์ฒ๋ผ Docker ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์๋ Docker Hub๋ ์ ๊ณตํฉ๋๋ค(GitHub์ฒ๋ผ ์ ๋ฃ ๊ฐ์ธ ์ ์ฅ์๋ ์ ๊ณตํฉ๋๋ค).
๋ค์ํ API๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ํ๋ ๋งํผ ์๋ํ๋ฅผ ํ ์ ์์ด ๊ฐ๋ฐ๊ณผ ์๋ฒ ์ด์์ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋ฆฌ๋ ์ค ์ปจํ ์ด๋
์ค๋ ์ ๋ถํฐ ๋ฆฌ๋ ์ค/์ ๋์ค ํ๊ฒฝ์ chroot๋ผ๋ ๋ช ๋ น์ ์ ๊ณตํ์ต๋๋ค. chroot๋ ํ์ผ์์คํ ์์ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ(/)๋ฅผ ๋ณ๊ฒฝํ๋ ๋ช ๋ น์ ๋๋ค. chroot๋ก ํน์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ฃจํธ ๋๋ ํฐ๋ฆฌ๋ก ์ค์ ํ๋ฉด chroot jail(๊ฐ์ฅ)์ด๋ผ๋ ํ๊ฒฝ์ด ์์ฑ๋๋๋ฐ, chroot jail์์์๋ ๋ฐ๊นฅ์ ํ์ผ๊ณผ ๋๋ ํฐ๋ฆฌ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด์ฒ๋ผ chroot๋ ๋๋ ํฐ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๊ฒฉ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ ๋ณด ์ ์ถ๊ณผ ํผํด๋ฅผ ์ต์ํ ํ๋๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋์์ต๋๋ค.
chroot๋ chroot jail์ ๋ค์ด๊ฐ ์คํ ํ์ผ๊ณผ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ ์ค๋นํด์ผ ํ๊ณ ์ค์ ๋ฐฉ๋ฒ์ด ๋ณต์กํฉ๋๋ค. ๋ํ, ์๋ฒฝํ ๊ฐ์ ํ๊ฒฝ์ด ์๋๊ธฐ ๋๋ฌธ์ ๊ฐ์ข ์ ์ฝ์ด ๋ง์ต๋๋ค. ์ดํ ๋ฆฌ๋ ์ค๋ LXC(LinuX Container)๋ผ๋ ์์คํ ๋ ๋ฒจ ๊ฐ์ํ๋ฅผ ์ ๊ณตํ์ต๋๋ค.
LXC๋ ์ปดํจํฐ๋ฅผ ํต์งธ๋ก ๊ฐ์ํํ์ฌ OS๋ฅผ ์คํํ๋ ๊ฒ์ด ์๋ ๋ฆฌ๋ ์ค ์ปค๋ ๋ ๋ฒจ์์ ์ ๊ณตํ๋ ์ผ์ข ์ ๊ฒฉ๋ฆฌ(Isolate)๋ ๊ฐ์ ๊ณต๊ฐ์ ๋๋ค. ์ด ๊ฐ์ ๊ณต๊ฐ์๋ OS๊ฐ ์ค์น๋์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋จธ์ ์ด๋ผ ํ์ง ์๊ณ , ์ปจํ ์ด๋๋ผ ๋ถ๋ฆ ๋๋ค.
๋ฆฌ๋ ์ค ์ปค๋์ Control Groups(cgroups)๋ CPU, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ, ๋คํธ์ํฌ ์์์ ํ ๋นํ์ฌ ์์ ํ ํํ์ ๊ฐ์ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค. ๋ํ, ํ๋ก์ธ์ค ํธ๋ฆฌ, ์ฌ์ฉ์ ๊ณ์ , ํ์ผ์์คํ , IPC ๋ฑ์ ๊ฒฉ๋ฆฌ์์ผ ํธ์คํธ์ ๋ณ๊ฐ์ ๊ณต๊ฐ์ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ Namespace isolation(namespaces)์ด๋ผ๊ณ ํฉ๋๋ค.
LXC๋ ๋ฆฌ๋ ์ค ์ปค๋์ cgroups์ namespaces ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ๊ฐ์ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค.
LXC๋ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ๋ง ์ ๊ณตํ ๋ฟ ๊ฐ๋ฐ ๋ฐ ์๋ฒ ์ด์์ ํ์ํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ์ต๋๋ค. Docker๋ ๋ฆฌ๋ ์ค ์ปค๋์ cgroups์ namespaces๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ์ด๋ฏธ์ง, ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ๊ณผ ๋ค์ํ ๋ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
Docker๊ฐ ์ฒ์ ๊ฐ๋ฐ๋ ๋น์์๋ LXC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ์ ํ์์ง๋ง ์ต๊ทผ๋ถํฐ๋ Containerd(runC)๋ฅผ ๊ฐ๋ฐํ์ฌ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.