引子
最近发现有ARM版Docker,hub.docker.com上也有ARM版本的镜像,但是ARM版本的Docker镜像构建是个问题。嵌入式程序可以在PC机上进行交叉编译,不知道Docker是否有交叉构建的方案。
方案
目前想到的Docker构建ARM镜像方法有如下几种。第三种就类似交叉编译。
- 使用ARM主机,安装ARM版本的Docker,docker build出来的就是ARM版本的镜像。
- 使用Linux的虚拟化软件,模拟ARM芯片+ Linux,例如qemu。
- 使用Docker试验功能buildx,可以构建多平台的镜像。
使用Docker buildx构建多个平台镜像
参考如下几个链接。
https://docs.docker.com/engine/reference/commandline/manifest/
https://docs.docker.com/buildx/working-with-buildx/
https://engineering.docker.com/2019/06/getting-started-with-docker-for-arm-on-linux/
用到了两个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镜像。
https://community.arm.com/developer/tools-software/tools/b/tools-software-ides-blog/posts/deploying-multi-architecture-docker-registry
搭建dns服务器,解决buildx bug
buildx插件不走本地hosts文件,必须走dns。这是个bug,https://github.com/docker/buildx/issues/218,社区也没人管。
解决方法:自建dns,把镜像的地址buildx.com指向registry的机器,后续用nginx。ubuntu有一个默认systemd-resolved,关闭之后在开启dnsmasq。
使用nginx代理解决命名问题
增加nginx代理同时支持HTTP和HTTPS。buildx这个插件强行使用了HTTPS,没有找到关闭的地方。
提示证书问题,证书不是这个域名的,解决方法: 重新生成一个证书,域名填自己的。
证书问题,不信任自签名证书,把自签名的证书加到buildx daemon容器的证书信任链中。https://github.com/docker/buildx/issues/80#issuecomment-533844117
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需要开启实验功能。
- 在/etc/docker/daemon.json中配置 "experimental": true,重启Docker。开启Docker daemon的实验功能。
- 在本地执行export DOCKER_CLI_EXPERIMENTAL=enabled,开启Docker Client的实验功能。
- 使用docker version查看实验功能是否开启。
- 执行docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3,开启内核binfmt_misc功能,可以在当前平台上执行多平台的程序。
- 查看是否支持aarch64程序。cat /proc/sys/fs/binfmt_misc/qemu-aarch64
- 此时本地的docker可以运行各种平台的docker容器。比如arm64。可以使用如下命令测试。
# 拉取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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]