# Migrar desde Wolfi


Esta guía te ayuda a migrar de imágenes basadas en Wolfi a Docker Hardened Images (DHI). En general, el proceso de migración es directo, ya que Wolfi es similar a Alpine y DHI proporciona una imagen securizada basada en Alpine.

Al igual que otras imágenes securizadas, DHI proporciona [atestaciones](/dhi/core-concepts/attestations/) completas que incluyen SBOM y procedencia, lo que te deja [verificar](/dhi/how-to/verify/) las firmas de las imágenes y [escanearlas](/dhi/how-to/scan/) en busca de vulnerabilidades para garantizar la seguridad e integridad de tus imágenes.

## Pasos de migración

El siguiente ejemplo demuestra cómo migrar un Dockerfile de una imagen basada en Wolfi a una Docker Hardened Image basada en Alpine.

### Paso 1: Actualizar la imagen base en tu Dockerfile

Actualiza la imagen base en el Dockerfile de tu aplicación a una imagen securizada. Normalmente será una imagen etiquetada como `dev` o `sdk` porque tiene las herramientas necesarias para instalar paquetes y dependencias.

El siguiente fragmento de diff de un Dockerfile muestra la imagen base antigua reemplazada por la nueva imagen securizada.

> [!NOTE]
>
> 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](/accounts/create-account/) de forma gratuita.
>
> Ejecuta `docker login dhi.io` para autenticarte.

```diff
- ## Original base image
- FROM cgr.dev/chainguard/go:latest-dev

+ ## Updated to use hardened base image
+ FROM dhi.io/golang:1.25-alpine3.22-dev
```

Ten en cuenta que DHI no tiene una etiqueta `latest` con el fin de promover las mejores prácticas en torno al control de versiones de las imágenes. Asegúrate de especificar la etiqueta de versión adecuada para tu imagen. Para encontrar la etiqueta correcta, explora las etiquetas disponibles en el [Catálogo de DHI](https://hub.docker.com/hardened-images/catalog/).

### Paso 2: Actualizar la imagen de ejecución en tu Dockerfile

> [!NOTE]
>
> Se recomiendan las compilaciones multi-stage para mantener la imagen final mínima y segura. Las compilaciones de una sola etapa son compatibles, pero incluyen la imagen `dev` completa y, por lo tanto, dan como resultado una imagen más grande con una superficie de ataque más amplia.

Para garantizar que tu imagen final sea lo más mínima posible, debes utilizar una [compilación multi-stage](/build/building/multi-stage/). Todas las etapas de tu Dockerfile deben utilizar una imagen securizada. Mientras que las etapas intermedias normalmente utilizarán imágenes etiquetadas como `dev` o `sdk`, tu etapa final de ejecución debe utilizar una imagen de ejecución.

Utiliza la etapa de compilación para compilar tu aplicación y copia los artefactos resultantes a la etapa final de ejecución. Esto garantiza que tu imagen final sea mínima y segura.

El siguiente ejemplo muestra un Dockerfile multi-stage con una etapa de compilación y una etapa de ejecución:

```dockerfile
# Build stage
FROM dhi.io/golang:1.25-alpine3.22-dev AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# Runtime stage
FROM dhi.io/golang:1.25-alpine3.22
WORKDIR /app
COPY --from=builder /app/myapp .
ENTRYPOINT ["/app/myapp"]
```

Después de actualizar tu Dockerfile, compila y prueba tu aplicación. Si encuentras problemas, consulta la guía de [Resolución de problemas](/dhi/troubleshoot/) para ver los problemas y soluciones comunes.

## Ejemplos específicos de lenguajes

Consulta la sección de ejemplos para ver ejemplos de migración específicos de cada lenguaje:

- [Go](/dhi/migration/migrate-from-wolfi/examples/go/)
- [Python](/dhi/migration/migrate-from-wolfi/examples/python/)
- [Node.js](/dhi/migration/migrate-from-wolfi/examples/node/)

