# Build a docker Image ### Steps - Create a file in root directory of the project - Add in these contents - Base Image `FROM node:14` - Create app working directory `WORKDIR /usr/src/app` - Copy Dependencies ``` COPY package*.json ./ COPY yarn.lock ./ ``` - Install dependencies `RUN npm install` - Copy other source files `COPY . .` - Expose a port if required `EXPOSE 8080` - Run program `CMD ["node","index.js"]` - Should look like ``` # Base Image FROM node:14 # Create app directory WORKDIR /usr/src/app # Install app dependencies # A wildcard is used to ensure both package.json # AND package-lock.json are copied # where available (npm@5+) COPY package*.json ./ COPY yarn.lock ./ ## Install dependencies RUN npm install # If you are building your code for production # RUN npm ci --only=production # Bundle app source COPY . . # expose port EXPOSE 8080 # last command to execute the node program `node index` CMD [ "node", "index.js" ] ``` - Create a `.dockerignore` file in the same directory ``` node_modules npm-debug.log ``` - Building image Go to the directory that has your Dockerfile and run the following command to build the Docker image. The -t flag lets you tag your image so it's easier to find later using the docker images command: ``` docker build . -t <your username>/node-web-app ``` - Check and list your docker images ``` docker images ``` - Run your image ``` docker run -p 49160:8080 -d <your username>/node-web-app ``` - Limit CPU or other resources ``` $ docker run --cpus=2 -m 512m <image> ```