1
|
# STAGE 1 - build the react app # set the base image to build from
|
2
|
# This is the application image from which all other subsequent
|
3
|
# applications run. Alpine Linux is a security-oriented, lightweight #(~5Mb) Linux distribution.
|
4
|
FROM node:alpine as build
|
5
|
# set working directory
|
6
|
# this is the working folder in the container from which the app. # will be running from
|
7
|
WORKDIR /app
|
8
|
|
9
|
# add the node_modules folder to $PATH
|
10
|
ENV PATH /app/node_modules/.bin:$PATH
|
11
|
|
12
|
# copy package.json file to /app directory for installation prep
|
13
|
COPY ./package.json /app/
|
14
|
|
15
|
# install dependencies
|
16
|
RUN yarn --silent
|
17
|
|
18
|
# copy everything to /app directory
|
19
|
COPY . /app
|
20
|
|
21
|
# build the app
|
22
|
RUN yarn build
|
23
|
|
24
|
# STAGE 2 - build the final image using a nginx web server
|
25
|
# distribution and copy the react build files
|
26
|
FROM nginx:alpine
|
27
|
COPY --from=build /app/build /usr/share/nginx/html
|
28
|
|
29
|
# needed this to make React Router work properly
|
30
|
RUN rm /etc/nginx/conf.d/default.conf
|
31
|
COPY nginx/nginx.conf /etc/nginx/conf.d
|
32
|
|
33
|
# Expose port 80 for HTTP Traffic
|
34
|
EXPOSE 80
|
35
|
|
36
|
# start the nginx web server
|
37
|
CMD ["nginx", "-g", "daemon off;"]
|