在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
引子 最近发现有ARM版Docker,hub.docker.com上也有ARM版本的镜像,但是ARM版本的Docker镜像构建是个问题。嵌入式程序可以在PC机上进行交叉编译,不知道Docker是否有交叉构建的方案。 方案 目前想到的Docker构建ARM镜像方法有如下几种。第三种就类似交叉编译。
使用Docker buildx构建多个平台镜像 参考如下几个链接。 用到了两个docker的试验功能,使用时需要开启试验功能。 docker manifest,manifest是一个包含了镜像信息的文件。manifest list是一个镜像清单列表,用于存放不同os/arch的镜像信息。我们可以创建一个manifest list来指向两个镜像,然后可以支持多平台。 docker buildx,buildx是docker的一个插件,是下一代docker镜像构建。该插件通过qemu-user-static翻译不同平台的指令集,达到在x64上运行其他平台的程序。buildx实际使用了moby/buildkit:buildx-stable-1镜像进行多平台构建。 搭建docker registry多平台版本 参考如下链接,构建docker registry镜像。 搭建dns服务器,解决buildx bug buildx插件不走本地hosts文件,必须走dns。这是个bug,https://github.com/docker/buildx/issues/218,社区也没人管。 使用nginx代理解决命名问题 增加nginx代理同时支持HTTP和HTTPS。buildx这个插件强行使用了HTTPS,没有找到关闭的地方。 nginx增加两个配置,解决客户端push时的几个问题。 # nignx.conf 配置 proxy_ignore_client_abort on; #忽略客户端告警 client_max_body_size 0; #上传文件大小不限制 # 虚拟主机配置 server { listen 443; server_name buildx.com; ssl on; ssl_certificate crt/server.crt; ssl_certificate_key crt/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location / { proxy_pass http://192.168.1.11:81; } } server { listen 80; server_name buildx.com; location / { proxy_pass http://192.168.1.11:81; } } 设置本地Docker环境 本地Docker需要开启实验功能。
# 拉取arm64版本镜像并运行 docker pull --platform arm64 alpine:3.10 docker run --rm -it alpine:3.10 sh 制作基础镜像 可以从hub.docker.com中获取多个平台的版本,生成manifest list,上传的registry中。 # pull arm64版本、改名、上传。 具体镜像是否支持多平台,可以到hub.docker.com上看。 docker pull --platform arm64 centos:7 docker tag centos:7 buildx.com/base/centos-arm64:7 docker push buildx.com/base/centos-arm64:7 # pull amd64版本、改名、上传 docker pull --platform amd64 centos:7 docker tag centos:7 buildx.com/base/centos-amd64:7 docker push buildx.com/base/centos-amd64:7 # 创建manifest list、上传。 docker manifest create --insecure buildx.com/base/centos:7 buildx.com/base/centos-amd64:7 buildx.com/base/centos-arm64:7 docker manifest push --insecure buildx.com/base/centos:7 构建业务镜像 # buildx 可以指定多个平台,但是要求Dockerfile中的FROM镜像必须有对应版本的。 # buildx 打包的镜像不会在本地存储,加--push,上传docker仓。或者可以使用--output指定输出方式。 docker buildx build --platform linux/amd64,linux/arm64 -t buildx.com/base/java-base:openjdk-8-centos7 . --push 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
请发表评论