Docker BuildKit

!BuildKit is the abstracted and improved version of the container image builder that is (used to be?) shipped with docker(8).


Legacy Builder

Around version 23 of docker(8), the following deprecation notice started appearing for vanilla installations.

DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

In this version, the !BuildKit builder engine (also known as buildx) became the default and preferred builder.

The switch in engines does not happen immediately or silently. Users must opt in to the switch by setting DOCKER_BUILDKIT=1.

Users may also need to install the buildx plugin separately. This error would appear as:

ERROR: BuildKit is enabled but the buildx component is missing or broken.
       Install the buildx component to build images with BuildKit:
       https://docs.docker.com/go/buildx/

The switch will become permanent and mandatory in a future release.


Installation

On Arch, install docker-buildx.


Usage

For simple usage, use much the same way as the legacy engine.

docker build .

If the !BuildKit engine is not the default on your machine, it can be explicitly called as a plugin.

docker buildx build .

Advanced Features

The !BuildKit engine offers several advantages to the legacy engine.

Images are now built in an isolated context. The first context has to be created manually. Try:

$ docker buildx create --name my-builder --use
$ docker buildx inspect --bootstrap my-builder
$ docker buildx use --default my-builder
$ docker buildx ls
NAME/NODE     DRIVER/ENDPOINT             STATUS  BUILDKIT PLATFORMS
my-builder *  docker-container                             
  my-builder0 unix:///var/run/docker.sock running v0.11.6  linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386
default       docker                                       
  default     default                     running v0.11.6  linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/386

For multiplatform images, try:

docker buildx build --platform=linux/amd64,linux/arm64 .


CategoryRicottone

Docker/BuildKit (last edited 2023-05-24 21:01:41 by DominicRicottone)