Install the docker buildx plugin with a builder to build arm containers #765
Closed
Description
In order to start building containers for amd64 and arm (and additional platforms), it would be nice to pre-install the buildx binary.
Install buildx
# install docker buildx globally
DOCKER_DIR=/usr/libexec/docker
## get latest version or pin it to v0.4.2
BUILDX_VERSION=$(curl --silent "https://api.github.com/repos/docker/buildx/releases/latest" | jq -r '.tag_name')
mkdir -p $DOCKER_DIR/cli-plugins
## check architecture
UNAME_ARCH=`uname -m`
case $UNAME_ARCH in
aarch64)
BUILDX_ARCH="arm64";
;;
amd64)
BUILDX_ARCH="amd64";
;;
*)
BUILDX_ARCH="amd64";
;;
esac
wget \
-O $DOCKER_DIR/cli-plugins/docker-buildx \
-nv https://github.com/docker/buildx/releases/download/$BUILDX_VERSION/buildx-$BUILDX_VERSION.linux-$BUILDX_ARCH
chmod a+x $DOCKER_DIR/cli-plugins/docker-buildx
## Install in the buildkite-agent user
# install arm
runuser -l buildkite-agent -c 'docker run --privileged --rm tonistiigi/binfmt --install all'
# create docker builder
runuser -l buildkite-agent -c 'docker buildx create --platform linux/amd64,linux/arm64,linux/arm/v7 --name mybuilder --use'
runuser -l buildkite-agent -c 'docker buildx inspect --bootstrap'
Sanity check: SSH into buildkite ec2 instance
$ sudo su - buildkite-agent
$ docker buildx version
github.com/docker/buildx v0.4.2 fb7b670b764764dc4716df3eba07ffdae4cc47b2
$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
mybuilder * docker-container
mybuilder0 unix:///var/run/docker.sock running linux/amd64*, linux/arm64*, linux/arm/v7*, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v6
default docker
default default running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
While ssh'ed, test container creation
mkdir test
cd test
cat <<EOF > Dockerfile
FROM ubuntu
RUN uname -m
EOF
docker buildx build --platform linux/amd64,linux/arm64 . --progress plain
Which then returns the expected architectures
#8 [linux/amd64 2/2] RUN uname -m
#8 0.153 x86_64
#8 DONE 0.2s
#6 [linux/arm64 2/2] RUN uname -m
#6 0.200 aarch64
#6 DONE 0.3s
Source: docker/buildx#57 (comment)
Misc
-
EnableDockerUserNamespaceRemap=false
should resolve this issueError response from daemon: privileged mode is incompatible with user namespaces
Related user namespace remap issue Document userns remapping #538
-
EnableDockerExperimental=true
is mandatory for buildx -
ECRAccessPolicy=poweruser
is required for pushing containers to ecr
Metadata
Assignees
Labels
No labels