# nodejs Dockerfile tips
## Type the following into the file. These statements produce a Dockerfile that describes the following:
- The base stage includes environment setup which we expect to change very rarely, if at all.
- Creates a new Docker image from the base image node:alpine. This base image has node.js on it and is optimized for small size.
- Add curl to the base image to support Docker health checks.
- Creates a directory on the image where the application files can be copied.
- Exposes application port 3001 to the container environment so that the application can be reached at port 3001.
- The build stage contains all the tools and intermediate files needed to create the application.
- Creates a new Docker image from node:argon.
- Creates a directory on the image where the application files can be copied.
- Copies package.json to the working directory.
- Runs npm install to initialize the node application environment.
- Copies the source files for the application over to the image.
- The final stage combines the base image with the build output from the build stage.
- Sets the working directory to the application file location.
- Copies the app files from the build stage.
- Indicates the command to start the node application when the container is run.
> Note: Type the following into the editor, as you may have errors with copying and pasting:
```yaml=
FROM node:alpine AS base
RUN apk -U add curl
WORKDIR /usr/src/app
EXPOSE 3001
FROM node:argon AS build
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
FROM base AS final
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
CMD [ "npm", "start" ]
```