๐ฆ Docker Custom Images + Node Server Dockerization Cheatsheet ๐
Learn to build, optimize, and run custom Docker images for Node.js applications like a pro.
๐ 1. Folder Structure for a Dockerized Node App
my-app/
โโโ Dockerfile
โโโ .dockerignore
โโโ package.json
โโโ package-lock.json
โโโ index.js
๐ ๏ธ 2. Create a Custom Docker Image for Node.js App
โ
Sample Optimized Dockerfile
# ๐ท Stage 1: Build
FROM node:20-alpine AS builder
# Set working directory
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm ci
# Copy source code
COPY . .
# ๐งผ Prune dev dependencies
RUN npm prune --production
# ๐ Stage 2: Run
FROM node:20-alpine
WORKDIR /app
# Copy from builder stage
COPY --from=builder /app .
# Set environment and expose port
ENV NODE_ENV=production
ENV PORT=8000
EXPOSE 8000
# Run the app
CMD ["npm", "start"]
๐ซ 3. .dockerignore File (Very Important!)
node_modules
.dockerignore
Dockerfile
npm-debug.log
.git
.env
Prevents unnecessary files from being copied into your image, reducing build time and size.
โ๏ธ 4. Build & Run Docker Image for Node App
๐งฑ Build the Image
# ๐งช Build with a custom tag
docker build -t my-node-app .
๐ Run the Container
# ๐งช Run interactively
docker run -p 8000:8000 my-node-app
# ๐งช Run in background
docker run -d -p 8000:8000 my-node-app
๐ Run with Mount (Dev Mode - Hot Reload)
docker run -v ${PWD}:/app -p 8000:8000 my-node-app
Mounts your current directory inside the container, ideal for development.
๐ 5. Inspect, Debug, and Clean Containers
โ List Containers & Images
docker ps # Running containers
docker ps -a # All containers
docker images # Local images
๐ Stop & Remove
docker stop <id> # Stop container
docker rm <id> # Remove container
docker rmi my-node-app # Remove image
๐ช Exec Into a Container
docker exec -it <id> /bin/sh # Alpine or BusyBox
docker exec -it <id> /bin/bash # Ubuntu-based
๐ Logs & Details
docker logs <id> # Show logs
docker inspect <id> # Low-level config info
docker history my-node-app # See image layers
๐งผ 6. Prune & Clean Docker Environment
docker container prune # Remove stopped containers
docker image prune # Remove dangling images
docker volume prune # Clean volumes
docker system prune -a # Remove all unused data
๐ก๏ธ 7. Best Practices for Custom Docker Images
| Practice | Benefit |
|---|---|
Use alpine base |
Reduces image size drastically ๐ |
| Multi-stage builds | Keep final image clean & minimal ๐งผ |
Set .dockerignore
|
Avoid bloat, faster builds โก |
| Cache dependencies | Speeds up builds ๐ฏ |
| Pin base image versions | Prevents future breaking changes ๐ |
| Avoid root user | Increases container security ๐ |
Clean caches in RUN steps |
Reduces leftover junk ๐๏ธ |
๐ 8. Example Node.js Server (index.js)
// index.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 8000;
app.get('/', (req, res) => {
res.send('Hello from Dockerized Node Server ๐');
});
app.listen(PORT, () => {
console.log(`Server running on http://localhost:${PORT}`);
});
๐ 9. Image Size Analyzer Tools
docker history my-node-app # View layers and size
docker image inspect my-node-app
# Use Dive CLI tool
dive my-node-app
# Use DockerSlim to shrink it
docker-slim build my-node-app
๐งช 10. Docker Compose (Bonus)
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
volumes:
- .:/app
environment:
- NODE_ENV=production
# Run with:
docker-compose up --build
โ Summary of Key Docker Commands for Node Server
| Task | Command |
|---|---|
| ๐งฑ Build Image | docker build -t my-node-app . |
| ๐ Run Container | docker run -p 8000:8000 my-node-app |
| ๐ View Running | docker ps |
| ๐ Stop Container | docker stop <id> |
| ๐๏ธ Prune Containers | docker container prune |
| ๐งผ Clean All | docker system prune -a |
๐ Bonus Tip
๐ก To auto-rebuild and restart on file changes during dev:
npm install -D nodemon
Update package.json:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
Then in Dockerfile:
RUN npm install --only=production
# OR use dev mode in compose
Top comments (0)