docker buildx create

Estimated reading time: 8 minutes


Create a new builder instance

Usage

$ docker buildx create [OPTIONS] [CONTEXT|ENDPOINT]

Refer to the options section for an overview of available OPTIONS for this command.

Description

Create makes a new builder instance pointing to a docker context or endpoint, where context is the name of a context from docker context ls and endpoint is the address for docker socket (eg. DOCKER_HOST value).

By default, the current Docker configuration is used for determining the context/endpoint value.

Builder instances are isolated environments where builds can be invoked. All Docker contexts also get the default builder instance.

For example uses of this command, refer to the examples section below.

Options

Name, shorthand Default Description
--append Append a node to builder instead of changing it
--bootstrap Boot builder after creation
--buildkitd-flags Flags for buildkitd daemon
--config BuildKit config file
--driver Driver to use (available: docker, docker-container, kubernetes)
--driver-opt Options for the driver
--leave Remove a node from builder instead of changing it
--name Builder instance name
--node Create/modify node with given name
--platform Fixed platforms for current node
--use Set the current builder instance
--builder Override the configured builder instance

Examples

Append a new node to an existing builder (--append)

The --append flag changes the action of the command to append a new node to an existing builder specified by --name. Buildx will choose an appropriate node for a build based on the platforms it supports.

$ docker buildx create mycontext1
eager_beaver

$ docker buildx create --name eager_beaver --append mycontext2
eager_beaver

Specify options for the buildkitd daemon (--buildkitd-flags)

--buildkitd-flags FLAGS

Adds flags when starting the buildkitd daemon. They take precedence over the configuration file specified by --config. See buildkitd --help for the available flags.

--buildkitd-flags '--debug --debugaddr 0.0.0.0:6666'

Specify a configuration file for the buildkitd daemon (--config)

--config FILE

Specifies the configuration file for the buildkitd daemon to use. The configuration can be overridden by --buildkitd-flags. See an example buildkitd configuration file.

Note that if you create a docker-container builder and have specified certificates for registries in the buildkitd.toml configuration, the files will be copied into the container under /etc/buildkit/certs and configuration will be updated to reflect that.

Set the builder driver to use (--driver)

--driver DRIVER

Sets the builder driver to be used. There are two available drivers, each have their own specificities.

docker driver

Uses the builder that is built into the docker daemon. With this driver, the --load flag is implied by default on buildx build. However, building multi-platform images or exporting cache is not currently supported.

docker-container driver

Uses a BuildKit container that will be spawned via docker. With this driver, both building multi-platform images and exporting cache are supported.

Unlike docker driver, built images will not automatically appear in docker images and build --load needs to be used to achieve that.

kubernetes driver

Uses a kubernetes pods. With this driver, you can spin up pods with defined BuildKit container image to build your images.

Unlike docker driver, built images will not automatically appear in docker images and build --load needs to be used to achieve that.

Set additional driver-specific options (--driver-opt)

--driver-opt OPTIONS

Passes additional driver-specific options. Details for each driver:

  • docker - No driver options
  • docker-container
    • image=IMAGE - Sets the container image to be used for running buildkit.
    • network=NETMODE - Sets the network mode for running the buildkit container.
    • cgroup-parent=CGROUP - Sets the cgroup parent of the buildkit container if docker is using the “cgroupfs” driver. Defaults to /docker/buildx.
  • kubernetes
    • image=IMAGE - Sets the container image to be used for running buildkit.
    • namespace=NS - Sets the Kubernetes namespace. Defaults to the current namespace.
    • replicas=N - Sets the number of Pod replicas. Defaults to 1.
    • requests.cpu - Sets the request CPU value specified in units of Kubernetes CPU. Example requests.cpu=100m, requests.cpu=2
    • requests.memory - Sets the request memory value specified in bytes or with a valid suffix. Example requests.memory=500Mi, requests.memory=4G
    • limits.cpu - Sets the limit CPU value specified in units of Kubernetes CPU. Example limits.cpu=100m, limits.cpu=2
    • limits.memory - Sets the limit memory value specified in bytes or with a valid suffix. Example limits.memory=500Mi, limits.memory=4G
    • nodeselector="label1=value1,label2=value2" - Sets the kv of Pod nodeSelector. No Defaults. Example nodeselector=kubernetes.io/arch=arm64
    • rootless=(true|false) - Run the container as a non-root user without securityContext.privileged. Using Ubuntu host kernel is recommended. Defaults to false.
    • loadbalance=(sticky|random) - Load-balancing strategy. If set to “sticky”, the pod is chosen using the hash of the context path. Defaults to “sticky”
    • qemu.install=(true|false) - Install QEMU emulation for multi platforms support.
    • qemu.image=IMAGE - Sets the QEMU emulation image. Defaults to tonistiigi/binfmt:latest

Remove a node from a builder (--leave)

The --leave flag changes the action of the command to remove a node from a builder. The builder needs to be specified with --name and node that is removed is set with --node.

$ docker buildx create --name mybuilder --node mybuilder0 --leave

Specify the name of the builder (--name)

--name NAME

The --name flag specifies the name of the builder to be created or modified. If none is specified, one will be automatically generated.

Specify the name of the node (--node)

--node NODE

The --node flag specifies the name of the node to be created or modified. If none is specified, it is the name of the builder it belongs to, with an index number suffix.

Set the platforms supported by the node (--platform)

--platform PLATFORMS

The --platform flag sets the platforms supported by the node. It expects a comma-separated list of platforms of the form OS/architecture/variant. The node will also automatically detect the platforms it supports, but manual values take priority over the detected ones and can be used when multiple nodes support building for the same platform.

$ docker buildx create --platform linux/amd64
$ docker buildx create --platform linux/arm64,linux/arm/v8

Automatically switch to the newly created builder (--use)

The --use flag automatically switches the current builder to the newly created one. Equivalent to running docker buildx use $(docker buildx create ...).

Parent command

Command Description
docker buildx Docker Buildx
Command Description
docker buildx bake Build from a file
docker buildx build Start a build
docker buildx create Create a new builder instance
docker buildx du Disk usage
docker buildx imagetools Commands to work on images in registry
docker buildx inspect Inspect current builder instance
docker buildx ls List builder instances
docker buildx prune Remove build cache
docker buildx rm Remove a builder instance
docker buildx stop Stop builder instance
docker buildx use Set the current builder instance
docker buildx version Show buildx version information