I tried export DOCKER_BUILDKIT=1 before a docker-compose build command and I did not see the expected BuildKit output. What did I miss?
3 Answers
Support for BuildKit was just released in docker-compose 1.25.0. To enable:
export DOCKER_BUILDKIT=1 # or configure in daemon.json
export COMPOSE_DOCKER_CLI_BUILD=1
With those variables set in your shell, you can now run docker-compose build using BuildKit.
In windows you can execute in your console:
setx DOCKER_BUILDKIT 1 # or configure in daemon.json
setx COMPOSE_DOCKER_CLI_BUILD 1
after will need restart your console
4 Comments
docker compose vs docker-compose?docker compose(without the hyphen) is a sort of a plugin that docker made to tackle "how to deploy structure prepped by docker-compose file on AWS's ECS", as opposed to Amazon's take on that is "docker-compose is an implementation detail for development environment, which we are not going to cater to. We have ECS CLI (or better yet, the latest Copilot)".You can use this command to tell docker-compose to use the Docker CLI when executing a build.
COMPOSE_DOCKER_CLI_BUILD=1 docker-compose build
You should see the same build as usual, but with this warning:
WARNING: Native build is an experimental feature and could change at any time
And you can go like that to parametrize the CLI to use BuildKit instead of the default builder:
COMPOSE_DOCKER_CLI_BUILD=1 DOCKER_BUILDKIT=1 docker-compose build
Windows version:
set "COMPOSE_DOCKER_CLI_BUILD=1" & set "DOCKER_BUILDKIT=1" & docker-compose build
You can also enable BuildKit globally, editing /etc/docker/daemon.json file, adding:
{ "features": { "buildkit": true } }
For more informations: https://docs.docker.com/develop/develop-images/build_enhancements/
Comments
Docker Compose v2 supports BuildKit by default: link
While most migrations should be straightforward, Compose v2 does introduce a few breaking changes which could impact specific use cases:
- Containers are now created with hyphens in their names instead of underscores.
docker compose buildbuilds with BuildKit by default.- Some deprecated command flags have been removed.