Compartir comentarios
Las respuestas se generan en base a la documentación.

Go


Este ejemplo muestra cómo migrar una aplicación Go 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).
Note

Se 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.io antes 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.io para autenticarte.

#syntax=docker/dockerfile:1

FROM ubuntu/go:1.22-24.04

WORKDIR /app
ADD . ./

# Instalar paquetes adicionales si es necesario usando apt
# RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" --installsuffix cgo -o main .

ENTRYPOINT ["/app/main"]
#syntax=docker/dockerfile:1

FROM cgr.dev/chainguard/go:latest-dev

WORKDIR /app
ADD . ./

# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache git

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" --installsuffix cgo -o main .

ENTRYPOINT ["/app/main"]
#syntax=docker/dockerfile:1

FROM golang:latest

WORKDIR /app
ADD . ./

# Instalar paquetes adicionales si es necesario usando apt
# RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/*

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" --installsuffix cgo -o main .

ENTRYPOINT ["/app/main"]
#syntax=docker/dockerfile:1

# === Etapa de compilación: Compilar la aplicación Go ===
FROM dhi.io/golang:1-alpine3.21-dev AS builder

WORKDIR /app
ADD . ./

# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache git

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" --installsuffix cgo -o main .

# === Etapa final: Crear la imagen de ejecución mínima ===
FROM dhi.io/golang:1-alpine3.21

WORKDIR /app
COPY --from=builder /app/main  /app/main

ENTRYPOINT ["/app/main"]
#syntax=docker/dockerfile:1

FROM dhi.io/golang:1-alpine3.21-dev

WORKDIR /app
ADD . ./

# Instalar paquetes adicionales si es necesario usando apk
# RUN apk add --no-cache git

RUN CGO_ENABLED=0 GOOS=linux go build -a -ldflags="-s -w" --installsuffix cgo -o main .

ENTRYPOINT ["/app/main"]