docker:记录如何在x86架构上构造和使用arm架构的镜像
顿顿有鱼有虾 2024-08-24 13:37:01 阅读 77
为了国产化适配,要求讲原先在x86上的docker镜像重新打包为能够在arm上使用的docker镜像。
docker提供了构建多平台镜像的插件buildx,
配置 Docker buildx 环境
1、确保 Docker 版本不低于 19.03,才能使用 buildx
1
| <code>docker --version
|
2、检查 buildx 插件
1
|
|
通过apt或者yum等包管理方式安装的Docker,默认是带有 buildx 插件的。
如果我们使用的 Docker 版本中没有包含 buildx,或者想要安装最新版本的 buildx,可以访问 github - docker/buildx 获取安装指南。
3、安装 buildx 插件
wget https://github.com/docker/buildx/releases/download/v0.14.0/buildx-v0.14.0.linux-amd64
chmod a+x buildx-v0.14.0.linux-amd64
mkdir -p /usr/libexec/docker/cli-plugins
mv buildx-v0.14.0.linux-amd64 /usr/libexec/docker/cli-plugins/docker-buildx
4.启用实验性功能
为了构建多平台镜像,需要确保 Docker 的实验性功能被启用,因为 buildx 依赖这些功能。
我们可以通过修改 Docker 配置文件(通常位于 /etc/docker/daemon.json
)来启用实验功能。
sudo vi /etc/docker/daemon.json
#追加填入以下内容,确保json格式正确
{
"experimental": true
}
#保存并退出
###因为我添加了代理,所以我的格式是下面这样的,没添加代理的话不需要以下
{
"experimental": true,
"proxies": {
"http-proxy": "http://127.0.0.1:7890",
"https-proxy": "http://127.0.0.1:7890",
"no-proxy": "127.0.0.0/8"
}
}
5.执行以下命令
sudo systemctl daemon-reload
sudo systemctl restart docker
6.查看是否开启实验特性以及是否安装成功buildx
docker version --format '{ {.Server.Experimental}}'
#如果结果为true则实验特性已经开启
docker buildx version
7.成功安装完成buildx插件之后需要创建
#正常创建方式
docker buildx create --name image_buildx --use
#添加代理方式,docker buildx插件和docker的代理不通用,如果需要拉取docker hub的镜像,需要添加为你自己的代理端口
docker buildx create --name image_buildx --driver-opt env.http_proxy=127.0.0.1:7890 --driver-opt env.https_proxy=127.0.0.1:7890 --use
8.接下来就可以在x86平台构造arm的docker镜像了
docker buildx build \
--platform linux/arm64 \
--tag ${IMAGE_TAG} \
-f Dockerfile \
--load \
.
9.直接在X86架构的机器上运行构建好的ARM64镜像是不可能的,因为不同架构的机器无法直接执行其他架构的二进制代码。ARM64镜像包含的是为ARM处理器编译的代码,而X86架构的CPU无法理解这些指令。 在x86上运行arm架构的镜像需要使用QEMU仿真
确保你的docker实验特性已经开启
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
仿真开启成功后就可以使用arm镜像了,使用方式如下::
docker run -it --platform=linux/arm64 your-arm64-image
|
|
更多系统适用的 buildx 版本,可以访问github - buildx releases页面获取。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。