# Optimizar el uso de Docker Offload


Docker Offload construye y ejecuta tus contenedores de forma remota, no en la máquina donde invocas los comandos. Esto significa que los archivos se deben transferir desde tu sistema local a la nube a través de la red.

La transferencia de archivos a través de la red introduce una mayor latencia y un menor ancho de banda en comparación con las transferencias locales.

Incluso con optimizaciones, los proyectos grandes o las conexiones de red más lentas pueden provocar tiempos de transferencia más largos. A continuación se presentan varias formas de optimizar tu configuración para Docker Offload:

- [Usar archivos `.dockerignore`](#archivos-dockerignore)
- [Elegir imágenes base ligeras (slim)](#imagenes-base-ligeras)
- [Usar construcciones multietapa](#construcciones-multietapa)
- [Descargar archivos remotos durante la construcción](#descargar-archivos-remotos-en-la-construccion)
- [Aprovechar herramientas multihilo](#herramientas-multihilo)

Para obtener consejos generales sobre Dockerfile, consulta [Mejores prácticas de construcción](/build/building/best-practices/).

## Archivos dockerignore

Un [archivo `.dockerignore`](/build/concepts/context/#dockerignore-files) te permite especificar qué archivos locales _no_ se deben incluir en el contexto de construcción. Los archivos excluidos por estos patrones no se subirán a Docker Offload durante una construcción.

Elementos típicos a ignorar:

- `.git`: evita transferir tu historial de versiones. (Nota: no podrás ejecutar comandos de `git` en la construcción).
- Artefactos de construcción o binarios generados localmente.
- Carpetas de dependencias como `node_modules`, si estas se restauran en el proceso de construcción.

Como regla general, tu `.dockerignore` debería ser similar a tu `.gitignore`.

## Imágenes base ligeras

Las imágenes base más pequeñas en tus instrucciones `FROM` pueden reducir el tamaño final de la imagen y mejorar el rendimiento de la construcción. La imagen [`alpine`](https://hub.docker.com/_/alpine) es un buen ejemplo de una base mínima.

Para binarios completamente estáticos, puedes usar [`scratch`](https://hub.docker.com/_/scratch), que es una imagen base vacía.

## Construcciones multietapa

Las [construcciones multietapa](/build/building/multi-stage/) te permiten separar los entornos de tiempo de construcción y de tiempo de ejecución en tu Dockerfile. Esto no solo reduce el tamaño de la imagen final, sino que también permite la ejecución de etapas en paralelo durante la construcción.

Utiliza `COPY --from` para copiar archivos de etapas anteriores o imágenes externas. Este enfoque ayuda a minimizar las capas innecesarias y a reducir el tamaño final de la imagen.

## Descargar archivos remotos en la construcción

Cuando sea posible, descarga archivos grandes de Internet durante la propia construcción en lugar de empaquetarlos en tu contexto local. Esto evita la transferencia de red desde tu cliente hacia Docker Offload.

Puedes hacer esto utilizando:

- La instrucción [`ADD` de Dockerfile](/reference/dockerfile/#add)
- Comandos `RUN` como `wget`, `curl` o `rsync`

### Herramientas multihilo

Algunas herramientas de construcción, como `make`, son monohilo de forma predeterminada. Si la herramienta lo admite, configúrala para que se ejecute en paralelo. Por ejemplo, utiliza `make --jobs=4` para ejecutar cuatro tareas simultáneamente.

Aprovechar los recursos de CPU disponibles en la nube puede mejorar significativamente el tiempo de construcción.

