Files
docker-multistep-nodejs-build/Dockerfile
Dave Jansen b170e9ce01 Switch back to using specific node versions
+ added description block encouraging and reminding people to set the specific version their application needs.
2019-12-07 12:07:09 +09:00

77 lines
2.6 KiB
Docker

#################################################################
# Step 1: Initial build using the `yarn build` command #
#################################################################
# Note: Make sure the right version of node your application #
# requires is set here and in all other build steps. #
#################################################################
FROM node:13 as build
# Prepare the build directory
RUN mkdir -p /opt/build;
WORKDIR /opt/build
# If your build step requires environment variables too, add them here
# Copy required files
# Note: I specify each file directly here to avoid copying over
# existing /dist folder or other dev files like .env
COPY ./src ./src
COPY [ "package.json", "yarn.lock", "tsconfig.json", "./" ]
RUN yarn install --no-progress && yarn build
#################################################################
# Step 2: Fetch production-only dependencies #
#################################################################
# Note: Make sure the right version of node your application #
# requires is set here and in all other build steps. #
#################################################################
FROM node:13 as dependencies
# Set environment to production
ENV NODE_ENV='production'
RUN mkdir -p /opt/build;
WORKDIR /opt/build
COPY --from=build [ "/opt/build/package.json", "/opt/build/yarn.lock", "./" ]
RUN yarn install --production=true --no-progress
#################################################################
# Step 3: Build done, create the deployable/runnable image step #
#################################################################
# Note: Make sure the right version of node your application #
# requires is set here and in all other build steps. #
#################################################################
FROM node:13-slim as release
# Set environment to production
ENV NODE_ENV='production'
# Prepare the app directory
RUN mkdir -p /opt/app;
WORKDIR /opt/app
# Add any and all environment variables your application needs here:
ENV JWT_SECRET= \
PORT=80
# Copy dependencies and compiled application from previous steps
COPY --from=dependencies /opt/build/node_modules /opt/app/node_modules
COPY --from=build /opt/build/dist /opt/app/dist
WORKDIR /opt/app
# Run the application using node
ENTRYPOINT [ "node", "dist/index.js" ]
# Alternatively: Run your application using Forever (ensure this is installed as a dependency first)
# See: https://github.com/foreversd/forever
# ENTRYPOINT [ "./node_modules/.bin/forever", "./dist/index.js" ]