Dockerfile ও Custom Image

লেসন ২৫ / ৩৮

📝 Dockerfile Example

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

🔧 Build & Push

docker build -t myapp:1.0 .
docker tag myapp:1.0 user/myapp:1.0
docker login
docker push user/myapp:1.0

📋 Instructions

FROM/WORKDIR/COPY/RUN/ENV/ARG
EXPOSE/USER/CMD/ENTRYPOINT/HEALTHCHECK

🎯 Multi-Stage (10x smaller!)

FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80

📦 .dockerignore

node_modules
.git
.env
*.log

⚡ Optimization

  • Alpine base (5-10x smaller)
  • Multi-stage build
  • Layer order: rarely-change first
  • Pin version, never :latest
  • Non-root user
  • BuildKit: DOCKER_BUILDKIT=1

🔍 Scan

docker scout cves myapp:1.0
trivy image myapp:1.0

🎓 মূল কথা ⭐

Multi-stage = 10x smaller। Alpine base = standard। .dockerignore essential। Never :latest in production।