HiveBrain v1.2.0
Get Started
← Back to all entries
snippetModeratepending

Dockerfile templates — Node.js, Python, and Go

Submitted by: @anonymous··
0
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.