Docker Study (9) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ์ฒด ์ดํดํ๊ธฐ ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ์ฒด ์ฟ ๋ฒ๋คํฐ์ค์์ ํด๋ฌ์คํฐ๋ด์ ๋ฆฌ์์ค๋ฅผ ์ถ์ํํ๊ธฐ ์ํด ๊ฐ์ฒด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. ์ฟ ๋ฒ๋คํฐ์ค ๊ฐ์ฒด๋ ์ฟ ๋ฒ๋คํฐ์ค์์ ์คํ๋๋ ์ ํ๋ฆฌ์ผ์ด์ , ์๋น์ค, ๋ณผ๋ฅจ, ๋คํธ์ํฌ ๋ฑ ๋ชจ๋ ๊ฒ์ ํํํ๋ค. ๋ช ๋ น์ ๋ฐฉ์๊ณผ ์ ์ธ์ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ ์ฟ ๋ฒ๋คํฐ์ค ์ ์ ํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค. Pod ๊ฐ์ฒด ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์คํ๋๋ ๊ฐ์ฅ ์์ ๋ฐฐํฌ๋จ์๋ก ์ปจํ ์ด๋๋ฅผ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ์์ค์ด๋ค. pod๋ ์ปจํ ์ด๋๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ฃนํํ๊ณ , ๋ณผ๋ฅจ ๋ฐ ๋คํธ์ํฌ ๋ค์์คํ์ด์ค์ ๊ฐ์ ๊ณต์ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋ค. deployment, replicaset ๋ฑ ๋ค์ํ ์ค๋ธ์ ํธ๋ฅผ ์ฌ์ฉํ์ฌ pod๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๋ค. pod๋ ํด๋ฌ์คํฐ ๋ด๋ถ IP์ฃผ์(๋ํดํธ๋ก ์์ฑ)๋ฅผ ๊ฐ.. Kubectl๊ณผ Minikube kubectl kubectl์ kubernetes CLI(command line interface) ๋๊ตฌ ์ค ํ๋๋ก ์ฟ ๋ฒ๋คํฐ์ค์ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๋ช ๋ น์ด ๋๊ตฌ์ด๋ค ํด๋ฌ์คํฐ์์ ์คํ ์ค์ธ ์ปจํ ์ด๋ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ค. pod๋ service ๋ฑ ๋ฆฌ์์ค๋ฅผ ์์ฑ ๋ฐ ์ญ์ , ๋ก๊ทธ ํ์ธ๋ฑ ๋ค์ํ ์์ ์ ํ๋ค. ํด๋ฌ์คํฐ์ ํต์ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๋ฐฐํฌํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ๋ง์คํฐ ๋ ธ๋์ ๋ช ๋ น์ ๋ณด๋ด ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ค. (๋ง์คํฐ ๋ ธ๋๊ฐ ํด๋ฌ์คํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.) Install brew install kubectl ์๋ ๋ช ๋ น์ด๋ก ์ต์ ๋ฒ์ ์ ํ์ธํ ์ ์๋ค. kubectl version --client minikube ๋ก์ปฌ ๊ฐ๋ฐ ํ ์คํธ์ฉ์ผ๋ก ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ฅผ ๊ตฌ์ถํ ์ ์๋ ๋๊ตฌ์ด๋ค. ๊ฐ์๋จธ์ .. Dockerfile ์ต์ ํ Multi-Stage Build(๋ฉํฐ์คํ ์ด์ง ๋น๋) Multi-Stage Build(๋ฉํฐ ์คํ ์ด์ง ๋น๋)๋? ๋จ์ผ ๋์ปค ํ์ผ์์ ์ฌ๋ฌ ๋จ๊ณ์ ๋น๋๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ฌ์ฉํ๋ ์ด์ ๋น๋ ๋๊ตฌ์ ๋ฐํ์ ํ๊ฒฝ์ ๋ถ๋ฆฌํ๊ณ ์คํ์ ํ์ํ ์ต์ํ์ ๊ตฌ์ฑ๋ง ํฌํจํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ํํ ์ ์์ต๋๋ค. ๋น๋ ๋๊ตฌ์ ๊ด๋ จ๋ ์ ๋ณด๋ค์ ์ธ๋ถ์ ๋ ธ์ถ์ํค์ง ์์ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค. ์ค๋ณต๋ ์์ ์ ํผํ๊ณ ์ด์ ๋จ๊ณ์ ์บ์๋ฅผ ํ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น๋ ์๋๊ฐ ํฅ์๋ฉ๋๋ค. Dockerfile Example ์๋๋ Create React App์ ๊ธฐ๋ฐ์ผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๊ณ Nginx๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ ํ์ผ์ ์๋นํ๋ Dockerfile์ ์์ฑํ ์์์ ๋๋ค. # node:18-alpine ๋ฒ ์ด์ค ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ฌ builder ์คํ ์ด์ง๋ฅผ ์์ํฉ๋๋ค. # alpi.. Kubernetes ์ํคํ ์ฒ์ ๊ฐ๋ ์ฟ ๋ฒ๋คํฐ์ค๋? ์ฟ ๋ฒ๋คํฐ์ค๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌํ๊ธฐ ์ํ ์คํ์์ค ํด์ ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ , ์๋ ๋ฐฐํฌ, ์ค์ผ์ผ๋ง, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ๋ณต๊ตฌ, ๋ชจ๋ํฐ๋ง ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ต๋๋ค. ํ์ฅ์ฑ๊ณผ ๊ฐ์ฉ์ฑ์ด ๋์ ๋๊ท๋ชจ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๊ธฐ์ ์ ํฉํฉ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์ํ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋์ํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ด ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฐ ์ด์์ ์ ์ฉํฉ๋๋ค. ์ ์ฌ์ฉํ ๊น? ์ฟ ๋ฒ๋คํฐ์ค๋ ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌ์ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํด ์ค๋๋ค. ์ปจํ ์ด๋ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌํ๊ณ , ํ์ฅํ๊ณ , ์ปจํ ์ด๋๊ฐ ์คํจํ ๊ฒฝ์ฐ ๋ชจ๋ํฐ๋งํ๋ ๋ฐฉ๋ฒ๊ณผ ์ปจํ ์ด๋๋ฅผ ๊ต์ฒดํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ ์ ์๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค... ๋์ปค ์ปดํฌ์ฆ ๋์ปค ์ปดํฌ์ฆ๋ ๋ค์ค ์ปจํ ์ด๋ ์ค์ ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๋ชจ๋ ์๋น์ค์ ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ์ฆ์ ์์ํ๊ณ ํ์ํ๋ค๋ฉด ํ์ํ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์ ํ๋์ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒ์ ์์ํ๊ฑฐ๋ ์ค๋จํ ์ ์์ต๋๋ค.(์ค์ผ์คํธ๋ ์ด์ ) docker build์ docker run ๋ช ๋ น์ ๋์ฒดํ ์ ์๋ ๋๊ตฌ์ ๋๋ค. ๋ค์์ docker build & docker run ๋ช ๋ น์ ํ๋์ ๊ตฌ์ฑ ํ์ผ๋ก ๊ฐ์ง๋๋ค. ๋๊ตฌ์๋ ๊ณต์ ํ ์ ์๋ ์ ์๋ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ตฌ์ฑํ์ผ์ ๊ฐ์ง๋๋ค. ์ด ๊ตฌ์ฑ ํ์ผ์ ํ์ฉํ ํ๋์ ๋ช ๋ น์ผ๋ก ์ ์ฒด ๋ค์ค ์ปจํ ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํ๊ฑฐ๋ ์ค๋จํ ์ ์์ต๋๋ค. ๋์ปค ์ปดํฌ์ฆ๋ Dockerfile, ์ด๋ฏธ์ง, ์ปจํ ์ด๋๋ฅผ ๋์ฒดํ์ง ์์ต๋๋ค. ๋์ปค ์ปดํฌ์ฆ๋ ๋ค์์ ํธ์คํธ์์ ๋ค์ค ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํ๋๋ฐ.. ๋์ปค ์ปจํ ์ด๋ ๊ฐ ํต์ ๋์ปค ์ปจํ ์ด๋ ๊ฐ์ ํต์ ์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ง๋ค์ด ๋ด ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์น API ๋ฐ ์จ ํผ์ด์ง์ ํต์ ํ ์ ์์ต๋๋ค.(WWW) ๋ถํ์ํ ๊ฒ์ ๋ณต์ฌํ์ง ์๋๋ก **.dockerignore**์ ์์ฑํฉ๋๋ค. .dockerignore node_modules Dockerfile .git API server(node) ๋์ปคํ FROM node // node: ๋ฒ์ ์ ๋ช ์ํ์ง ์์ผ๋ฉด ์ต์ ๋ฒ์ ์ ์ฌ์ฉ(๋ ธ๋ ๊ธฐ๋ณธ ์ด๋ฏธ์ง ์ฌ์ฉ) WORKDIR /app // ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ช ์ COPY package.json . // ์์ ๋๋ ํ ๋ฆฌ์ package.json ๋ณต์ฌ RUN npm install // ํ๋ก์ ํธ ์ข ์์ฑ์ ์ค์น COPY . . // ํ๋ก์ ํธ ํด๋ ๋ชจ๋ ํ์ผ์ ์ปจํ ์ด๋ ์์ ๋๋ ํ ๋ฆฌ์ ๋ณต์ฌ EXP.. ๋์ปค ๋ณผ๋ฅจ๊ณผ ๋ฐ์ธ๋ ๋ง์ดํธ ๋ณผ๋ฅจ vs ๋ฐ์ธ๋ ๋ง์ดํธ ๋์ปค ์ปจํ ์ด๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด ๋ณผ๋ฅจ๊ณผ ๋ฐ์ธ๋ ๋ง์ดํธ๋ผ๋ ๋ ๊ฐ์ง์ ์ธ๋ถ ๋ฐ์ดํฐ ์ ์ฅ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค. Volumes ์ปจํ ์ด๋ ์ธ๋ถ์ ํน์ ๋๋ ํ ๋ฆฌ์ ์ฐ๊ฒฐ๋ ๋์ปค ์ปจํ ์ด๋์ ๋ด๋ถ ๋๋ ํฐ๋ฆฌ์ ๋๋ค. ๋ณผ๋ฅจ์ ๋์ปค ๋ด์ฅ ๊ธฐ๋ฅ์ผ๋ก ๋์ปค๊ฐ ๊ด๋ฆฌํฉ๋๋ค. ๋ณผ๋ฅจ์ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๊ฒฝ์ฐ์๋ ์ง์๋๋ฉฐ ๊ณ์ ์กด์ฌํฉ๋๋ค. ๋ณผ๋ฅจ์ ๋์ปค๊ฐ ์ธ์ํ๋ ํธ์คํธ ๋จธ์ ์ธ ์ปดํจํฐ์ ์๋ ๋๋ ํฐ๋ฆฌ๋ก ๋์ปค ์ปจํ ์ด๋ ๋ด๋ถ์ ๋๋ ํฐ๋ฆฌ์ ๋งคํ๋ฉ๋๋ค. (์ปจํ ์ด๋ ๋ด๋ถ์ ํด๋์ ์ปจํ ์ด๋ ์ธ๋ถ ํด๋ ์ฐ๊ฒฐ) ์ต๋ช ๋ณผ๋ฅจ(Anonymous volumes) FROM node:16 WORKDIR /app COPY package.json . RUN npm install COPY . . EXPOSE 80 VOLUME [""] CM.. ๋์ปค ์ด๋ฏธ์ง์ ์ปจํ ์ด๋ ๋์ปค ์ด๋ฏธ์ง์ ์ปจํ ์ด๋ ๋์ปค ์์ง์์ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ๋จ์๋ ์ด๋ฏธ์ง์ ์ปจํ ์ด๋์ด๋ฉฐ, ์ด ๋ ๊ฐ์ง๊ฐ ๋์ปค ์์ง์ ํต์ฌ์ ๋๋ค. ์ด๋ฏธ์ง์๋ ์ฝ๋, ์ค์ , ์ฌ๋ฌ ๊ฒ๋ค์ด ํฌํจ๋๋ฉฐ ์ปจํ ์ด๋๋ ๊ทธ ์ด๋ฏธ์ง์ ์คํ ์ธ์คํด์ค์ ๋๋ค. ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์คํํฉ๋๋ค. ๋์ปค ์ด๋ฏธ์ง ์ด๋ฏธ์ง๋ ์ค์ ๋ก ์ฝ๋์ ์ฝ๋๋ฅผ ์คํํ๋๋ฐ ํ์ํ ๋๊ตฌ๋ฅผ ํฌํจํ ๊ฒ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ ๋ ํ์ํ ์์์ ๋๋ค. ์ฌ๋ฌ ๊ฐ์ ๊ณ์ธต์ผ๋ก ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ด ์กด์ฌํ๊ณ , ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์คํํ ๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ๋์ปค์์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง์ ์ด๋ฆ์ ๊ธฐ๋ณธ์ ์ผ๋ก [์ ์ฅ์ ์ด๋ฆ]/[์ด๋ฏธ์ง ์ด๋ฆ]:[ํ๊ทธ]๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ ์ฅ์: ์ด๋ฏธ์ง๊ฐ ์ ์ฅ๋ ์ฅ์๋ฅผ ์๋ฏธ(์๋ต ๊ฐ๋ฅ) ์ด๋ฏธ์ง ์ด๋ฆ: ์ด๋ฏธ์ง๊ฐ ์ด๋ค ์ญํ ์ ํ๋์ง ๋ํ๋ ๋๋ค. ์ด๋ฏธ์ง๋ ์๋ตํ ์ ์.. ์ด์ 1 2 ๋ค์