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 -ypackage.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 backendhttps://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
읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기