0. 도커 설치

1. /nginx.conf 작성

server {
    listen 3000;
    
    location / {
        root /var/www/http;
        index  index.html;
        try_files $uri $uri/ /index.html;
    }
}

추가: 리액트 접근 base url이 / 가 아니고 /webgl 꼴인 경우

server {
    listen 3000;
    
    # 기존 location 블록
    location / {
        root /var/www/http;
        index  index.html;
        try_files $uri $uri/ /index.html;
    }

    # /webgl/로 시작하는 요청 처리
    location ~ ^/webgl/(.+) {
        rewrite ^/webgl/(.+) /$1 last;
    }
}

2. /Dockerfile 작성

"scripts": {
    "build": "react-scripts build"
},
########################################################################
#                stage-0 : node 소스코드 빌드                           #
########################################################################
FROM node:20.5-alpine3.17

# 이미지 내에서 명령어를 실행할 디렉토리 설정
WORKDIR /usr/src/app

COPY . .

# 빌드 
RUN npm install
RUN npm run "build"

########################################################################
#             stage-1 : 빌드된 어플리케이션 nginx로 제공                 #
########################################################################
FROM nginx:1.21.6-alpine

# state:0에서 빌드된 파일을 /var/www/http 로 복사
COPY --from=0 /usr/src/app/build /var/www/http
# nginx 설정파일 복사
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

CMD ["nginx", "-g",  "daemon off;"]

3. 리액트 프로젝트 리포지토리 준비

4. 도커 명령어

docker build -t react-example-im:latest /home/ubuntu/react-example/
docker run -d --name react-example-con -p 3000:3000 react-example-im:latest

5. 도커 이미지/컨테이너 재생성 명령어

# 1. ID 확인
docker ps
docker images

# 2. 제거
docker rm -f {컨테이너ID}
docker rmi -f {이미지ID}

# 3. 다시 생성
docker build -t react-example-im:latest /home/ubuntu/react-example/
docker run -d --name react-example-con -p 3000:3000 react-example-im:latest