Docker๋ฅผ ์์๋ณด๊ธฐ ์ํด์๋ ์ปจํ ์ด๋์ ๊ฐ์ํ์ ๋ํด ๋จผ์ ์ด์ผ๊ธฐ๋ฅผ ํด์ผํ๋ค!
์ปจํ ์ด๋
๊ทธ๋ผ ์ปจํ ์ด๋๋ ๋ฌด์์ผ๊น?
์ํํธ์จ์ด์ SW๋ฅผ ์คํํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ๊ตฌ์ฑ ํ์ผ์ ํฌํจํ ์ํํธ์จ์ด ํจํค์ง๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ!
์ปจํ ์ด๋๊ฐ ์ ํ์ํ ๊น?
๋ง์ฝ FastAPI ์ Flask๋ฅผ ์ด์ฉํด ๊ฐ๊ฐ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ๋ก์ปฌ์ ์ง์ python ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ค์นํ๋ค๊ณ ์๊ฐํด๋ณด์
ํ๋ก์ ํธ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ ์ถฉ๋ ๋ฌธ์ , python ๋ฒ์ ์ถฉ๋ ๋ฌธ์ ๋ฑ๋ฑ ์ฌ๋ฌ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ ์ ์๋ค
=> ์ด๋ฅผ ์ํด ํ๋ก์ ํธ(์๋น์ค)๋ง๋ค ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด์ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌํ๋๊ฒ ์ข์!
Dockerfile์ ๋ง๋ค๊ณ ์ ํ๋ ์ปจํ
์ด๋์ ์ธ๋ถ์ฌํญ์ ์ ์ด๋์ ํ์ผ์ด๊ณ
Requirements.txt๋ ์ปจํ ์ด๋ ๋ด๋ถ์ ์ค์นํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ช ์ํด๋์ ํ์ผ์ด๋ค!
์ปจํ ์ด๋ ๊ธฐ์ ์ ํตํด ๊ฐ ์๋น์ค๋ง๋ค ์ฌ์ฉํ๋ ์์กด์ฑ์ ๊ฒฉ๋ฆฌํ์๋๊ฒ ํฌ์ธํธ!
๋ ํ๋์ ๊ฒฝ์ฐ๋ก๋ Environment Disparity๋ฅผ ์๊ฐํด๋ณผ ์ ์๋ค!
(๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ง์ง ์๋ ์ํ๋ฅผ Docker๋ก ํด๊ฒฐ ํ ์ ์์!)
๊ฐ์ ์ ๋ฌด๋ฅผ ํ๋ ์๋ฒ๊ฐ ์ฌ๋ฌ ๋ ์์ ๋, ๊ฐ ์๋ฒ๋ฅผ ์ด์ํ๊ธฐ ์ํ OS๋ถํฐ ์ปดํ์ผ๋ฌ, ์ค์น๋ ํจํค์ง ๊น์ง ๊ฐ์ ํ๊ฒฝ์ผ๋ก ๊ตฌ์ถํ๊ณ ์ํ๋ค!
์ ๋ง ์๋ฒฝํ๊ฒ ๋์ผํจ์ ๋ณด์ฅํ ์ ์์๊น?
๋ํ, Windows์์ ๊ฐ๋ฐ์ ์๋ฃํ ๋ค ์๋ฒ์ ์ ๋ก๋ํ์ ๋, ์๋ฒ์์ ๋ด ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ์๋ํจ์ ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ๋ณด์ฅํ ์ ์์๊น?
๊ทธ๋์ ํ์ฌ๊น์ง ์๋น์ค ์ฝ๋ ๊ฐ๋ฐ ์ดํ ๋ฐฐํฌ, ์ด์ ๋จ๊ณ์์ ์ ๋ฅผ ๋ง์ด ๋จน์๋ค
=> ์ปจํ ์ด๋ ๊ธฐ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ฐ ๋ฌธ์ ํด๊ฒฐ์ ๋์ด์ CI/CD, ๋ฌด์ค๋จ ๋ฐฐํฌ ๋ฑ ์์ฒญ๋ ๊ธฐ์ ๋ค์ด ๊ฐ๋ฅํจ
๊ฐ์ํ
ํ๋์จ์ด ๊ฐ์ํ
์ฌ์ง์์ ๋ณด์ด๋ ํ์ดํผ๋ฐ์ด์ ๊ฐ์ํ๊ฐ ํ๋์จ์ด๋ฅผ ๊ฐ์ํํ๋ ๊ฒ์ด๋ค!
=> ํ ๋์ ๋จธ์ ์์ ๋ค์์ ์ด์์ฒด์ ๋ฅผ ๋์์ ์คํํ๋ ์ํํธ์จ์ด
(Virtual box๋ฅผ ์๊ฐํ๋ฉด ๋จ)
ํธ์คํธ ๋จธ์ : ๊ฐ์ํ ์ํํธ์จ์ด(ํ์ดํผ๋ฐ์ด์ )๋ฅผ ๊ตฌ๋ํ๋ ๋ฌผ๋ฆฌ ์์คํ
๊ฒ์คํธ ๋จธ์ : ํ์ดํผ๋ฐ์ด์ ์์ ์ค์น๋๋ ๊ฐ์ ๋จธ์ (VM)
์ดํ๋ฆฌ์ผ์ด์ ๊ฐ์ํ
์ดํ๋ฆฌ์ผ์ด์ ๊ฐ์ํ๊ฐ ์ปจํ ์ด๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค!
์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ๊ฐ์ํ๋ ์ดํ๋ฆฌ์ผ์ด์ ์คํํ๊ฒฝ ์์ฒด๋ฅผ ๊ฐ์ํ ํ๋ ๊ฒ์
=> ํจํค์ง + ๊ฒฉ๋ฆฌ๋ ์คํ์ผ๋ก ์๋ฒ ํ๊ฒฝ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์ฌ๋์ ๊ฐ์ ์์ด ์๋์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅ!
๊ทธ๋ผ ๋ค์ ํ๋ฒ ์ปจํ
์ด๋์ ๋ํด ์๊ธฐํด๋ณด์๋ฉด
1. ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ๊ณผ ์ ํ๋ ๋ฆฌ์์ค๋ก ์ ์ด๋๋ ํ๋ก์ธ์ค
2. ์ด์์ฒด์ (์ปค๋) ์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ์ํ๋ ๊ณต๊ฐ
3. ๊ณต์ ์์์ ํ๋ก์ธ์ค๋ณ๋ก ํ ๋น์น๋งํผ๋ง ์ฌ์ฉํ๋๋ก ์ ํ
4. ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ๋ฑ ์คํ์ ํ์ํ ๋ชจ๋ ๊ฒ๋ค์ '์ด๋ฏธ์ง'๋ก ๋ชจ์ ํจํค์ง
ํจํค์ง๊ณผ ๊ฒฉ๋ฆฌ๊ฐ ๋ชฉ์ ์ด๋ผ๋ฉด VM๋ ๊ฐ๋ฅํ๋ฐ ์ ์ปจํ ์ด๋๋ฅผ ๋ ์์ฃผ ์ด์ฉํ ๊น?
๊ฐ์ ๋จธ์ ์ ๊ธฐ์กด ์๋ฒ์ ํ์ดํผ๋ฐ์ด์ ๋ฅผ ์ค์นํ๊ณ ๊ทธ ์์ ๊ฐ์ OS๋ฅผ ์ฌ๋ ค์ ํจํค์งํ VM์ ๋ง๋ค์ด์ ์คํํ๋ ๊ฒ์!
(ํ๋์จ์ด ๋ ๋ฒจ์ ๊ฐ์ํ)
=> ๊ฐ๋ณ VM์ ๋ ๋ฆฝ๋ OS๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๊ณ ๋ฆฝ์ฑ(๋ณด์)์ ๋ ์ข์ง๋ง ์ค๋ฒํค๋๊ฐ ํฌ๊ธฐ๋๋ฌธ์ ๋ฌด๊ฒ๊ณ ๋๋ฆผ
์ปจํ
์ด๋๋ ์ด์์ฒด์ ๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ดํ๋ฆฌ์ผ์ด์
์ ์คํํ ๋ชจ๋ ํ์ผ์ ํจํค์ง
(OS ๋ ๋ฒจ ๊ฐ์ํ)
=> ์ ์ ์ค๋ฒํค๋๋ก ๋ ๊ฐ๋ฒผ ํ๋ก์ธ์ค ์คํ + ์ปจํ ์ด๋ ๋ณต์ ๊ฐ ์ฉ์ดํจ
์ปจํ ์ด๋๋ ํธ์คํธ์ ์ปค๋์ ๊ณต์ ํ๋๋ฐ ๊ฐ์ํ๋ ๊ณต๊ฐ์ ์์ฑํ๊ธฐ ์ํด ๋ฆฌ๋ ์ค์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค
=> ํ๋ก์ธ์ค ๋จ์์ ๊ฒฉ๋ฆฌํ๊ฒฝ๊ณผ ๋ฆฌ์์ค ์ ๊ณต
๊ทธ๋์ ์ด์ ๋ ๊ฒฐ๊ตญ ์ฑ๋ฅ์ ์ฐจ์ด...
Docker
์ผ๋จ Docker๋ฅผ container๋ผ๊ณ ํ๋ ํํ์ ์๋ชป ๋จ! ๋์ปค๋ ์ปจํ ์ด๋ ์๋ฃจ์ ์ค ํ๋์
(๋์ปค ≠ ์ปจํ ์ด๋)
=> ์ปจํ ์ด๋๋ฅผ ๊ตฌ์ถํ๊ณ ์์ํ๋ ๋ฐ์ ํ์ํ ๋๊ตฌ๋ฅผ ํจํค์ง
์ ์๋ถํฐ ์ดํด๋ณด๋ฉด ๋์ปค(Docker)๋ ๋ฆฌ๋ ์ค์ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ํ๋ก์ธ์ค ๊ฒฉ๋ฆฌ ๊ธฐ์ ๋ค์ ์ฌ์ฉํด ์ปจํ ์ด๋๋ก ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์คํ ์์ค ํ๋ก์ ํธ์
Docker์ ์ฅ์
1. ๊ตฌ์ฑ ๋จ์ํ
=> ๋์ปค๋ ๋ชจ๋ ํ๋ซํผ์์ ์คํํ ์ ์๊ณ Dockerfle์ ์ ์ฒด ์ด์ ํ๊ฒฝ๋ณ์๋ฅผ ๋ด์ ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค
2. ๋น ๋ฅธ ๋ฐฐํฌ
=> ์ปจํ ์ด๋๋ ๋ณ๋์ OS๋ฅผ ๋ถํ ํ์ง ์๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฏ๋ก ์ปจํ ์ด๋๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ๊ณ ์คํํ ์ ์์
3. ์ฝ๋ ๊ด๋ฆฌ
=> Docker๋ ํ๊ฒฝ ์์ฒด๋ฅผ ๋ฐฐํฌํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ๋ฐ ์ฝ๋ฉ์ ํธํ๊ฒ ๋ง๋ค์ด ์ค
4. ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
=> ์๋ฅผ๋ค์ด CentOSํ๊ฒฝ์ ๋์ปค ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ์๋ Shared Volume ๊ธฐ๋ฅ์ ํตํด Windows ๋ก์ปฌ ํ๊ฒฝ์ ๋ฐ์ดํฐ๋ฅผ ํตํด ์์ค์ฝ๋๋ฅผ ์์ ํ ์ ์์ผ๋ฏ๋ก ์ ๋ฌด ํจ์จ์ด ํฅ์๋จ
5. ์ดํ๋ฆฌ์ผ์ด์ ๊ฒฉ๋ฆฌ
=> Web Server์ ์ฐ๊ฒฐ๋ API ์๋ฒ๋ค์ ๊ฒฉ๋ฆฌํด์ผํ๋ ๊ฒฝ์ฐ๋ค์ด ์๋๋ฐ ์ด ๋ ์๋ก ๋ค๋ฅธ ์ปจํ ์ด๋๋ฅผ ํตํด API ์๋ฒ๋ฅผ ์คํ์ํฌ ์ ์์!
Docker ์ํคํ ์ณ
Docker Engine์ ํด๋ผ์ด์ธํธ - ์๋ฒ ์ํคํ ์ณ๋ฅผ ๋ฐ๋ฅด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ค!
๊ตฌ์ฑ์์๋ฅผ ์ดํด๋ณด๋ฉด
1. Server(Docker_Host) + Docker daemon(dockerd)
=> ํด๋ผ์ด์ธํธ์ ๋ช ๋ น์ REST API๋ก ๋ฐ์ Dockered๋ผ๋ Docker daemon์ ํตํด ์ปจํ ์ด๋, ์ด๋ฏธ์ง, ๋คํธ์ํฌ, ๋ณผ๋ฅจ์ ๊ด๋ฆฌ
2. Docker client
=> Dockerd์ ๋ช ๋ น์ ์ ๋ฌํ๋ ์ปดํฌ๋ํธ๋ก docker ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด Docker API๊ฐ REST API ํ์์ผ๋ก dockerd์ ์์ผ์ ์ ๋ฌ๋จ
3. Image
=> ํ์ํ ํ๋ก๊ทธ๋จ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์์ค๋ฅผ ์ค์นํ ๋ค ๋ง๋ ํ๋์ ํ์ผ๋ก ๋์ปค ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊ธฐ ์ํ read-only ํ ํ๋ฆฟ์
(์ํ๊ฐ์ ๊ฐ์ง์ง ์๊ณ ๋ณํ์ง ์๋ ํน์ฑ์ด ์์)
4. Container
=> ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ฆฝ๋ ๊ณต๊ฐ์์ ์คํํ ๊ฐ์ํ๊ฒฝ
์ปจํ ์ด๋๋ ํฌ๊ฒ 2๊ฐ์ง๋ก ๋๋จ
์์คํ ์ปจํ ์ด๋ : ์ด์์ฒด์ ์์ ํ๋์จ์ด ๊ฐ์ํ ์์ด ์ด์์ฒด์ ๋ฅผ ์คํํจ
=> ๋ค์์ ํ๋ก์ธ์ค๊ฐ ๊ฐ์ ํ๊ฒฝ์ ๊ณต์ ํ๋ ๊ฒ์ ๋ชฉํ๋กํจ
์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋ : ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ (ํ๋ก์ธ์ค)๋ฅผ ์คํํ๋ ๊ฒ์ ๋ชฉํ๋กํจ
=> ํ์ฅ์ด ์ฝ๊ณ ์ด๊ฒ์ ๋ํ์ ์ธ ์ปจํ ์ด๋ ๋ฐํ์์ด Docker์!
Docker์ ๋ํ์ ์ธ ํน์ง
1. ์ด๋ฏธ์ง๋ฅผ ์ด์ฉํ ํจ์ฌ ๋ ์ฌ์ด ์ปจํ ์ด๋ ๊ตฌ์ถ ๋ฐ ๋ณดํธํ
2. ํน์ํ ์ํคํ ์ฒ(Layer)๋ฅผ ํตํ ์์ฌ์ด ๋ฐฐํฌ ๋ฐ ์ด๋ก ์ธํ ๊ฐ๋ ฅํ ์ปค๋ฎค๋ํฐ(Docker Hub) ์์ฑ
์ฌ๊ธฐ์ ๋งํ๋ Layer๋ ๋ฌด์์ผ๊น?
๊ธฐ์กด ์ด๋ฏธ์ง์ ์ถ๊ฐ์ ์ธ ํ์ผ์ด ํ์ํ ๋ ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์ง ์๊ณ , ํด๋น ํ์ผ์ ์ถ๊ฐํ๊ธฐ ์ํ ๊ฐ๋ ์ด๋ค
=> ๋์ปค ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ read-only layer๋ก ๊ตฌ์ฑ๋๊ณ , ํ์ผ์ด ์ถ๊ฐ๋๋ฉด ์๋ก์ด layer๊ฐ ์์ฑ๋๋ค
(ํ๋์ ํ์ผ์์คํ ์ผ๋ก์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค)
Docker Registry
๋์ปค ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํด์ ๊ณต์ ํ๋ ์ ์ฅ์๋ฅผ Docker Registry๋ผ๊ณ ํ๋ค
(์ ์ฌ์ง์ ์ฐธ๊ณ )
๋์ปค์ ๊ณต์ ๋ ์ง์คํธ๋ฆฌ์ธ Docker Hub๋ฅผ ํตํด ๋ค๋ฅธ ๋์ปค ์ฌ์ฉ์๋ค์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฉฐ docker pull, docker run ๋ฑ์ CLI ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ํ์ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์!
Docker๋ก ์ด๋ป๊ฒ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค๊น?
Dockerfile : ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ
=> ์ปจํ ์ด๋ ๋ด๋ถ์ ์ค์นํ ์ํํธ์จ์ด, ์ค์ ๊ฐ, ์คํ ๋ช ๋ น์ด๋ค์ ๋ช ์
# Dockerfile
# Use the official Python image from the Docker Hub
FROM python:3.9-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install FastAPI and Uvicorn
RUN pip install fastapi uvicorn
# Make port 8000 available to the world outside this container
EXPOSE 8000
# Run the FastAPI server
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
FROM : ์์ฑํ ์ด๋ฏธ์ง์ ๋ฒ ์ด์ค ์ด๋ฏธ์ง ์ง์
WORKDIR :๋ช ๋ น์ด๋ฅผ ์คํํ ๋๋ ํ ๋ฆฌ ์ค์ (bash์ cd ๋ช ๋ น์ด์ ์ ์ฌ)
COPY : Docker ์ธ๋ถ์ ํ์ผ์ ๋ณต์ฌํ์ฌ ๋ด๋ถ์ ์ถ๊ฐ
RUN : ์ด๋ฏธ์ง ๋น๋ ์์ ์ ์คํ๋๋ ๋ช ๋ น์ด
EXPOSE :์ด๋ฏธ์ง์์ ๋ ธ์ถํ ํฌํธ
CMD : ์ปจํ ์ด๋ ์์ฑ ์ ์คํ๋๋ ๋ช ๋ น์ด(Dockerfile์์ ํ๋ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅ)
Docker Image : ์ปจํ ์ด๋ ์คํ์ ํ์ํ ํ์ผ๊ณผ ์ค์ ๊ฐ๋ค์ ํฌํจํ๊ณ ์๋ ํ์ผ
์๋น์ค ์ด์์ ํ์ํ ์๋ฒ ํ๋ก๊ทธ๋จ, ์์ค์ฝ๋/๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ปดํ์ผ๋ ์คํ ํ์ผ์ ๋ฌถ๋ ํํ์ด๋ค!
=> ํน์ ํ๋ก์ธ์ค(์ปจํ ์ด๋)๋ฅผ ์คํํ๊ธฐ ์ํ ๋ชจ๋ ํ์ผ๊ณผ ์ค์ ๊ฐ(ํ๊ฒฝ)์ ๊ฐ์ง
Docker Container : ์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ
์ด๋ฏธ์ง๋ฅผ ์คํํ ์ํ๋ก ํ๋ก๊ทธ๋จ์ ์ข ์์ฑ๊ณผ ํจ๊ป ํ๋ก๊ทธ๋จ ์์ฒด๋ฅผ ํจํค์ง/์บก์ํํ์ฌ ๊ฒฉ๋ฆฌ๋ ๊ณต๊ฐ์์ ํ๋ก์ธ์ค๋ฅผ ๋์์ํค๋ ๊ธฐ์ ์ด๋ค!
=> ์ปจํ ์ด๋๋ ์ปค๋ ๊ณต๊ฐ๊ณผ ํธ์คํธ OS ์์(์์คํ ์ฝ)์ ๊ณต์ ํจ
'๐ Infra > Docker' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Virtual Machine vs Container (๊ฐ์ํ ๊ธฐ์ ์ ๋ํด) (0) | 2024.11.17 |
---|