Table of Contents generated with DocToc
- Building docker images
- Setting environment with emulation
- Setting up cache refreshing with hardware ARM/AMD support
In order to build images on local hardware, you need to have the buildx plugin installed to run the build. Also, you need to have regctl installed from https://github.com/regclient/regclient in order to tag the multi-platform images in DockerHub. The script to build images will refuse to work if you do not have those two installed.
You also need to have the right permissions to push the images, so you should run
docker login
before and authenticate with your DockerHub token.
According to the official installation instructions this can be achieved via:
docker run --privileged --rm tonistiigi/binfmt --install all
More information can be found here.
However, emulation is very slow - more than 10x slower than hardware-backed builds.
If you plan to build a number of images, it's probably better to set up a hardware remote builder for your ARM or AMD builds (depending which platform you build images on - the "other" platform should be remote).
This can be achieved by settings build as described in
this blog post and
adding it to docker buildx airflow_cache
builder.
This usually can be done with those two commands:
docker buildx create --name airflow_cache # your local builder
docker buildx create --name airflow_cache --append HOST:PORT # your remote builder
One of the ways to have HOST:PORT is to login to the remote machine via SSH and forward the port to the docker engine running on the remote machine.
When everything is fine you should see both local and remote builder configured and reporting status:
docker buildx ls
airflow_cache docker-container
airflow_cache0 unix:///var/run/docker.sock
airflow_cache1 tcp://127.0.0.1:2375
Preparing regular images:
breeze release-management release-prod-images --airflow-version "${VERSION}"
Preparing slim images:
breeze release-management release-prod-images --airflow-version "${VERSION}" --slim-images
This will wipe Breeze cache and docker-context-files in order to make sure the build is "clean". It also performs image verification after pushing the images.