Utilizing Docker for Containerizing Node.js Applications
Steps for containerizing Node.js applications using Docker to ensure consistency across development and production environments.
0 likes
9 views
Rule Content
{ "title": "Utilizing Docker for Containerizing Node.js Applications", "description": "Steps for containerizing Node.js applications using Docker to ensure consistency across development and production environments.", "category": "Node.js Cursor Rules", "rules": [ { "id": "docker-node-multi-stage-builds", "description": "Use multi-stage builds in Docker to create leaner and more secure images by separating build and production stages.", "recommendation": "Implement multi-stage builds in your Dockerfile to copy only necessary artifacts to the final image, reducing size and potential security risks.", "example": { "before": "FROM node:14\nWORKDIR /app\nCOPY . .\nRUN npm install\nCMD [\"node\", \"app.js\"]", "after": "FROM node:14 AS build\nWORKDIR /app\nCOPY . .\nRUN npm ci && npm run build\n\nFROM node:14-slim\nWORKDIR /app\nCOPY --from=build /app/dist ./\nCOPY package*.json ./\nRUN npm ci --production\nUSER node\nEXPOSE 8080\nCMD [\"node\", \"app.js\"]" }, "references": [ "https://www.woyce.io/nodejs/node-js-best-practices-2024/" ] }, { "id": "docker-node-non-root-user", "description": "Run Node.js applications in Docker containers as a non-root user to enhance security.", "recommendation": "Create and switch to a non-root user in your Dockerfile to minimize security risks associated with running containers as root.", "example": { "before": "FROM node:14\nWORKDIR /app\nCOPY . .\nRUN npm install\nCMD [\"node\", \"app.js\"]", "after": "FROM node:14\nWORKDIR /app\nCOPY . .\nRUN npm install\nRUN useradd -m appuser\nUSER appuser\nCMD [\"node\", \"app.js\"]" }, "references": [ "https://medium.com/@thakkarkinjal2000/top-best-practices-for-containerizing-node-js-web-applications-99e0746158d4" ] }, { "id": "docker-node-dockerignore", "description": "Use a .dockerignore file to exclude unnecessary files from the Docker image, reducing size and potential security risks.", "recommendation": "Create a .dockerignore file to prevent copying files like node_modules, .git, and local environment files into the Docker image.", "example": { "before": "No .dockerignore file present.", "after": "Create a .dockerignore file with the following content:\n\nnode_modules\n.git\n.env\nDockerfile\n.dockerignore" }, "references": [ "https://infinitejs.com/posts/streamline-nodejs-docker/" ] }, { "id": "docker-node-healthcheck", "description": "Implement health checks in Docker to monitor the application's status and ensure reliability.", "recommendation": "Add a HEALTHCHECK instruction in your Dockerfile to periodically check the application's health and enable automatic recovery if necessary.", "example": { "before": "FROM node:14\nWORKDIR /app\nCOPY . .\nRUN npm install\nCMD [\"node\", \"app.js\"]", "after": "FROM node:14\nWORKDIR /app\nCOPY . .\nRUN npm install\nHEALTHCHECK --interval=5s --timeout=3s CMD curl --fail http://localhost:3000 || exit 1\nCMD [\"node\", \"app.js\"]" }, "references": [ "https://artemee-lemann.medium.com/node-js-containerization-best-practices-38c05a3444b8" ] }, { "id": "docker-node-graceful-shutdown", "description": "Ensure Node.js applications handle termination signals to allow graceful shutdowns in Docker containers.", "recommendation": "Implement signal handlers in your Node.js application to manage SIGTERM and SIGINT signals, ensuring proper resource cleanup during container shutdown.", "example": { "before": "const express = require('express');\nconst app = express();\napp.listen(3000);", "after": "const express = require('express');\nconst app = express();\nconst server = app.listen(3000);\n\nprocess.on('SIGTERM', () => {\n server.close(() => {\n console.log('Process terminated');\n });\n});" }, "references": [ "https://unifiedguru.com/9-tips-for-containerizing-your-node-js-application-docker/" ] } ] }