React 앱 도커화
해보자
우리는 다른 앱을 만들기 위한 기반 역할을 할 수 있는 docker를 사용하여 MERN Stack 상용구를 만들 것입니다.
A quick note: react is ready to go in production. but backend (nodejs) could be improved further. So you could also focus only on react!
pm2 등을 사용하여 nodejs API를 최적화한 경우 자유롭게 의견을 말하십시오.
이제 프로젝트를 생성해 봅시다.
project
└───backend
- index.js
- .env
└───frontend
먼저 백엔드와 프런트엔드를 생성한 다음 계속해서 도커화합니다.
먼저 백엔드를 설정하겠습니다.
$ cd backend
$ npm init
이 질문을 건너뛰고 싶다면$ npm init -y
package.json
를 생성합니다. package.json 파일에는 애플리케이션에 대한 일부 기본 정보와 앱에 대한 메타데이터가 포함되어 있습니다. 내부 추가package.json
추가:(ES 6 모듈 활성화, 가져오기 구문 사용 가능)"type": "module",
익스프레스 서버를 설치합시다.
$ npm i express
$ npm i dotenv
.env
를 아래와 같이 바꿉니다.NODE_ENV = development
PORT = 5000
index.js
를 아래 코드로 교체import express from 'express'
import dotenv from 'dotenv'
dotenv.config()
const app = express()
app.get('/', (req, res) => {
res.send('API is running')
})
const PORT = process.env.PORT || 5000
app.listen(PORT, () =>
console.log(`
Server running in ${process.env.NODE_ENV} mode on ${PORT} Port`)
)
앱이 실행 중인지 테스트
$ node backend/index.js
http://localhost:5000/
에서 사용할 수 있습니다.이제 프론트엔드를 해보자.
frontend 폴더 안에 있는지 확인하십시오. 반응 앱을 만들어 봅시다. 그러나 핫 리로딩은
react-scripts @5.0.0
에서 잘 작동하지 않습니다. (작성 당시)$ cd frontend
$ npx create-react-app ./
그래서 지금은 이것을 사용할 수 있습니다.$ cd root
$ npx create-react-app ./client --scripts-version 4.0.3
$ cd client
$ npm run start
앱은 https://localhost:3000/
에서 사용할 수 있습니다.Now we are going to dockerize our app.
도커 파일 서버
$ cd backend
.dockerignore
파일을 만듭니다.node_modules
Dockerfile
.gitignore
.git
확장자 없이
Dockerfile
를 생성합니다.FROM node:16.14.0-slim
#create app directory inside docker
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
#Bundle source code
COPY . .
EXPOSE 5000
CMD ["npm","run","dev"]
도커 이미지를 빌드해 보겠습니다
Server
.$ docker build -t backend .
컨테이너를 실행하려면$ docker run -p port 4000:5000 backend
핫 리로딩으로 실행하려면 이 명령을 사용하고 마지막에 컨테이너를 제거하십시오.$ docker run --rm -it -p 5000:5000 -v ${PWD}:/usr/src/app --name app-backend backend
https://localhost:4000/
에서 사용 가능Docker 파일
frontend
$ cd frontend
.dockerignore
파일을 만듭니다.node_modules
Dockerfile
.gitignore
.git
확장자 없이 만들기
Dockerfile
FROM node:16.14.0-slim
# Working directory
WORKDIR /user/src/frontend
# Install dependencies
COPY package*.json ./
RUN npm install
# Copy local files to frontend folder
COPY . .
EXPOSE 3000
CMD ["npm","start"]
프로덕션 빌드용 파일 만들기
Dockerfile.prod
FROM node:16.14.0-slim AS build-stage
ENV NODE_ENV production
# Add a work directory
WORKDIR /user/src/frontend
# ENV PATH /app/node_modules/.bin:$PATH
# Cache and Install dependencies
COPY package*.json ./
# COPY yarn.lock .
RUN npm install --production
# Copy app files
COPY . .
# Build the app
RUN npm run build
FROM nginx:1.21.6-alpine
ENV NODE_ENV production
# Copy built assets from builder
COPY --from=build-stage /user/src/frontend/build /usr/share/nginx/html
# Add your nginx.conf
COPY nginx/nginx.conf /etc/nginx/conf.d/default.conf
# Expose port
EXPOSE 80
# Start nginx
CMD ["nginx", "-g", "daemon off;"]
도커 작성
터미널을 통해 긴 명령을 입력하는 대신. Compose 파일을 사용하면 컨테이너를 쉽게 관리할 수 있습니다.
생성
docker-compose.yml
파일$ cd root
version: '3'
services:
frontend:
container_name: react-dev
build:
context: ./frontend
ports:
- 3000:3000
env_file: ./frontend/.env
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
volumes:
- ./frontend:/user/src/frontend
- /user/src/frontend/node_modules
프로덕션 빌드용 파일 만들기
docker-compose.prod.yml
(React에만 해당)$ cd root
version: '3'
services:
frontend:
container_name: react-prod
image: react-prod
build:
context: ./frontend
dockerfile: Dockerfile.prod
ports:
- 1337:80
env_file: ./frontend/.env
몇 가지 유용한 Docker 명령
실행 중인 모든 컨테이너를 표시합니다.
$ docker ps
또는 최신 버전$ docker container ls
실행 중이거나 종료된 모든 컨테이너를 표시하려면$ docker ps -a
또는 $ docker container --all
컨테이너 bash 세션을 실행합니다.$ docker exec -it <container name> bash
이미지 bash 세션을 실행합니다.$ docker run -it <image name> bash
$ docker run -it backend bash
그런 다음 $ node -v
노드 버전을 인쇄합니다.예를 들어 기본 이미지를 사용하기 전에 가져오려면
$ docker pull <image name>
$ docker pull node:16.14.0-slim
이미지(백엔드)를 컨테이너(앱-백엔드)로 실행합니다.$ docker run -p 2000:5000 --name app-backend backend
기존 컨테이너를 시작합니다.$ docker container start <container name>
기존 컨테이너를 중지합니다.$ docker stop <container name>
컨테이너를 제거하려면.$ docker rm <container name>
모든 컨테이너를 중지하려면$ docker stop $(docker ps -a -q)
모든 컨테이너를 제거하려면$ docker rm $(docker ps -a -q)
Malik-Idrees / 머른-템플릿-도커
MERN 스택 템플릿
다른 사용 사례를 위해 확장할 수 있는 MERN Stack 상용구를 만들 것입니다. 실행
locally
또는 실행Docker
.project
└───backend
└───frontend
└───.env
먼저 백엔드를 설정하겠습니다.
$ cd backend
$ npm init
이 질문을 건너뛰고 싶다면$ npm init -y
package.json
를 생성합니다. package.json 파일에는 애플리케이션에 대한 일부 기본 정보와 앱에 대한 메타데이터가 포함되어 있습니다. 내부 추가 package.json
추가:"type": "module",
Let's install express server
$ npm i express
$ npm i dotenv
Replace .env
with below:
NODE_ENV = development
PORT = 5000
index.js
를 아래 코드로 교체import express from 'express' import dotenv from 'dotenv' dotenv.config() const app = express() app.get('/', (req, res) => { res.send('API is running') }…
View on GitHub
추신: 어떻게든 반응 부분의 변경 사항이 repo에서 누락되었습니다. 풀 리퀘스트를 생성하세요!
링크드인:
GitHub: Link ⭐
Fiverr: imidrees ✨
읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(React 앱 도커화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/malikidrees/dockerizing-a-react-app-4f45텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)