# Usar Bake con contextos adicionales


Además de la clave principal `context` que define el contexto de compilación, cada objetivo (target) también puede definir contextos con nombre adicionales con un mapa definido con la clave `contexts`. Estos valores se asignan a la bandera `--build-context` en el [comando de compilación](/reference/cli/docker/buildx/build/#build-context).

Dentro del Dockerfile, estos contextos se pueden utilizar con la instrucción `FROM` o con la bandera `--from`.

Los valores de contexto admitidos son:

- Directorios del sistema de archivos local
- Imágenes de contenedores
- URLs de Git
- URLs HTTP
- Nombre de otro objetivo (target) en el archivo de Bake

## Fijar la imagen de alpine

```dockerfile {title=Dockerfile}
# syntax=docker/dockerfile:1
FROM alpine
RUN echo "Hello world"
```

```hcl {title=docker-bake.hcl}
target "app" {
  contexts = {
    alpine = "docker-image://alpine:3.13"
  }
}
```

## Usar un directorio de origen secundario

```dockerfile {title=Dockerfile}
FROM golang
COPY --from=src . .
```

```hcl {title=docker-bake.hcl}
# Ejecutar `docker buildx bake app` hará que `src` no apunte
# a alguna etapa de compilación previa, sino al sistema de archivos del cliente, fuera del contexto.
target "app" {
  contexts = {
    src = "../path/to/source"
  }
}
```

## Usar un objetivo (target) como contexto de compilación

Para usar el resultado de un objetivo como contexto de compilación de otro, especifica el nombre del objetivo con el prefijo `target:`.

```dockerfile {title=baseapp.Dockerfile}
FROM scratch
```

```dockerfile {title=Dockerfile}
# syntax=docker/dockerfile:1
FROM baseapp
RUN echo "Hello world"
```

```hcl {title=docker-bake.hcl}
target "base" {
  dockerfile = "baseapp.Dockerfile"
}

target "app" {
  contexts = {
    baseapp = "target:base"
  }
}
```

En la mayoría de los casos, simplemente deberías utilizar un único Dockerfile multi-etapa (multi-stage) con múltiples objetivos para lograr un comportamiento similar. Este caso de uso solo se recomienda cuando tienes múltiples Dockerfiles que no se pueden fusionar fácilmente en uno solo.

