VM์ด ์๋ Docker๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์ด๋ป๊ฒ ์ดํดํฉ๋๊น? ์ ํํ ๋ฌด์์ ๊ฒฉ๋ฆฌํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ๋ณด์ฅ๋ ๋ฆฌ์์ค์ ๊ฐ์ ํ๋์จ์ด๋ก ์์คํ ์ ๊ฒฉ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ ์ ํ์ VM์ ์์ด์ผ ํฉ๋๋ค. ์คํ ์ค์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณ๋์ ์์คํ ํ๋ก์ธ์ค๋ก ๊ฒฉ๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ Docker๊ฐ ํ์ํฉ๋๋ค.
Docker ์ปจํ ์ด๋์ VM์ ์ฐจ์ด์ ์ ๋ฌด์์ ๋๊น?
๊ฐ์ ๋จธ์ (VM) ๊ฐ์ ์ฅ์น ๋๋ผ์ด๋ฒ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๊ธฐํ ๊ตฌ์ฑ ์์์ ํจ๊ป ์๋ก์ด ๋
๋ฆฝ OS๊ฐ ์ค์น๋ ๋ชจ๋ ๊ฐ์ ์ฅ์น์ ๊ฐ์ ํ๋ ๋์คํฌ๊ฐ ์๋ ๊ฐ์ ์ปดํจํฐ์
๋๋ค. ์ฆ, ํ๋์ ์ปดํจํฐ์์ ๋ง์ ๊ฐ์ ์ปดํจํฐ๋ฅผ ์คํํ ์ ์๋ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด์ ์ถ์ํ๋ฅผ ์ป์ต๋๋ค.
์ค์น๋ VM์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๋์คํฌ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์์ต๋๋ค.
- ๊ฐ์ ํ๋ ๋์คํฌ์ ๋ํ ๋น ๋ฅธ ์ก์ธ์ค๋ฅผ ํ์ฉํ๊ณ ํ์ผ ์กฐ๊ฐํ๋ฅผ ๋ฐฉ์งํ๋ ๊ณ ์ ํ๋ ๋์คํฌ ๊ณต๊ฐ
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น. ์ถ๊ฐ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ค์นํ ๋ ํ ๋น๋ ์ต๋ ์์ ๋๋ฌํ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ ์ผ๋ก ํ ๋น๋ฉ๋๋ค.
์๋ฒ์ ๊ฐ์ ๋จธ์ ์ด ๋ง์์๋ก ๋ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ํ๋ ๋ฐ ํ์ํ ํ๊ฒฝ์ ์ง์์ ์ธ ์ง์์ด ํ์ํฉ๋๋ค.
๋์ปค ์ปจํ ์ด๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ํํธ์จ์ด์ ๋๋ค. ์ปจํ ์ด๋์ ๊ฐ์ ๋จธ์ ์ ๋น์ทํ ์ด์ ์ด ์์ง๋ง ๋ค๋ฅด๊ฒ ์๋ํฉ๋๋ค. ์ปจํ ์ด๋๋ ๊ณต๊ฐ์ ๋ ์ฐจ์งํฉ๋๋ค. VM๋ณด๋ค ํธ์คํธ ์์คํ ์ ๊ณต์ ๋ฆฌ์์ค๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค. VM๊ณผ ๋ฌ๋ฆฌ ํ๋์จ์ด๊ฐ ์๋ OS ์์ค์์ ๊ฐ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ, ๋ ๋น ๋ฅธ ๋ฐฐํฌ ๋ฐ ๋ ์ฌ์ด ํ์ฅ์ ์ ๊ณตํฉ๋๋ค.
์ปจํ
์ด๋๋ ํธ์คํธ ์์คํ
์ ํ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์บก์ํ๋ฅผ ์ํ ๋ณด๋ค ํจ์จ์ ์ธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํตํด ์ปจํ
์ด๋๋ ์์คํ
์ ํต์ฌ์ ๊ณต์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๊ฐ ์ปจํ
์ด๋๋ ์์ฒด ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ธํธ(์์ฒด ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ)๊ฐ ์๋ ๊ธฐ๋ณธ OS์ ๋ณ๋ ํ๋ก์ธ์ค๋ก ์คํ๋ฉ๋๋ค. ๊ฐ ์ปจํ
์ด๋์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์ ๊ณ ์ ํ๋ฏ๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ํ ๋ฐ์ดํฐ๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
Docker์ ๊ธฐ๋ณธ OS๋ Linux(Docker๋ Windows ๋ฐ MacOS์์๋ ์ฌ์ฉํ ์ ์์)์ด๋ฉฐ ๋ถํ ์ปค๋์ ๊ตฌ์ฑํ ์ ์๋ ์ฃผ์ ์ด์ ์ ์ฌ์ฉํฉ๋๋ค. Windows์์ Docker ์ปจํ
์ด๋์ ์์์ Linux ๊ฐ์ ๋จธ์ ๋ด์์ ์ด๋ฃจ์ด์ง๋๋ค. ์ปจํ
์ด๋๋ ํธ์คํธ ์์คํ
์ OS๋ฅผ ๊ณต์ ํ๋ฉฐ ์ปจํ
์ด๋์ ์ฃผ์ OS๋ Linux์
๋๋ค.
์ปจํ ์ด๋ - ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ปจํ ์ด๋ ์ฝ๋์ ์ข ์์ฑ์ ๊ฒฐํฉํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ์ถ์ํ์ ๋๋ค. ์ปจํ ์ด๋๋ ํญ์ ์ด๋ฏธ์ง์์ ์์ฑ๋๋ฉฐ ์ฐ๊ธฐ ๊ฐ๋ฅํ ์ต์์ ๊ณ์ธต์ ์ถ๊ฐํ๊ณ ๋ค์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ์ปจํ ์ด๋์๋ ์์ฒด ์ฐ๊ธฐ ๊ณ์ธต์ด ์๊ณ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ํด๋น ๊ณ์ธต์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ปจํ ์ด๋๊ฐ ๋์ผํ ๋ง์คํฐ ์ด๋ฏธ์ง์ ๋ํ ์ก์ธ์ค๋ฅผ ๊ณต์ ํ ์ ์์ต๋๋ค.
๊ฐ ์ปจํ ์ด๋๋ ๋ฉ์ธ ์๋ฃจ์ ์ธ docker-compose.yml์ ํฌํจ๋ docker-compose ํ๋ก์ ํธ์ ํ์ผ์ ํตํด ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ปจํ ์ด๋ ์ด๋ฆ, ํฌํธ, ์๋ณ์, ๋ฆฌ์์ค ์ ํ, ๋ค๋ฅธ ์ปจํ ์ด๋ ๊ฐ์ ์ข ์์ฑ๊ณผ ๊ฐ์ ๋ค์ํ ๋งค๊ฐ ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค. ์ค์ ์์ ์ปจํ ์ด๋ ์ด๋ฆ์ ์ง์ ํ์ง ์์ผ๋ฉด Docker๋ ๋งค๋ฒ ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์์๋ก ์ด๋ฆ์ ํ ๋นํฉ๋๋ค.
์ปจํ ์ด๋๊ฐ ์ด๋ฏธ์ง์์ ์์๋๋ฉด Docker๋ ์๋ ๋ ์ด์ด ์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ํ์ผ ์์คํ ์ ๋ง์ดํธํฉ๋๋ค. ์ฌ๊ธฐ์์ Docker ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ค๋ ๋ชจ๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋ฉ๋๋ค.
Docker๊ฐ ์ปจํ
์ด๋๋ฅผ ์ฒ์ ์์ํ ๋ ์ด๊ธฐ ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ณ์ธต์ ๋น์ด ์์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ํด๋น ๋ ์ด์ด์ ์ ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ์ ์์ ํ๋ ค๋ ๊ฒฝ์ฐ ํด๋น ํ์ผ์ ์๋์ ์ฝ๊ธฐ ์ ์ฉ ๋ ์ด์ด์์ ์ฝ๊ธฐ-์ฐ๊ธฐ ๋ ์ด์ด๋ก ๋ณต์ฌ๋ฉ๋๋ค.
ํ์ผ์ ์ฝ๊ธฐ ์ ์ฉ ๋ฒ์ ์ ์ฌ์ ํ โโ์กด์ฌํ์ง๋ง ์ด์ ๋ณต์ฌ๋ณธ ์๋์ ์จ๊ฒจ์ง๋๋ค. ๋ณผ๋ฅจ์ ์ปจํ
์ด๋์ ์๋ช
์ฃผ๊ธฐ์ ๊ด๊ณ์์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ปจํ
์ด๋๊ฐ ์์ฑ๋๋ฉด ๋ณผ๋ฅจ์ด ์ด๊ธฐํ๋ฉ๋๋ค.
์ด๋ฏธ์ง๋ ์ปจํ ์ด๋์ ์ด๋ป๊ฒ ์ฐ๊ด๋์ด ์์ต๋๊น?
์ด๋ฏธ์ง - ๊ฐ ์ปจํ ์ด๋์ ์ฃผ์ ์์. ์ด๋ฏธ์ง๋ ํ๋ก์ ํธ์ ์ถ๊ฐ๋ Dockerfile์์ ์์ฑ๋๋ฉฐ, ํ์ผ ์์คํ (๊ณ์ธต) ์งํฉ์ด ์๋ก ๊ฒน์ณ์ง๊ณ ํจ๊ป ๊ทธ๋ฃนํ๋์ด ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ต๋ ๋ ์ด์ด ์๋ 127๊ฐ์ ๋๋ค.
๊ฐ ์ด๋ฏธ์ง์ ์ค์ฌ์๋ Dockerfile ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ ์ง์
์ ์ธ FROM ๋ช
๋ น์ผ๋ก ์ง์ ๋๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๊ฐ ์์ต๋๋ค. ๊ฐ ๊ณ์ธต์ ์ฝ๊ธฐ ์ ์ฉ ๊ณ์ธต์ด๋ฉฐ Dockerfile๋ก ์์ฑ๋ ํ์ผ ์์คํ
์ ์์ ํ๋ ๋จ์ผ ๋ช
๋ น์ผ๋ก ํ์๋ฉ๋๋ค.
์ด๋ฌํ ๋ ์ด์ด๋ฅผ ๋จ์ผ ์ด๋ฏธ์ง๋ก ๊ฒฐํฉํ๊ธฐ ์ํด Docker๋ Advanced multi-layered Union ํ์ผ ์์คํ
(AuFS๋ UnionFS ์์ ๊ตฌ์ถ๋จ)์ ์ฌ์ฉํ์ฌ ์๋ก ๋ค๋ฅธ ํ์ผ ๋ ์ด์ด์ ์๋ก ๋ค๋ฅธ ํ์ผ ๋ฐ ๋๋ ํฐ๋ฆฌ๋ฅผ ํฌ๋ช
ํ๊ฒ ๊ฒน์น๊ฒ ํ์ฌ ์ฐ๊ฒฐ๋ ํ์ผ ์์คํ
์ ์์ฑํฉ๋๋ค.
๋ ์ด์ด์๋ ๋ฐํ์ ๋ฐ ๋น๋ ์๊ฐ์ ๊ฐ ๋ ์ด์ด์ ๋ํ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ์ฅํ ์ ์๋ ๋ฉํ๋ฐ์ดํฐ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๊ฐ ๋ ์ด์ด์๋ ๋ค์ ๋ ์ด์ด์ ๋ํ ๋งํฌ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋ ์ด์ด์ ๋งํฌ๊ฐ ์์ผ๋ฉด ์ด๊ฒ์ด ์ด๋ฏธ์ง์ ์ต์์ ๋ ์ด์ด์ ๋๋ค.
Dockerfile์๋ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์ - ์ด๋ฏธ์ง ํ์ฑ์ ์ง์ ์ ;
- MAINTAINER - ์ด๋ฏธ์ง ์์ ์์ ์ด๋ฆ์ ๋๋ค.
- RUN - ์ด๋ฏธ์ง ์กฐ๋ฆฝ ์ค ๋ช ๋ น ์คํ;
- ADD - ํธ์คํธ ํ์ผ์ ์ ์ด๋ฏธ์ง์ ๋ณต์ฌํฉ๋๋ค. URL ํ์ผ์ ์ง์ ํ๋ฉด Docker๊ฐ ํด๋น ํ์ผ์ ์ง์ ๋ ๋๋ ํ ๋ฆฌ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
- ENV - ํ๊ฒฝ ๋ณ์;
- CMD - ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ปจํ ์ด๋ ์์ฑ์ ์์ํฉ๋๋ค.
- ENTRYPOINT - ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ๋ช ๋ น์ด ์คํ๋ฉ๋๋ค.
- WORKDIR์ CMD ๋ช ๋ น์ ์คํํ๊ธฐ ์ํ ์์ ๋๋ ํ ๋ฆฌ์ ๋๋ค.
- USER - ์ด๋ฏธ์ง์์ ์์ฑ๋ ์ปจํ ์ด๋์ UID๋ฅผ ์ค์ ํฉ๋๋ค.
- VOLUME - ํธ์คํธ ๋๋ ํ ๋ฆฌ๋ฅผ ์ปจํ ์ด๋์ ๋ง์ดํธํฉ๋๋ค.
- EXPOSE๋ ์ปจํ ์ด๋์์ ์ฒญ์ทจํ๋ ํฌํธ ์ธํธ์ ๋๋ค.
UnionFS๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ ๋์จFS โ Linux ๋ฐ FreeBSD์ฉ ์๋น์ค ์คํ ํ์ผ ์์คํ (FS). ์ด FS๋ ๊ธฐ๋ก ์ค ๋ณต์ฌ(Copy-On-Write, COW) ๋ฉ์ปค๋์ฆ์ ๊ตฌํํฉ๋๋ค. UnionFS์ ์์ ๋จ์๋ ๊ณ์ธต์ด๋ฉฐ ๊ฐ ๊ณ์ธต์ ๋ฃจํธ ์์ฒด์ ๋๋ ํ ๋ฆฌ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง ๋ณ๋์ ์์ ํ ํ์ผ ์์คํ ์ผ๋ก ๊ฐ์ฃผ๋์ด์ผ ํฉ๋๋ค. UnionFS๋ ๋ค๋ฅธ ํ์ผ ์์คํ ์ ๋ํ ํตํฉ ๋ง์ดํธ๋ฅผ ์์ฑํ๊ณ ๋ค๋ฅธ ํ์ผ ์์คํ (๋ธ๋์น๋ผ๊ณ ํจ)์ ํ์ผ๊ณผ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉ์์๊ฒ ํฌ๋ช ํ๊ฒ ๋จ์ผ ์ฐ๊ฒฐ๋ ํ์ผ ์์คํ ์ผ๋ก ํฌ๋ช ํ๊ฒ ๋ณํฉํ ์ ์๋๋ก ํฉ๋๋ค.
๋์ผํ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ๋๋ ํ ๋ฆฌ์ ๋ด์ฉ์ ๊ฒฐ๊ณผ ํ์ผ ์์คํ ์ ํ๋์ ๊ฒฐํฉ๋ ๋๋ ํ ๋ฆฌ(๋์ผํ ๋ค์์คํ์ด์ค ๋ด)์ ํจ๊ป ํ์๋ฉ๋๋ค.
UnionFS๋ ๋ค์ ์์น์ ๋ฐ๋ผ ๋ ์ด์ด๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
- ๋ ์ด์ด ์ค ํ๋๋ ์ต์์ ๋ ์ด์ด๊ฐ ๋๊ณ ๋ ๋ฒ์งธ ๋ฐ ํ์ ๋ ์ด์ด๋ ํ์ ๋ ์ด์ด๊ฐ ๋ฉ๋๋ค.
- ๋ ์ด์ด ๊ฐ์ฒด๋ "์์์ ์๋๋ก" ์ฌ์ฉ์๊ฐ ์ก์ธ์คํ ์ ์์ต๋๋ค. ์์ฒญ๋ ๊ฐ์ฒด๊ฐ "์์" ๊ณ์ธต์ ์์ผ๋ฉด "ํ์" ๊ณ์ธต์ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ์๋์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ฐํ๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด "ํ๋จ" ๋ ์ด์ด ๊ฐ์ฒด๊ฐ ๋ฐํ๋ฉ๋๋ค. ์์ฒญ๋ ๊ฐ์ฒด๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ "No such file or directory" ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๋ค.
- ์์ ๋ ์ด์ด๋ "์ต์์" ๋ ์ด์ด์ ๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ชจ๋ ์ฌ์ฉ์ ์์ ์ ํ์ ๋ ์ด์ด์ ์ฝํ ์ธ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ต์์ ๋ ์ด์ด์๋ง ๋ฐ์๋ฉ๋๋ค.
Docker๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค. Linux ์ปค๋์ด ์ ๊ณตํ๋ cgroup ๋ฐ ๋ค์์คํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์ด ์ด ์์ญ์ ํ์ค์ด ๋์์ต๋๋ค.
Docker๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋์ OS ํ๋ก์ธ์ค๋ก ์คํ๋๋ ๋ชจ๋ ์ปจํ ์ด๋ ๊ฐ์ OS ์ปค๋์ ๊ณต์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๊ฒ ๋ฐฐํฌํ๊ณ ํ์ผ ์์คํ ์ ์ต๋ํ ํ์ฉํ ์ ์์ต๋๋ค.
์ถ์ฒ : habr.com