Docker 构建多架构镜像实战 构建 amd64 和 arm64 架构的兰空图床镜像
arm64 镜像在斐讯 N1 (ARMv8) 上测试通过。
本文主要参考文章 https://juejin.cn/post/7056010773495021605 和 https://yeasy.gitbook.io/docker_practice/buildx/multi-arch-images
期间也遇到一些问题,但是不会详细记录下来了。在此只是记录主要步骤,并构建 amd64 和 arm64 架构的兰空图床镜像。
由于 N1 的性能羸弱,所以我在腾讯云南京的一台 debian11 (amd64) 机器上构建,速度快得多。
前往 GitHub Release 页面获取 buildx binary file: https://github.com/docker/buildx/releases/latest ,写文本的时候最新版是 v0.8.2
https://github.com/docker/buildx/releases/tag/v0.8.2
下载 https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64 binary file
$ pwd
/home/dk/temp
# 下载 binary file
# wget https://github.com/docker/buildx/releases/download/v0.8.2/buildx-v0.8.2.linux-amd64
# 创建 cli-plugins 文件夹
# mkdir -p /root/.docker/cli-plugins/
# 将下载的 binary file 移动到这里并重命名
# mv /home/dk/temp/buildx-v0.8.2.linux-amd64 /root/.docker/cli-plugins/docker-buildx
# 修改相关权限
# chown root:root /root/.docker/cli-plugins/docker-buildx && chmod +x /root/.docker/cli-plugins/docker-buildx
修改 /root/.docker/config.json
文件,添加 "experimental": "enabled"
打开实验性配置。注意 json 文件的语法,上面的英文逗号不能落
{
"auths": {
"https://index.docker.io/v1/": {
"auth": "xxxxx"
}
},
"experimental": "enabled"
}
重启 docker
# systemctl restart docker
查看 buildx 版本: $ docker buildx version
返回了 github.com/docker/buildx v0.8.1-docker 5fac64c2c49dae1320f2b51f1a899ca451935554
,说明插件正确安装。
由于我使用的腾讯云 debian 主机,所以创建如下 builder
# docker buildx create --use --name=mybuilder-cn --driver docker-container --driver-opt image=dockerpracticesig/buildkit:master-tencent
查看当前有哪些 builder: # docker buildx ls
$ sudo docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS PLATFORMS
mybuilder-cn * docker-container
mybuilder-cn0 unix:///var/run/docker.sock stopped
default docker
default default running linux/amd64, linux/386, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/arm/v7, linux/arm/v6
mybuilder-cn0
STATUS 是 stopped 是因为我暂时不需要这个 builder 了,把容器停掉了。
现在准备好上一篇文章兰空图床 v2.0.4 程序源代码,以及 000-default.conf
Dockerfile
entrypoint.sh
三个文件。
在当前路径下开始构建多架构镜像,使用 --platform=linux/arm64,linux/amd64
参数构建 arm64 和 amd64 两种架构镜像。
# docker buildx build -t lsky-pro:2.0.4 --platform=linux/arm64,linux/amd64 .
提示
No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load
使用 --push
参数推送到 docker hub
# docker buildx build --push -t dko0/lsky-pro:2.0.4 --platform=linux/arm64,linux/amd64 .
注意镜像的名称以及 tag 需要填写成这种格式 namespace/image_name:tag_name
,所以我的是 dko0/lsky-pro:2.0.4,再推一个 latest
# docker buildx build --push -t dko0/lsky-pro:latest --platform=linux/arm64,linux/amd64 .
![20220501152943](https://pic.dogimg.com/2022/05/01/626e36ed1918b.png)
非常抱歉,图裂了,没有备份
在 amd64 的 Linux 机器和 N1 上测试均通过。欢迎大家使用这个镜像: https://hub.docker.com/r/dko0/lsky-pro
docker 多架构镜像构建我这还是太皮毛了,只是一个实践,还需要系统性学习这些知识。
开源项目值得肯定,给了star了。OωO
有空的话也可以帮我做一个,在此感谢!⌇●﹏●⌇
https://github.com/icret/EasyImages2.0
我看 EasyImages2.0 已经有人做了 docker 镜像了呀 https://hub.docker.com/r/ddsderek/easyimage
原来我 star 过大佬你的 EasyImages。我其实不熟悉 php,有空看看大佬的代码给做一个 ヾ(≧∇≦*)ゝ