๐ Docker๋ ๋ฌด์์ผ๊น?
๐ Docker ์ฌ์ฉ๋ฒ
๐ ํฌํธ ํฌ์๋ฉ
๐ Docker์ package.json
์๋ฒ๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์๋ ํ๊ฒฝ์ด ๊ฐ์ถฐ์ ธ์ผํ๋ค. ๊ณตํต๋ ํ๊ฒฝ์์ ๊ฐ์ ๊ฐ๋ฐํ๊ฒฝ์ผ๋ก ์์ ์ด ์ด๋ฃจ์ด์ ธ์ผ ์ถฉ๋์์ด ์๋ฒ๊ฐ ์ ์์ ์ผ๋ก ๋์๊ฐ๊ฒ ๋๋ค. ์๋ฅผ๋ค์ด Node.js, ์ธ์ด์ ๋ฒ์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค, node_modules ๋ฑ๋ฑ ์ค์นํด์ผ ํ๋ ๊ฒ๋ค์ด ํ๋๊ฐ์ง ์๋๋ค.
์์ ์๋ ์ด๋ฐํ ์ค์ ๋ค์ ํ์ฌ์์ ์บก์ฒํ๊ฑฐ๋ ๊ธฐ๋กํ์ฌ ์๋ก์ด ์ฌ๋์ด ๋ค์ด์ค๊ฑฐ๋ ํ ๋, ํ๊ฒฝ์ ์ผ์นํ๊ฒ ์ค์ ํ๋๋ก ํ์๋ค. ํ์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๋นํจ์จ์ ์ด๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Docker๊ฐ ํ์ํ๊ฒ ๋์๋ค.
Docker๋ ๊ฐ๋ฐํ๊ฒฝ ์์๋ค์ด ์ค์น๋ ๋ชจ์ต์ image(์ด๋ฏธ์ง)๋ก ์ ์ฅํ๋ค.
์ด๋ฌํ ์ด๋ฏธ์ง๋ค์ด ์๋ก ์ฐ๊ฒฐ๋์ด ๋์ํ๋ ์ค์ ์ Dockerfile๋ก ์ ์ฅํ๋ค.
๋ฐ๋ผ์ ํด๋น ๊ฐ๋ฐํ๊ฒฝ์ด ํ์ํ๋ค๋ฉด, ์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ฐ์ ์ฌ์ฉํ๋ฉด, ๊ฐ์ ๊ฐ๋ฐํ๊ฒฝ์ ๋ฐ๋ก ์ ์ฉํ ์ ์๋ค.
์ด๋ฌํ ๋์์ ๊ธฐ์กด ๊ฐ์๋จธ์ ๊ณผ ์ ์ฌํ๋ค. ํ์ง๋ง ๋์ปค๋ ๊ฐ์๋จธ์ ๋ณด๋ค ๋น ๋ฅด๊ณ , ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์๋์ ์ฌ์ง์ ๋ณด๊ฒ ๋๋ฉด, ๋์ปค๋ ๊ฐ์๋จธ์ ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ถ๊ฐ์ ์ธ ์ด์์ฒด์ ๋ฅผ ์ค์นํ์ง ์์ ํจ์จ์ ์ผ๋ก ์ด์ํ ์ ์๋ค.
๋ํ, ๋์ปค๋ ์ปจํ
์ด๋๋ก ๋ถ๋ฆฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ก ๋
๋ฆฝ๋์ด ์คํํ ์ ์๋ค.
๋์ปค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ฐ์ฅ ๋จผ์ , ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. ์ฌ๊ธฐ์ ์ด๋ฏธ์ง๋, ๋ง๋ค๋ ค ํ๋ ์ค์ ๋ค์ด ๋ฌถ์ฌ์ ธ ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ฐ๋ผ์ Dockerfile
์ด๋ผ๋ ์ด๋ฆ์ ํ์ผ์ ์๋กญ๊ฒ ์์ฑํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ฒ ๋๋ฉด ์ด๋ฏธ์ง๊ฐ ๋ง๋ค์ด์ง๊ฒ ๋๋ค.
FROM node:14
์ ์ต์ ๋ฒ์ ์ ๋ฆฌ๋
์ค๋ฅผ ์ค์นํ๋ ๊ฒ์ด๋ฉฐ, ํด๋น ์ด๋ฏธ์ง๋ node, npm, yarn ๋ฑ์ด ๋ชจ๋ ํจ๊ป ์ค์น๋์ด ์๋ ์ด๋ฏธ์ง์ด๋ค. ์ฆ, node, npm, yarn์ด ๋ชจ๋ ์ค์น๋ ๋ฆฌ๋
์ค ์ปดํจํฐ๊ฐ ํ๋ ์๊ธฐ๊ฒ ๋๋ ๊ฒ์ด๋ค.COPY ./index.js /index.js
๋ index.js์ ์๋ ๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ๊ฐ์ ์ปดํจํฐ์ index.js ํ์ผ๋ก ๋ณต์ฌํ์ฌ ์ ์ฅํ๋ ๊ฒ์ด๋ค. CMD node index.js
๋ ์ ์ฅ๋ ํ์ผ์ ์คํํด์ฃผ๋ ๋ช
๋ น์ด์ด๋ค.# ์ปดํจํฐ ๋ง๋๋ ์ค๋ช ์ # 1. ์ด์์ฒด์ ์ค์น(node 14๋ฒ์ ๊ณผ npm๊ณผ yarn์ด ๋ชจ๋ ์ค์น๋์ด์๋ ๋ฆฌ๋ ์ค) FROM node:14 # 2. ๋ด ์ปดํจํฐ์ ์๋ ํด๋๋ ํ์ผ์ ๋์ปค ์ปดํจํฐ ์์ผ๋ก ๋ณต์ฌํ๊ธฐ COPY ./index.js /index.js # 3. ๋์ปค์์์ index.js ์คํ์ํค๊ธฐ CMD node index.js
docker build
: ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
-docker build .
: ๋ชจ๋ ํ์ผ ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ
docker images
: ๋น๋๊ฐ ์๋ฃ๋ ์ด๋ฏธ์ง ์ ๋ณด ํ์ธํ๊ธฐ
docker run ์ด๋ฏธ์งID
: ์ด๋ฏธ์ง ์ฌ์ฉํ์ฌ ์๋ก์ด ์ปดํจํฐ ๋ง๋ค๊ธฐ
- ๊ฐ์ ์ปดํจํฐ ์์ฑํ๊ธฐ
- ์ด๋ฌํ ๊ฐ์ ์ปดํจํฐ๋ฅผ ์ปจํ ์ด๋๋ผ ํ๋ค.
docker ps
: ์คํ์ค์ธ ์ปจํ ์ด๋ ํ๋ก๊ทธ๋จ ๋ณด๊ธฐ
docker ps -a
: ์ข ๋ฃ๋ ์ปจํ ์ด๋๊น์ง ๋ชจ๋ ๋ณด๊ธฐ
docker rm ์ปจํ ์ด๋ID
: ์ปจํ ์ด๋ ์ญ์ ํ๊ธฐ
docker rmi ์ด๋ฏธ์งID
: ์ปจํ ์ด๋๋ง ์ญ์ ํ๋ค๊ณ ๋ชจ๋ ์ญ์ ๋๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์, ์ด๋ฏธ์ง๋ ์กด์ฌํ๋ค.๋ฐ๋ผ์ ์ ๋ช ๋ น์ด๋ ์ด๋ฏธ์ง๋ฅผ ์ญ์ ํ๋ ๋ช ๋ น์ด์ด๋ค.
docker exec -it ์ปจํ ์ด๋ID /bin/bash
: ์ปจํ ์ด๋ ๋ด๋ถ๋ก ๋ค์ด๊ฐ๊ธฐ
exit
: ์ปจํ ์ด๋ ๋ด๋ถ์์ ์ข ๋ฃํ์ฌ ๋์ค๊ธฐ
docker run -p 8000:3000 ์ด๋ฏธ์งID
: ํฌํธํฌ์๋ฉํ๊ธฐ
docker stop ์ปจํ ์ด๋ID
: ์ปจํ ์ด๋ ์ข ๋ฃํ๊ธฐ
dockerfile์ ๋ฐํ์ผ๋ก docker build
๋ช
๋ น์ด๋ฅผ ํตํด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ ๋ค. (docker build .
: ์ ์ฒด ๋น๋)
์์์ ํ์ตํ Dockerfile์์ local์ ์๋ ๋ชจ๋ ํ์ผ์ ๋ณต์ฌํ๊ฒ ๋๋ฉด, node_modules๊น์ง ํจ๊ป ๋ณต์ฌ๋์ด ํจ๊ป ์์
ํ๋ ์ฌ๋๋ผ๋ฆฌ node_modules์ ์ ๋ณด๊ฐ ๋ค๋ฅด๋ค๋ฉด, ์ถฉ๋์ด ์ผ์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ฐ๋ผ์, ๊ฐ์ ์ปดํจํฐ์์๋ node_modules๋ฅผ ์ ์ธํ๊ณ ๋ณต์ฌํ ๋ค, ์ค์น๋ฅผ ์งํํด์ผ ํ๋ค.
๋จผ์ , ๋ด ๋ก์ปฌ์์ node_modules๊ฐ ๋ณต์ฌ๋์ง ์๊ธฐ ์ํด .dockerignore
ํ์ผ์ ์์ฑํ๊ณ ๊ทธ ์์ node_modules๋ฅผ ์
๋ ฅํ์ฌ ๊ฐ์ ์ปดํจํฐ์์ ๋ณต์ฌ๊ฐ ์งํ๋ ๋, ํจ๊ป ๋ณต์ฌ๋๋ ๊ฒ์ ๋ฐฉ์ง ํ๋ค.
๋ค์์ผ๋ก, dockerfile์ RUN yarn install
์ ์ถ๊ฐํ๋ค.
# ์ปดํจํฐ ๋ง๋๋ ์ค๋ช ์ # 1. ์ด์์ฒด์ ์ค์น(node 14๋ฒ์ ๊ณผ npm๊ณผ yarn์ด ๋ชจ๋ ์ค์น๋์ด์๋ ๋ฆฌ๋ ์ค) FROM node:14 # 2. ๋ด ์ปดํจํฐ์ ์๋ ํด๋๋ ํ์ผ์ ๋์ปค ์ปดํจํฐ ์์ผ๋ก ๋ณต์ฌํ๊ธฐ COPY . /myfolder/ WORKDIR /myfolder/ RUN yarn install # 3. ๋์ปค์์์ index.js ์คํ์ํค๊ธฐ CMD yarn start:dev
์๋์ ์ฌ์ง์ ๋ณด๊ฒ ๋๋ฉด, ๋์ปค ์ฆ, ๊ฐ์ ์ปดํจํฐ๋ ํ์ฌ ๋ด์ปดํจํฐ์์ ์คํ์ด ๋๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ๋์ปค์์ express์๋ฒ๊ฐ ์ผ์ ธ์๋ค๊ณ ํ ๋, ๊ฐ์์ปดํจํฐ ์์์๋ 3000๋ฒ ํฌํธ๋ก ์ ์์ด ์๋์ง๋ง ๋ด ์ปดํจํฐ์์๋ 3000๋ฒ ํฌํธ์ ์๋ฌด๊ฒ๋ ์กด์ฌํ์ง ์์, ์ ์์ ํ ์ ์๋ค.
๋ฐ๋ผ์, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ ์ปดํจํฐ์ 3000๋ฒ ํฌํธ์ ๋ด ์ปดํจํฐ์ ํฌํธ๋ฅผ ์ฐ๊ฒฐํด์ผ ํ๋ค.
์ด๊ฒ์ ํฌํธ ํฌ์๋ฉ์ด๋ผ ํ๋ค.
๋ง์ฝ ์์ ํด์ผํ ์ฌํญ์ด ์๊ฒจ ์์ค์ฝ๋๋ฅผ ์์ ํ๊ฒ ๋๋ฉด, ๋์ปค๋ฅผ ์ข
๋ฃํ๊ฒ ์๋กญ๊ฒ ์ด๋ฏธ์ง๋ฅผ ์์ฑํด์ผ ํ๋ค.
๋ฐ๋ผ์ dockerfile์ ํตํด ๋ณต์ฌ๊ฐ ์งํ๋๊ณ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
ํ์ง๋ง ๋์ปค๋ ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ด์ฉ์์ ๋ณ๊ฒฝ์ ์ด ์๋ ๋ถ๋ถ์ ์๋ก buildํ์ง ์๊ณ ์์ฑ๋ ์บ์ ๋ถ๋ถ์ ๊ฐ์ ธ์ ์ฌ์ฉํ๋ค. ๋ฐ๋ผ์ ์ฒ์๋ถํฐ ์ค์นํ ํ์์์ด ๋น ๋ฅด๊ฒ ๋น๋๊ฐ ์งํ๋๋ค.
ํ์ง๋ง, ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋์ปค๋ ๋ณ๊ฒฝ์ ์ด ๋ฐ๊ฒฌ๋ ์์น๋ถํฐ ์๋๋ก ์บ์๋ฅผ ๋ฒ๋ฆฌ๊ณ ์๋กญ๊ฒ ๋ณต์ฌ๋ฅผ ์งํํ๋ค.
๋ฐ๋ผ์, ๋ง์ฝ yarn install์ด ์์ ๋ ์ฝ๋ ๋ฐ์ ์๋ค๋ฉด ํด๋น ํ์ผ์ ์๋ณด๊ฒ ๋ค์ ๋ฐ์์ผ ํ๊ธฐ ๋๋ฌธ์ ๋น๋ ๊ณผ์ ์์ ๋ง์ ์๊ฐ๊ณผ ์์์ด ์๋ชจ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด Dockerfile์ ์ต์ ํํด์ผํ๋ค.
๋จผ์ , node_modules๋ฅผ ์ค์นํ๊ณ ๊ทธ ์ดํ์ ๋๋จธ์ง ํ์ผ๋ค์ ์ค์นํ์ฌ node_modules๋ ์บ์ ํ์ผ๋ก ๋น ๋ฅด๊ฒ ํด๊ฒฐํ๊ณ ์์ ๋ ๋ถ๋ถ์ ๋ค์ ๋ฐ์ ํจ์จ์ ์ผ๋ก ๋น๋๋ฅผ ์งํ ํ ์ ์๋ค.
# ์ปดํจํฐ ๋ง๋๋ ์ค๋ช ์ # 1. ์ด์์ฒด์ ์ค์น(node 14๋ฒ์ ๊ณผ npm๊ณผ yarn์ด ๋ชจ๋ ์ค์น๋์ด์๋ ๋ฆฌ๋ ์ค) FROM node:14 # 2. ๋ด ์ปดํจํฐ์ ์๋ ํด๋๋ ํ์ผ์ ๋์ปค ์ปดํจํฐ ์์ผ๋ก ๋ณต์ฌํ๊ธฐ COPY ./package.json /myfolder/ COPY ./yarn.lock /myfolder/ WORKDIR /myfolder/ RUN yarn install COPY . /myfolder/ # 3. ๋์ปค์์์ index.js ์คํ์ํค๊ธฐ CMD yarn start:dev
docker๋ฅผ ํตํด ๊ฐ์ ์ปดํจํฐ๋ฅผ ๋ง๋ค๊ณ ํ๋์ ์ปดํจํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌ๋ฌ ์ปดํจํฐ์์ ๋์ํ๋ ๊ณผ์ ์ ์ค์ตํด ๋ณผ ์ ์์๋ค. docker๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ๋ฉด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก์ ์์์ ์ ์์๋ ๊ธฐ๋ถ์ด ๋ค์๋ค. ์ ์ฐจ ํ์ต๋์ด ๋ง์์ง๋ฉฐ ๋งค์ผ ๋ณต์ต์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค. ๊ทธ๋๋ ๋งค์๊ฐ ์ต์ ์ ๋คํ๋ฉฐ ๊ธ์ ์ ์ธ ๋ง์์ผ๋ก ํค์ณ๋๊ฐ ๊ฒ์ด๋ผ ๋ฏฟ๋๋ค!!!