Docker ์ปจํ ์ด๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์คํ ๋๊ตฌ, ์ฝ๋, ๋ฐํ์ ๋ฑ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ด๊ณ ์๋ ์ปจํ ์ด๋์ด๋ฉฐ, Docker๋ ๊ฐ๋ฐ์๊ฐ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๋น๋, ํ ์คํธ ๋ฐ ๋ฐฐํฌํ ์ ์๊ฒ ํด์ฃผ๋ ์ํํธ์จ์ด ํ๋ซํผ์ด๋ค.

์ฝ๊ฒ ์ํฉ ์์๋ฅผ ๋ค์ด๋ณด์.
๊ฐ๋ฐ์๋ ์์ ์ด ๊ฐ๋ฐํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ค๋ฉด, ํด๋น ํ๊ฒฝ์์๋ ํ๋ก๊ทธ๋จ์ด ์ ๋์ํ ์ ์๋๋ก ๊ฐ์ข ๋ฒ์ ์ ๋ณด ๋ฑ์ ์ผ์ผ์ด ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ฌ๋์ด ํ๋ฏ๋ก ์ค์๊ฐ ์๊ธธ ์๋ ์๊ณ , ์ฌ๋ฌ ๊ฐ์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ชจ๋ ์ค์ ๊ณผ ๋ฐฐํฌ๋ฅผ ์ง์ ํด์ผ ํ๊ธฐ์ ๋ฒ๊ฑฐ๋กญ๋ค.
๊ทธ๋์, ๊ฐ๋ฐ์์ ์ด๋ฌํ ๊ณ ์ถฉ์ ํด๊ฒฐํด์ฃผ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด Docker์ด๋ค. ๋ฏธ๋ฆฌ ๊ฐ๋จํ ๋งํ์๋ฉด, ๋์ปค๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ จ ์ ๋ณด๋ฅผ '๋์ปค ์ด๋ฏธ์ง'๋ก ๋ง๋ค์ด๋๊ณ , ์ด๋ฅผ ์ ์ฅํด๋ ๋ค์, ์ด๋ ํ๊ฒฝ์์๋ ๊ทธ ์ด๋ฏธ์ง๋ฅผ ๋ฐ์์ค๊ธฐ๋ง ํ๋ฉด ๊ทธ๋๋ก ์ธํ ๋๋๋ก ํด์ค๋ค! ๋ง ๊ทธ๋๋ก, ์ปจํ ์ด๋๋ฅผ ๋ช ์ด ์์ ๋ฐฐํฌํ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค!โจ
์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ๋์ปค๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ด๋ค :>
์ฐ์ ๊ฐ์ํ๋, ํ๋์ ์ค๋ฌผ ์ปดํจํ ์์์ ๋ง์น ์ฌ๋ฌ ๊ฐ์ธ ๊ฒ์ฒ๋ผ ๊ฐ์์ผ๋ก ์ชผ๊ฐ์ ์ฌ์ฉํ๊ฑฐ๋, ์ฌ๋ฌ ๊ฐ์ ์ค๋ฌผ ์ปดํจํ ์์๋ค์ ๋ฌถ์ด์ ํ๋์ ์์์ธ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
๊ฐ์๋จธ์ ๊ณผ ๋์ปค ๋ชจ๋ ๊ฐ์ํ์ ์ฌ์ฉ๋์ง๋ง, ๋ถ๋ช ํ ์ฐจ์ด์ ์ด ์๋ค. ์ด๋ฅผ ์ง๊ณ ๋์ด๊ฐ์.

VM์ ๊ฒฝ์ฐ, Host OS ์์ ๊ฐ์ํ๋ฅผ ์ํค๊ธฐ ์ํ Hypervisor ์์ง ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ Guest OS๋ฅผ ์ฌ๋ ค ์ฌ์ฉํ๋ค. ์ด๋ ๊ฐ์ํ๋ ํ๋์จ์ด ์์ OS๊ฐ ์ฌ๋ผ๊ฐ๋ ํํ๋ก ๊ฑฐ์ ์๋ฒฝํ๊ฒ Host์ ๋ถ๋ฆฌ๋๋ค๊ณ ๋ด๋ ๋ฌด๋ฐฉํ๋ค.
์ด๋ ๊ฒ ํ์ดํผ๋ฐ์ด์ ์ ์ํด ์์ฑ๋๊ณ ๊ด๋ฆฌ๋๋ ์ด์์ฒด์ ๋ ๊ฒ์คํธ ์ด์์ฒด์ (Guest OS)๋ผ๊ณ ํ๋ฉฐ,๊ฐ ๊ฒ์คํธ์ด์์ฒด์ ๋ ๋ค๋ฅธ ๊ฒ์คํธ ์ด์์ฒด์ ์๋ ์์ ํ ๋ ๋ฆฝ๋ ๊ณต๊ฐ๊ณผ ์์คํ ์์์ ํ ๋น๋ฐ์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ๊ฐ์ํ ๋ฐฉ์์ ์ฌ์ฉํ๋ ํด์ VirtualBox, VMware ๋ฑ์ด ์๋ค.
๊ทธ๋ฌ๋, ๊ฐ์ข ์์คํ ์์์ ๊ฐ์ํํ๊ณ ๋ ๋ฆฝ๋ ๊ณต๊ฐ์ ์์ฑํ๋ ์์ ์ ํ์ดํผ๋ฐ์ด์ ๋ฅผ ๋ฐ๋์ ๊ฑฐ์น๊ธฐ์ ์ผ๋ฐ ํธ์คํธ์ ๋นํด ์ฑ๋ฅ์ ์์ค์ด ๋ฐ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ VM์ ๊ฒ์คํธ ์ด์์ฒด์ ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ปค๋ ๋ฑ์ ์ ๋ถ ํฌํจํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋จธ์ ์ ๋ฐฐํฌํ๊ธฐ ์ํ ์ด๋ฏธ์ง๋ก ๋ง๋ค์์ ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ ๋ํ ์ปค์ง๋ค.
์ฆ, ๊ฐ์ ๋จธ์ ์ ์๋ฒฝํ ์ด์์ฒด์ ๋ฅผ ์์ฑํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ์ฑ๋ฅ ์์ค์ด ์๊ณ , ์ ๊ธฐ๊ฐ ๋ฐ์ดํธ์ ํด๋นํ๋ ๊ฐ์ ๋จธ์ ์ด๋ฏธ์ง๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ฐฐํฌํ๊ธฐ์๋ ๋ถ๋ด์ค๋ฝ๋ค๋ ๋จ์ ์ด ์๋ค!
๋ฐ๋ฉด์ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ๋ Docker ์์ง ์์ Application ์คํ์ ํ์ํ ๋ฐ์ด๋๋ฆฌ๋ง ์ฌ๋ผ๊ฐ๊ฒ ๋๋ค. ๊ฐ์ํ๋ ๊ณต๊ฐ์ ์์ฑํ๊ธฐ ์ํด ๋ฆฌ๋ ์ค์ ์์ฒด ๊ธฐ๋ฅ์ธ *chroot, ๋ค์์คํ์ด์ค(namespace), cgroup์ ์ฌ์ฉํ๊ธฐ์ ์ฑ๋ฅ ์์ค์ด ๊ฑฐ์ ์๋ค. ์ด๋ ์ปค๋์ ๊ณต์ ํ๋ ๋ฐฉ์์ผ๋ก, ์ปจํ ์ด๋ ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๋ ๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์คํ ํ์ผ๋ง ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ปจํ ์ด๋๋ฅผ ์ด๋ฏธ์ง๋ก ๋ง๋ค์์ ๋ ์ด๋ฏธ์ง์ ์ฉ๋ ๋ํ VM์ ๋นํด ๋งค์ฐ ์ ๋ค.
์ด๋ฌํ ๋์ปค์ ์ฑ๋ฅํฅ์, ๋ฐ์ด๋ ์ด์์ฑ, ์ฝ๊ฒ Scale Out์ ํ ์ ์๋ ์ ์ฐ์ฑ์ด๋ผ๋ ์ฅ์ ์ด, ๋์ปค๋ฅผ ์ฌ์ฉํ๋ ๋ํ์ ์ธ ์ด์ ๊ฐ ๋ ๋ฏํ๋ค!โจ
chroot, namespace, cgroup?
๋์ปค ์์ง์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๋จ์๋ ์ด๋ฏธ์ง์ ์ปจํ
์ด๋์ด๋ฉฐ ๋์ปค ์์ง์ ํต์ฌ์ด๋ค. ๋์ปค ์ด๋ฏธ์ง์ ์ปจํ
์ด๋๋ 1:N ๊ด๊ณ์ด๋ฉฐ, ์ด ๋์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์์ ํด๋์ค <-> ์ธ์คํด์ค์ ๊ด๊ณ์ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ์ดํด๊ฐ ๋ ํธํ๋ค. ์๋์์ ์์ธํ ์์๋ณด์.
Docker File -> Docker Image : Docker File์ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๋ ์ฌ์ฉํ๋ ํ์ผ. docker build ๋ช
๋ น์ด๋ฅผ ์คํ์ํค๋ฉด ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์๋ค.
Docker Image -> Docker Container : Docker Image๋ฅผ docker run ๋ช
๋ น์ด๋ฅผ ์คํ์ํค๋ฉด Docker Container๋ฅผ ๋ง๋ค ์ ์๋ค.
๋์ปค ์ด๋ฏธ์ง(Docker Image)๋ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ํ์ํ ์์๋ก, ์ปจํ
์ด๋๋ฅผ ์คํํ ์ ์๋ ์คํํ์ผ, ์ค์ ๊ฐ ๋ค์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด๋ค.
์ด๋ ์ปจํ
์ด๋๋ฅผ ์์ฑํ๊ณ ์คํํ ๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ ์ฌ๋ฌ ๊ณ์ธต์ผ๋ก ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ์กด์ฌํ๋ค. Image๋ฅผ ์ปจํ
์ด๋์ ๋ด๊ณ ์คํ์ ์ํจ๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๊ฐ ๋์ํ๊ฒ ๋๋ค.
๋์ปค ์ปจํ ์ด๋(Docker Container)๋ ๋์ปค ์ด๋ฏธ์ง๋ก ์์ฑํ ์ ์์ผ๋ฉฐ, ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด ํด๋น ์ด๋ฏธ์ง์ ๋ชฉ์ ์ ๋ง๋ ํ์ผ์ด ๋ค์ด ์๋, ํธ์คํธ์ ๋ค๋ฅธ ์ปจํ ์ด๋๋ก๋ถํฐ ๊ฒฉ๋ฆฌ๋ ์์คํ ์์ ๋ฐ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ ๋ฆฝ๋ ๊ณต๊ฐ(ํ๋ก์ธ์ค)์ด ์์ฑ๋๋ค.
(๋์ปค ์ปจํ
์ด๋์ ์ฌ์ฉ)
์น ์๋ฒ ๋์ปค ์ด๋ฏธ์ง๋ก๋ถํฐ ์ฌ๋ฌ๊ฐ์ ๋์ปค ์ปจํ
์ด๋๋ฅผ ์์ฑํ๋ฉด ์์ฑ๋ ์ปจํ
์ด๋์ ๊ฐ์๋งํผ ์น ์๋ฒ๊ฐ ์์ฑ๋๊ณ , ์ด ์ปจํ
์ด๋๋ค์ ์ธ๋ถ์ ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ฐ์ ์ฌ์ฉ๋๋ค.
์ปจํ ์ด๋๋ ์ด๋ฏธ์ง๋ฅผ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ์ด๋ฏธ์ง์์ ๋ณ๊ฒฝ๋ ์ฌํญ๋ง ์ปจํ ์ด๋ ๊ณ์ธต์ ์ ์ฅํ๋ฏ๋ก ์ปจํ ์ด๋์์ ๋ฌด์์ ํ๋ ์ง ์๋ ์ด๋ฏธ์ง๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๋ํ ์์ฑ๋ ๊ฐ ์ปจํ ์ด๋๋ ๊ฐ๊ธฐ ๋ ๋ฆฝ๋ ํ์ผ์์คํ ์ ์ ๊ณต๋ฐ์ผ๋ฉฐ ํธ์คํธ์ ๋ถ๋ฆฌ๋ผ ์์ผ๋ฏ๋ก ํน์ ์ปจํ ์ด๋์์ ์ด๋ค ์ดํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ๊ฑฐ๋ ์ญ์ ํด๋ ๋ค๋ฅธ ์ปจํ ์ด๋์ ํธ์คํธ๋ ๋ณํ๊ฐ ์๋ค.
์ด๋ฏธ์ง๋ฅผ ์ ์ฅ ๋ฐ ๋ค์ด๋ก๋ํ ์ ์๋ ๊ณต๊ฐ์ด๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ณต์ ํ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ถ(local) ๋์ปค ํธ์คํธ์ pullํ ์ ์๋ค.
public ์ ์ฅ์ : Docker Hub, QUAY
private ์ ์ฅ์ : Docker Registry ๋ฑ์ ์ง์ ๋์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
Docker Hub๋ ๋์ปค(Docker) ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ์๊ฒฉ ์ ์ฅ์์ด๋ค. ๋์ปค ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๋น๋, ์ ์ฅ ๋ฐ ๊ณต์ ํ ์ ์๋ ์ค์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ฌ์ฉ๋๋ค. ์ฌ์ฉ์๋ค์ Docker Hub๋ฅผ ํตํด ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ฒ์ํ๊ณ , ๋ค์ด๋ก๋ํ๋ฉฐ, ์ ๋ก๋ํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์์ ๊ณต์ ํ ์ ์๋ค. Docker Hub์๋ ๊ณต์์ ์ผ๋ก ์ ์ง๋๊ณ ์ ๋ฐ์ดํธ๋๋ ์๋ง์ ์คํ ์์ค ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ค์ด ์์ด์, ์ด ์ด๋ฏธ์ง๋ค์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ค์ ๋์ ํ์ง์ ์ด๋ฏธ์ง๋ค์ ์์ฝ๊ฒ ํ์ฉํ ์ ์๋ค.
๋์ปค ํ๋ธ์์๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ ๊ณตํด ์ฃผ๋๋ฐ, ๋ํ์ ์ธ ๊ฒ์ด ๋ค์๊ณผ ๊ฐ๋ค.
๋์ปค ์ปดํฌ์ฆ๋ ๋จ์ผ ์๋ฒ์์ ์ฌ๋ฌ ๊ฐ์ ์ปจํ
์ด๋๋ฅผ ํ๋์ ์๋น์ค๋ก ์ ์ํด ์ปจํ
์ด๋์ ๋ฌถ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์์
ํ๊ฒฝ์ ์ ๊ณตํ๋ ๊ด๋ฆฌ ๋๊ตฌ์ด๋ค. ๋์ปค ์ปดํฌ์ฆ ์ ์ ํ์ผ์ YAML ํ์์ผ๋ก ํ์ฅ์๋ .yml ์ด๋ค.
์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ํ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋์ํ ๋ ๋์ปค ์ปดํฌ์ฆ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด, ์ด๋ฅผ ํ ์คํธํ๊ธฐ ์ํด์ ๊ฐ ์ปจํ ์ด๋๋ฅผ ํ๋์ฉ ์์ฑํด์ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ๋ ค๋ฉด ์น ์๋ฒ ์ปจํ ์ด๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปจํ ์ด๋ ๋ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๊ฐ๊ฐ ์์ฑํด์ผ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ ํ๋์ ์๋น์ค๋ก ์ ๋ฆฌํด ์ปจํ ์ด๋์ ๋ฌถ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค๋ฉด ์ข ๋ ํธ๋ฆฌํ๊ฒ ๋ค๋ ์๊ฐ์ ๋ฑ์ฅํ ๊ฒ์ด ๋์ปค ์ปดํฌ์ฆ์ด๋ค.
๋์ปค ์ปดํฌ์ฆ๋ ์์คํ ๊ตฌ์ถ๊ณผ ๊ด๋ จ๋ ๋ช ๋ น์ด๋ฅผ ํ๋์ ํ ์คํธ ํ์ผ(์ ์ ํ์ผ)์ ๊ธฐ์ฌํด, ๋ช ๋ น์ด ํ๋ฒ์ ์์คํ ์ ์ฒด๋ฅผ ์คํํ๊ณ ์ข ๋ฃ์ ํ๊ธฐ๊น์ง ํ๋ฒ์ ํ๋๋ก ๋์์ค๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ํ๋์ ์ ์ ํ์ผ๋ก ํฉ์ณ ์คํํ ์ ์๋ค.
๐ ๋์ปค ์ปดํฌ์ฆ์ ์ฟ ๋ฒ๋คํฐ์ค
์ฟ ๋ฒ๋คํฐ์ค๋ ๋์ปค ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ์ธ ๋งํผ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ค๋ฃจ๋ ๊ฒ๊ณผ ๊ด๊ณ๊ฐ ๊น์ด์, ๋์ปค ์ปดํฌ์ฆ์๋ ํผ๋ํ๊ธฐ ์ฝ๋ค.
- ์ฟ ๋ฒ๋คํฐ์ค : ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋ ๋๊ตฌ
- ๋์ปค ์ปดํฌ์ฆ : ์ปจํ ์ด๋๋ฅผ ์์ฑ ๋ฐ ์ญ์ , ์ปจํ ์ด๋ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์์
+ ๋์ปค ์ปดํฌ์ฆ์ ๋์ปค ํ์ผ๋ ํผ๋ํ์ง ์๋๋ก ์ ์ํ์! ๋์ปค ์ปดํฌ์ฆ๋ ์ปจํ ์ด๋์ ์ฃผ๋ณ ํ๊ฒฝ ์์ฑ, ๋คํธ์ํฌ์ ๋ณผ๋ฅจ๊น์ง ๋ง๋ ๋ค. ๋์ปค ํ์ผ์ ๋จ์ง ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๊ฒ์ด๋ค.
๐ ์ ๋ฆฌํ๊ธฐ
๋์ปค ์ปจํ
์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์
์คํ์ ํ์ํ ๋ชจ๋ ๊ฒ์ ๋ด๊ณ ์๋ ์ปจํ
์ด๋์ด๋ฉฐ, ๋์ปค ํ์ผ > ๋์ปค ์ด๋ฏธ์ง > ๋์ปค ์ปจํ
์ด๋ ์์ผ๋ก ๋ง๋ค์ด๋ผ ์ ์๊ณ , Docker๋ ์ปจํ
์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ ์ ์๋๋ก ํด์ฃผ๋ ์ํํธ์จ์ด ํ๋ซํผ์ด๋ค.