개발/docker

docker로 react 빌드하기

덤벨로퍼 2020. 5. 3. 16:41

docker로 react app 을 빌드하려할때 이미 빌드할때 수많은 npm 패키지들을 설치했으므로

또 다시 설치하는것을 막아야한다.

그리고 nginx 를 사용해 web server 를 만들어야 하는데 이때는 node 가 아닌 nginx 베이스이미지를 써야한다.

 

그래서 두단계로 나누어진행한다.

1단계에서 node 이미지로 npm install 을 하고 run build 를 한다.

2단계에서 nginx 이미지로 run build의 결과물을 카피한후 start nginx 한다.

 

#build phase
FROM node:alpine as builder
WORKDIR '/app'
COPY package.json .
RUN npm install
COPY . .
RUN npm run build

1단계를 Dockerfile 에 작성한다.

2단계는 그 아래에 작성하면 된다. 

# run phase
FROM nginx
# build 폴더 복사 , 다른 phase 에서 가져옴
# nginx port 
EXPOSE 80
# from , destination
COPY --from=builder /app/build /usr/share/nginx/html
#start 는 디폴트

 

여기서 카피하는것은 오직 컨테이너안의 /app/build 폴더이다.

 

이후에 docker build . 를 시작하면 정상으로 빌드된다.

ganghwiui-MacBook:frontend hwi$ docker build .
Sending build context to Docker daemon  1.455MB
Step 1/8 : FROM node:alpine as builder
 ---> 483343d6c5f5
Step 2/8 : WORKDIR '/app'
 ---> Using cache
 ---> 1d63fd9533c7
Step 3/8 : COPY package.json .
 ---> Using cache
 ---> 9276db72e695
Step 4/8 : RUN npm install
 ---> Using cache
 ---> cd2574325348
Step 5/8 : COPY . .
 ---> 6d8eb032e3e2
Step 6/8 : CMD ["npm","run","start"]
 ---> Running in e2342cbae115
Removing intermediate container e2342cbae115
 ---> a922643c9385
Step 7/8 : FROM nginx
latest: Pulling from library/nginx
54fec2fa59d0: Pull complete 
4ede6f09aefe: Pull complete 
f9dc69acb465: Pull complete 
Digest: sha256:86ae264c3f4acb99b2dee4d0098c40cb8c46dcf9e1148f05d3a51c4df6758c12
Status: Downloaded newer image for nginx:latest
 ---> 602e111c06b6
Step 8/8 : COPY --from=builder /app/build /usr/share/nginx/html
 ---> 40174cdd0e96
Successfully built 40174cdd0e96

 docker run -p 8080:80 40174cdd0e96

이렇게 포트 지정한후 ( 8080은 내맘, 80 은 Nginx 디폴트 포트) 실행하면 성공적으로 빌드할수있다.