image 构建工具,用于构建多种架构的镜像
docker客户端 :
user1@intel6248:~$ cat ~/.docker/config.json
{
"experimental": "enabled"
}
docker 服务端 :
user1@intel6248:~$ cat /etc/docker/daemon.json
{
"experimental": true
}
systemctl daemon-reload
systemctl restart docker
确认配置成功, Experimental: true :
docker version
如果是 19.03.8, 安装完docker之后就包含了。
如果没有可以直接下载二进制1 , 并放到指定目录 :
mkdir -p ~/.docker/cli-plugins
mv buildx ~/.docker/cli-plugins/docker-buildx
确认安装成功 :
docker buildx ls
docker buildx create --name mybuilder --use
docker buildx inspect --bootstrap
如果上面的步骤没有显示多种平台的支持,那么就需要安装模拟器,现在dockers 官方文档只说明了, buildx会包含再docker destop for MAC & windows默认包含buildx, 对于community 版本, 我参考这两篇文章进行设置23 :
user1@intel6248:~$ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
mybuilder * docker-container
mybuilder0 unix:///var/run/docker.sock running linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
default docker
default default running linux/amd64, linux/386
最简单的办法就是 :
docker run --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64
其中tag可以到这里查询最新的。4
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 --push -t lixianfadocker/hello .
运行命令 :
docker run --rm --name hello lixianfadocker/hello
在X86上的运行输出是 :
user1@intel6248:~/Dockerfile_kunpeng/Dockerfile_multi_arch$ docker run --rm --name hello lixianfadocker/hello
Status: Downloaded newer image for lixianfadocker/hello:latest
Hello, my architecture is Linux buildkitsandbox 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 Linux
在Kunpeng920上的运行输出是 :
user1@Arm64-server:~$ docker run --rm --name hello lixianfadocker/hello
Status: Downloaded newer image for lixianfadocker/hello:latest
Hello, my architecture is Linux buildkitsandbox 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 aarch64 Linux
在单台设备上使用build farm的问题是,用模拟指令的方式, 会非常慢。
# 创建一个上下文环境
docker context create --docker "host=ssh://user1@192.168.1.203" intel6248
# assuming contexts node-amd64 and node-arm64 exist in "docker context ls"
$ docker buildx create --use --name mybuild node-amd64
mybuild
$ docker buildx create --append --name mybuild node-arm64
$ docker buildx build --platform linux/amd64,linux/arm64 .
创建
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/getting-started-with-docker-for-arm-on-linux↩
https://hub.docker.com/r/docker/binfmt/tags?page=1&ordering=last_updated↩
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/getting-started-with-docker-for-arm-on-linux↩
https://github.com/LyleLee/Dockerfile_kunpeng/tree/master/Dockerfile_multi_arch↩