docker实践

docker buildx - 跨平台编译Docker镜像

2024-01-21  本文已影响0人  日垒一砖

Install Docker

Linux系统 安装和卸载 docker

Install Docker Registry

docker registry - 搭建私有镜像仓库

Install buildx

# 查看默认构建器
docker buildx ls
BUILDER_NAME=multiArch-cloudNative
# export image to localhost registry
## https://github.com/docker/buildx/issues/94
## https://stackoverflow.com/questions/60430255/using-docker-buildx-failed-to-push-image-to-resgistry-no-such-host
docker buildx create --name multiArch-opt-driver --driver-opt network=host --use
# docker buildx create --name $BUILDER_NAME --use
# docker buildx use $BUILDER_NAME
# docker buildx自动下载 moby/buildkit:buildx-stable-1 镜像
docker buildx inspect --bootstrap
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
docker pull tonistiigi/binfmt
docker run --privileged --rm tonistiigi/binfmt --install all
cat /proc/sys/fs/binfmt_misc/qemu-aarch64

Usage

同时进行多架构编译

docker buildx build --push --platform linux/amd64,linux/arm64 \
--pull --no-cache \
--build-arg "TAG=$BASE_IMAGE_VERSION" -t localhost:5000/my-image:1.0.0 .

在x86_64环境编译aarch64镜像

image_name=my-image
version=1.0.0
docker buildx build --push --platform linux/arm64 \
--pull --no-cache \
-f Dockerfile.aarch64 \
-t localhost:5000/${image_name}:${version}  .

Pull image

pull image时加上--platform参数

docker pull localhost:5000/my-image:1.0.0 --platform=linux/arm64
docker pull localhost:5000/my-image:1.0.0 --platform=linux/amd64

FAQ

Install buildx separately

As of Docker Engine 23.0 and Docker Desktop 4.19, Buildx is the default build client.

ARCH=$(uname -m)
[ "${ARCH}" == "x86_64" ] && ARCH=amd64
[ "${ARCH}" == "aarch64" ] && ARCH=arm64

BUILDX_VERSION=v0.10.4
wget https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-${ARCH}

mkdir -pv ~/.docker/cli-plugins
mv buildx-${BUILDX_VERSION}.linux-${ARCH}  ~/.docker/cli-plugins/
ls -alh $HOME/.docker/cli-plugins
chmod +x ~/.docker/cli-plugins/docker-buildx

ERROR: multiple platforms feature is currently not supported for docker driver. Please switch to a different driver (eg. "docker buildx create --use")

# 确保默认的构建器是 buildx
docker buildx ls
docker buildx create --name multiArch-cloudNative
docker buildx use multiArch-cloudNative
docker buildx inspect --bootstrap

参考文档

上一篇 下一篇

猜你喜欢

热点阅读