snippetModeratepending
Dockerfile templates — Node.js, Python, and Go
Viewed 0 times
Dockerfilemulti-stagenon-rootalpinedistroless.dockerignore
dockerlinuxci-cd
Problem
Need optimized Dockerfiles for common stacks. Default Dockerfiles produce large images, have slow builds, and run as root. Need multi-stage builds with proper caching and security.
Solution
Production-ready Dockerfile templates for Node.js, Python, and Go with multi-stage builds, non-root users, and optimized layer caching.
Code Snippets
Multi-stage Dockerfiles for Node.js, Python, and Go
# === Node.js ===
FROM node:20-slim AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --production
FROM node:20-slim AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-slim
WORKDIR /app
RUN addgroup --system app && adduser --system --ingroup app app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=build /app/dist ./dist
COPY package.json ./
USER app
EXPOSE 3000
CMD ["node", "dist/index.js"]
# === Python ===
FROM python:3.12-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
WORKDIR /app
FROM base AS deps
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM base
RUN adduser --system --no-create-home app
COPY --from=deps /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=deps /usr/local/bin /usr/local/bin
COPY . .
USER app
EXPOSE 8000
CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:8000"]
# === Go ===
FROM golang:1.22 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags='-s -w' -o /app ./cmd/server
FROM gcr.io/distroless/static-debian12
COPY --from=build /app /app
USER nonroot:nonroot
EXPOSE 8080
ENTRYPOINT ["/app"]Revisions (0)
No revisions yet.