在第一篇博文中,想必读者根据手顺已经成功搭建了Docker的19.03版本环境,本篇用到的buildx工具已经嵌套在该版本中。但是,在真正使用该工具时,也许你会惊奇的发现,buildx完全不可用;原因是缺少buildx的可执行文件。阅读buildx源码目录中的README.md,给出了三种安装buildx的方法。
在18.09+的docker版本下:
$ git clone git://github.com/docker/buildx && cd buildx
$ make install
在19.03下:
$ export DOCKER_BUILDKIT=1
$ docker build --platform=local -o . git://github.com/docker/buildx
$ mv buildx ~/.docker/cli-plugins/docker-buildx
或者直接在github中找到对应主机平台的buildx可执行文件
将文件移动到~/.docker/cli-plugins下并改名为docker-buildx。没有文件夹自己创建一个。
这样,buildx就安装成功了。
为了实现跨平台构建docker镜像,还需要拉取并启动跨平台build构建器。
执行命令:
启动buildx:
$export DOCKER_CLI_EXPERIMENTAL=enabled
最好写在~/.bashrc中
启用 binfmt_misc:
$sudo docker run --rm --privileged docker/binfmt:66f9012c56a8316f9244ffd7622d7c21c1f6f28d
验证binfmt_misc是否开启
$sudo ls -al /proc/sys/fs/binfmt_misc/
创建一个构建器;
$sudo docker buildx create --use --name mybuilder
验证是否启用了相应的处理器:
$sudo cat /proc/sys/fs/binfmt_misc/qemu-aarch64
启动构建器:(这一步在build过程中会自动加载,读者也可以手动操作)
$sudo docker buildx inspect mybuilder --bootstrap
如下图:
接下来构建指定版本的docker 镜像。
准备arm64版本的alpine根文件系统,编写Dockerfile
FROM scratch
ADD rootfs /
CMD ["/bin/sh"]
执行命令:
sudo docker buildx build -t alpine:arm --platform=linux/arm64 -o type=docker .
执行结果如下:
OK,这样就build出arm64版本的镜像,使用命令:
$sudo docker images
查看如图:
使用qemu-user-static插件启动镜像:
执行命令注册qemu-user-static
$sudo docker run --rm --privileged multiarch/qemu-user-static:register
结果如图:
启动镜像执行命令:
$sudo docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static alpine:arm
结果如图:
OK,至此,跨平台构建docker image就完成了。
有些读者可能会遇到Dockerfile中RUN命令不能用的问题,可以在Dockerfile开头加入:
# syntax=docker/dockerfile:1.1-experimental
————————————————————————————————————————————————————————
谢谢观看,祝各位工作顺利,生活愉快!