

npx create-react-app <๋ฆฌ์กํธ๋ฅผ ์ค์นํ๊ณ ์ ํ๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ>npm run startnpm run testnpm run buildโ ์ด๋ ๊ฒ๊น์ง ํ๋ฉด ๋ฐฐํฌ๋ฅผ ํ ๋ ์ฌ์ฉํ ์ ์๋ build ํด๋์ ๊ทธ ์์ ๋ง์ ํ์ผ๋ค์ด ์์ฑ๋๋ค.




๊ฐ๋ฐ ํ๊ฒฝ์์์ ๋์ปค ํ์ผ ์์ฑ์ ํ์ฌ๊น์ง ๋์ปค ํ์ผ ์์ฑํ๋ ๊ฒ๊ณผ ๋๊ฐ์ด ํด์ฃผ๋ฉด ๋๋ค
dockerfile.dev๋ฅผ ์์ฑํด๋ณด์.FROM node:alpine
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install --
COPY ./ ./
CMD ["npm", "run", " start"]์ด๋ ๊ฒ ์์ฑ ํ์ ๋น๋๋ฅผ ์์ผ๋ณด๋ฉด ๋๋ค.
๋น๋๋ฅผ ํด๋ณด๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.

์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ํด๋น ๋๋ ํ ๋ฆฌ๋ง ์ ํด์ฃผ๋ฉด dockerfile์ ์๋์ผ๋ก ์ฐพ์์ ๋น๋ํ๋๋ฐ ํ์ฌ๋ dockerfile์ด ์๊ณ dockerfile.dev๋ฐ์ ์๋ค. ๋ฐ๋ผ์ ์๋์ผ๋ก ์ฌ๋ฐ๋ฅธ ๋์ปค ํ์ผ์ ์ฐพ์ง ๋ชปํด ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์์๋ก build ํ ๋ ์ด๋ค ํ์ผ์ ์ฐธ์กฐํ ๊ฒ์ธ์ง ์๋ ค์ฃผ๋ ์กฐ๊ฑด์์ถ๊ฐํ๋ฉด ๋๋ค.
๋ช
๋ น์ด๋ก docker build -f[Dockerfile.dev](http://Dockerfile.dev)./ ์ด๋ ๊ฒ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด๋๋ค.


์ฆ, ์ด๋ฐ์์ผ๋ก -f ์ต์
์ ์ด์ฉํด์ ํด๋ณด๋ฉด ๊ฐ๋ฐ ๋จ๊ณ์์ ๋ฆฌ์กํธ๋ฅผ ์คํํ๊ฒ ํด ์ค ์ด๋ฏธ์ง ๋น๋๊ฐ ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
๐ก ํ์ฌ ๋ก์ปฌ ๋จธ์ ์ node_modules ํด๋๊ฐ ์์ํ ๋ฐ ์ด๊ณณ์๋ ๋ฆฌ์กํธ ์ฑ์ ์คํํ ๋ ํ์ํ ๋ชจ๋๋ค์ด ๋ค์ด์์ง๋ง ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ ๋ ์ด๋ฏธ npm install๋ก ๋ชจ๋ ๋ชจ๋๋ค์ ๋์ปค ์ด๋ฏธ์ง์ ๋ค์ด ๋ฐ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ก์ปฌ์์ node_modules๋ฅผ ํ์๋กํ์ง ์๋ ๊ฐ์ ์ด ์กด์ฌ ๋ฐ๋ผ์ ๋์ปค ํ๊ฒฝ์์๋ node_modules๋ฅผ ์ง์์ค๋ ๋จ!!!
docker run [์ด๋ฏธ์ง ์ด๋ฆ] ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด localhost:3000์์ ์ฐฝ์ด ๋จ์ง ์๋๋ค. ์ด์ ๋ ์์ ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด ํฌํธ ๋งคํ์ ํด์ค์ผํ๋๋ฐ ์ ํด์คฌ๊ธฐ ๋๋ฌธ!

๋ฐ๋ผ์, **docker run -it -p 3000:3000 [์ด๋ฏธ์ง ์ด๋ฆ]**



**docker run -p 3000:3000 -v /usr/src/app/node_modules -v ${pwd}:/usr/src/app [์ด๋ฏธ์ง ์์ด๋]**



๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๊ณ ํ์ธํด๋ดใด ๋ธ๋ผ์ฐ์ ์ ์ ๋จ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.

์์ค์ฝ๋๋ฅผ ์์ ํ์ ๋ ์ค์๊ฐ์ผ๋ก ๋ฐ์์ด ๋๋ ๊ฒ๋ ํ์ธํ์๋ค.
์์ ์ผ๋ ๋ช ๋ น์ด๊ฐ ๋๋ฌด ๊ธธ์๋ค.
๊ทธ๋์ docker compose๋ฅผ ์ด์ฉํด์ ํด๊ฒฐํ๋ค.
์ผ๋จ docker-compose.yml ํ์ผ๋ถํฐ ์์ฑ์ํจ๋ค.
version: "3"
server:
react:
build:
context: .
dockerfile : Dockerfile.dev
ports:
- "3000:3000"
volumes:
- /usr/src/app/node_modules
- ./:/usr/src/app
stdin_open: true

์ด๋ ๊ฒ yaml ํ์ผ์ ๋ง๋ค์ด์ค ํ์ **docker-compose up** ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด ๋๋ค.
npm run test ๋ฅผ ์ฌ์ฉํ๊ธดํ๋๋ฐyaml ํ์ผ์์ ์ถ๊ฐ ์ฝ๋ ์์ฑ
tests:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- /usr/src/app/node_modules
- ./:/usr/src/app
command: ["npm","run","test"]
test : ์ปจํ ์ด๋ ์ด๋ฆ
์ด๋ ๊ฒ ๋ง๋ค์ด๋๊ณ ๋ณด๋ฉด ๊ธฐ์กด์ ์๋ ์ปจํ ์ด๋์ ํ ์คํธ๋ผ๋ ์ปจํ ์ด๋ ๋ ๊ฐ๊ฐ ๋ค ์์ํ๊ฒ ๋๋ค.
docker-compose up โbuild ๋ฅผ ์
๋ ฅํด์ฃผ๋ฉด ๋๋ค.


Nginx๋ฅผ ํฌํจํ๋ ๋ฆฌ์กํธ ์ด์ํ๊ฒฝ ์ด๋ฏธ์ง ์์ฑํด๋ณด๊ธฐ
๊ทธ ์ ์ ๊ฐ๋ฐํ๊ฒฝ๊ณผ ์ด์ํ๊ฒฝ์ ๋์ปค ๊ตฌ์กฐ ๋ณด๊ธฐ

Dockerfile
FROM node:alpine as builder
WORKDIR /usr/src/app
COPY package.json .
RUN npm install
COPY ./ ./
RUN npm run build
FROM nginx
COPY --from=builder /usr/src/app/build /usr/share/nginx/html

docker build -t ์ด๋ฏธ์ง์ด๋ฆ .
docker run -p 8080:80 ์ด๋ฏธ์ง ์ด๋ฆ (nginx์ ๊ธฐ๋ณธ ์ฌ์ฉํฌ๋๊ฐ 80)