Python
Este ejemplo muestra cómo migrar una aplicación Python a Docker Hardened Images.
Los siguientes ejemplos muestran los Dockerfiles antes y después de la migración a Docker Hardened Images. Cada ejemplo incluye cinco variaciones:
- Before (Ubuntu): Un Dockerfile de ejemplo que utiliza imágenes basadas en Ubuntu, antes de migrar a DHI.
- Before (Wolfi): Un Dockerfile de ejemplo que utiliza imágenes de la distribución Wolfi, antes de migrar a DHI.
- Before (DOI): Un Dockerfile de ejemplo que utiliza Docker Official Images, antes de migrar a DHI.
- After (multi-stage): Un Dockerfile de ejemplo tras migrar a DHI con compilaciones multi-stage (recomendado para obtener imágenes mínimas y seguras).
- After (single-stage): Un Dockerfile de ejemplo tras migrar a DHI con compilaciones de una sola etapa (más simple, pero da como resultado una imagen más grande con una superficie de ataque más amplia).
NoteSe recomiendan las compilaciones multi-stage para la mayoría de los casos de uso. Las compilaciones de una sola etapa son compatibles por simplicidad, pero conllevan desventajas en cuanto a tamaño y seguridad.
Debes autenticarte en
dhi.ioantes de poder descargar Docker Hardened Images. Usa tus credenciales de Docker ID (el mismo usuario y contraseña que usas para Docker Hub). Si no tienes una cuenta de Docker, crea una de forma gratuita.Ejecuta
docker login dhi.iopara autenticarte.
#syntax=docker/dockerfile:1
FROM ubuntu/python:3.13-24.04_stable AS builder
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
FROM ubuntu/python:3.13-24.04_stable
WORKDIR /app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY app.py ./
COPY --from=builder /app/venv /app/venv
ENTRYPOINT [ "python", "/app/app.py" ]#syntax=docker/dockerfile:1
FROM cgr.dev/chainguard/python:latest-dev AS builder
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache gcc musl-dev
RUN pip install --no-cache-dir -r requirements.txt
FROM cgr.dev/chainguard/python:latest
WORKDIR /app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY app.py ./
COPY --from=builder /app/venv /app/venv
ENTRYPOINT [ "python", "/app/app.py" ]#syntax=docker/dockerfile:1
FROM python:latest AS builder
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
# Instalar paquetes adicionales si es necesario usando apt
# RUN apt-get update && apt-get install -y gcc && rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir -r requirements.txt
FROM python:latest
WORKDIR /app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY app.py ./
COPY --from=builder /app/venv /app/venv
ENTRYPOINT [ "python", "/app/app.py" ]#syntax=docker/dockerfile:1
# === Etapa de compilación: Instalar dependencias y crear entorno virtual ===
FROM dhi.io/python:3.13-alpine3.21-dev AS builder
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache gcc musl-dev
RUN pip install --no-cache-dir -r requirements.txt
# === Etapa final: Crear la imagen de ejecución mínima ===
FROM dhi.io/python:3.13-alpine3.21
WORKDIR /app
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
COPY app.py ./
COPY --from=builder /app/venv /app/venv
ENTRYPOINT [ "python", "/app/app.py" ]#syntax=docker/dockerfile:1
FROM dhi.io/python:3.13-alpine3.21-dev
ENV LANG=C.UTF-8
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
ENV PATH="/app/venv/bin:$PATH"
WORKDIR /app
RUN python -m venv /app/venv
COPY requirements.txt .
# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache gcc musl-dev
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py ./
ENTRYPOINT [ "python", "/app/app.py" ]