You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
1.7 KiB
Markdown
75 lines
1.7 KiB
Markdown
# Defining additional build contexts and linking targets
|
|
|
|
In addition to the main `context` key that defines the build context each target
|
|
can also define additional named contexts with a map defined with key `contexts`.
|
|
These values map to the `--build-context` flag in the [build command](https://docs.docker.com/engine/reference/commandline/buildx_build/#build-context).
|
|
|
|
Inside the Dockerfile these contexts can be used with the `FROM` instruction or `--from` flag.
|
|
|
|
The value can be a local source directory, container image (with `docker-image://` prefix),
|
|
Git URL, HTTP URL or a name of another target in the Bake file (with `target:` prefix).
|
|
|
|
## Pinning alpine image
|
|
|
|
```dockerfile
|
|
# syntax=docker/dockerfile:1
|
|
FROM alpine
|
|
RUN echo "Hello world"
|
|
```
|
|
|
|
```hcl
|
|
# docker-bake.hcl
|
|
target "app" {
|
|
contexts = {
|
|
alpine = "docker-image://alpine:3.13"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Using a secondary source directory
|
|
|
|
```dockerfile
|
|
# syntax=docker/dockerfile:1
|
|
FROM scratch AS src
|
|
|
|
FROM golang
|
|
COPY --from=src . .
|
|
```
|
|
|
|
```hcl
|
|
# docker-bake.hcl
|
|
target "app" {
|
|
contexts = {
|
|
src = "../path/to/source"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Using a result of one target as a base image in another target
|
|
|
|
To use a result of one target as a build context of another, specity the target
|
|
name with `target:` prefix.
|
|
|
|
```dockerfile
|
|
# syntax=docker/dockerfile:1
|
|
FROM baseapp
|
|
RUN echo "Hello world"
|
|
```
|
|
|
|
```hcl
|
|
# docker-bake.hcl
|
|
target "base" {
|
|
dockerfile = "baseapp.Dockerfile"
|
|
}
|
|
|
|
target "app" {
|
|
contexts = {
|
|
baseapp = "target:base"
|
|
}
|
|
}
|
|
```
|
|
|
|
Please note that in most cases you should just use a single multi-stage
|
|
Dockerfile with multiple targets for similar behavior. This case is recommended
|
|
when you have multiple Dockerfiles that can't be easily merged into one.
|