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.
buildx/docs/guides/exporters/index.md

171 lines
5.9 KiB
Markdown

# Exporters overview
BuildKit exporters allow outputting the results of a build to different
locations.
...
Buildx supports the following exporters:
- `image` / `registry`: exports the build result into a container image.
- `local`: exports the build root filesystem into a local directory.
- `tar`: packs the build root filesystem into a local tarball.
- `oci`: exports the build result as a local
[OCI image layout](https://github.com/opencontainers/image-spec/blob/v1.0.1/image-layout.md).
- `docker`: exports the build result as a local
[Docker image specification](https://github.com/docker/docker/blob/v20.10.2/image/spec/v1.2.md).
Each exporter creates outputs designed for different use cases. To build
container images ready to load or push to a registry, you can use the `image`
exporter. Alternatively, you can use the `oci` or `docker` exporters to export
the container image to disk directly, to import or post-process as you want.
Finally, if you just want the output of the final root filesystem, you can use
the `local` or `tar` exporters.
## Command syntax
To use any of the exporters, you need to specify it by either using the
available shorthands, or passing the exporter name and its parameters to the
[`--output`](../../reference/buildx_build.md#output) flag.
To get the full flexibility out of the various exporters buildkit has to offer,
you'll need to use the full form of the `--output` flag. However, for
ease-of-use, buildx also offers various familiar short-hands.
### Pushing images
You may already be familiar with the following `buildx` command syntax using
the `-t`/`--tag` and `--push` shorthands to push the resulting image to a
registry:
```console
$ docker buildx build . --tag <registry>/<image> --push
```
You can replicate this command without the shorthands, using the full
`--output` flag:
```console
$ docker buildx build . --output type=image,name=<registry>/<image>,push=true
```
### Loading images
Images built using the [Docker "default" Buildx driver](../../guides/drivers/docker.md)
will be automatically loaded into the engine. This means you can run them
immediately, and they'll be visible in the `docker images` view.
Images built using any of theh other drivers will not be automatically
loaded, and instead require manually adding the `--load` flag:
```console
$ docker buildx build . --tag <registry>/<image> --load
```
## Multiple exporters
While [currently](https://github.com/moby/buildkit/pull/2760) only a single
exporter is supported, you can perform multiple builds one after another to
export the same content twice - because of caching, as long as nothing changes
inbetween, then all builds after the first should be instantaneous.
For example, using both the [`image` exporter](./image.md) and the
[`local` exporter](./local.md)
```console
$ docker buildx build --output type=image,tag=<user>/<image> .
$ docker buildx build --output type=local,dest=<path/to/output> .
```
## Configuration options
This section describes some of the configuration options available for
exporters. The options described here are common for at least two or more
exporter types. Additionally, the different exporters types support specific
parameters as well. See the detailed page about each exporter for more
information about which configuration parameters apply.
The common parameters described here are:
- [Compression](#compression)
- [OCI media type](#oci-media-type)
### Compression
For all exporters that compress their output, you can configure the exact
compression algorithm and level to use. While the default values provide a good
out-of-the-box experience, you may wish to tweak the parameters to optimize for
storage vs compute costs. Changing the compression parameters can reduce
storage space required, and improve image download times, but will increase
build times.
To select the compression algorithm, you can use the `compression` option. For
example, to build an `image` with `compression=zstd`:
```console
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true,compression=zstd .
```
Use the `compression-level=<value>` option alongside the `compression`
parameter to choose a compression level for the algorithms which support it:
- 0-9 for `gzip` and `estargz`
- 0-22 for `zstd`
As a general rule, the higher the number, the smaller the resulting file will
be, and the longer the compression will take to run.
Use the `force-compression=true` option to force re-compressing layers imported
from a previous image, if the requested compression algorithm is different from
the previous compression algorithm.
> **Note**
>
> The `gzip` and `estargz` compression methods use the
> [`compress/gzip` package](https://pkg.go.dev/compress/gzip), while `zstd` uses
> the
> [`github.com/klauspost/compress/zstd` package](https://github.com/klauspost/compress/tree/master/zstd).
### OCI media types
Exporters that output container images, support creating images with either
Docker media types or with OCI media types. By default, BuildKit exports
images using Docker image types.
To export images with OCI mediatypes set, use the `oci-mediatypes` property. For
example, with the `image` exporter:
```console
$ docker buildx build \
--output type=image,name=<registry>/<image>,push=true,oci-mediatypes=true .
```
### Build info
Exporters that output container images, allow embedding information about the
build, including information on the original build request and sources used
during the build.
This build info is attached to the image configuration:
```json
{
"moby.buildkit.buildinfo.v0": "<base64>"
}
```
By default, the build dependencies are inlined in the image configuration. You
can disable this behavior using the `buildinfo` attribute.
## What's next
Read about each of the exporters to learn about how they work and how to
use them:
- [`image`](./image.md) / [`registry`](./image.md)
- [`local`](./local.md)
- [`tar`](./tar.md)
- [`oci`](./oci.md)
- [`docker`](./docker.md)