Docker build - x86_64架构,如何构建arm64架构的镜像
如果本机是x86_64架构,如何构建arm64架构的镜像,记录一下,并附上构建iotdb-1.3.1-standalone的示例。
安装Docker Buildx
首先,确保你的 Docker 版本是 19.03 或更高,因为 Buildx 是 Docker 19.03 的一部分,并默认包含在其中。
检查 Buildx 是否已安装
> docker buildx version
github.com/docker/buildx v0.14.0 171fcbe
如果已安装,可跳过安装步骤
在线安装 Docker Buildx(如果可上网)
如果你可以连接到互联网,可以直接下载并安装最新的 Buildx:
release地址:https://github.com/docker/buildx/releases
mkdir -p ~/.docker/cli-plugins
curl -L "https://github.com/docker/buildx/releases/download/v0.14.0/docker-buildx-v0.14.0.linux-amd64" -o ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
请根据需要替换 URL 中的版本号和架构(linux-amd64
)。这个命令会下载 Buildx 并将其放在 Docker 的 CLI 插件目录。
离线安装 Docker Buildx
如果你需要离线安装 Buildx,你可以在有互联网连接的机器上下载相应的 Buildx 二进制文件,然后将其移动到目标机器上。步骤如下:
- 在有网的机器上下载 Buildx: 使用上面的命令下载相应的 Buildx 二进制文件。
- 将二进制文件移动到离线机器: 使用 USB 驱动器或其他媒介将下载的文件传输到离线机器。
- 在离线机器上安装 Buildx: 将文件放到
~/.docker/cli-plugins
目录下,并赋予执行权限:
mkdir -p ~/.docker/cli-plugins
mv /path/to/downloaded/docker-buildx ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
检查 Docker buildx
检查 Buildx 是否已安装
docker buildx version
创建一个新的 Builder 实例
Buildx 使用 builder 实例来管理不同的构建环境。创建一个新的实例以支持多架构构建:
docker buildx create --name mybuilder --use
启动 builder 实例
docker buildx inspect --bootstrap
查看实例是否生效
docker buildx ls
使用 Buildx 构建镜像
现在,你可以开始为多个平台构建镜像。首先,你需要确定要构建镜像的目标平台。
- 编写 Dockerfile: 确保你的 Dockerfile 是通用的,适合多个平台。
- 构建镜像: 使用以下命令构建镜像。这里以
linux/amd64
和linux/arm64
为例,你可以根据需要添加更多平台。
docker buildx build --platform linux/amd64,linux/arm64 -t yourusername/imagename:tag --load .
--platform
: 列出你想要构建的目标平台。
-t
: 指定镜像的名称和标签。
--load
: 构建完成后,在本地 Docker 环境中加载这个镜像(比如用于本地测试),如果你想推送镜像到 Docker Hub 或其他容器镜像库,可以使用 --push
选项。
最后的 .
指定 Dockerfile 所在的目录。
验证和使用镜像
构建并推送到注册中心后,你可以从任何支持的架构拉取并运行该镜像,验证其跨平台功能。
注意事项
- 在使用 Docker Buildx 之前,确保你的 Docker Desktop 或服务器已经启用了实验性功能,因为 Buildx 依赖于这些功能。
- 如果你的环境没有连接到互联网,你可能需要预先加载某些架构的 QEMU 用户模式二进制文件,以支持跨平台构建。
构建iotdb-1.3.1-standalone的示例
最近需要在鲲鹏OS arm64上docker部署IoTDB,但目前官方iotdb-1.3.1没有arm64镜像版本,所以自己构建一个吧
拉取代码,切到 v1.3.1标签
git clone https://github.com/apache/iotdb.git
git checkout v1.3.1
查看构建方法
地址:iotdb/docker at master · apache/iotdb (github.com)
说得很清楚,我们就以打包 iotdb-1.3.1-standalone 为例开始构建
查看Dockerfile
链接:iotdb/docker/src/main/Dockerfile-1.0.0-standalone at master · apache/iotdb (github.com)
需要注意的:
- 构建镜像时我们要传入一个
version
参数 - 需要将
apache-iotdb-${version}-all-bin.zip
放入Dockerfile 同目录下的 target 文件夹下,下载地址:Apache Download Mirrors
Build镜像
输入命令:
docker buildx build --platform linux/arm64 --build-arg version=1.3.1 -t apache/iotdb:1.3.1-standalone -f ./Dockerfile-1.0.0-standalone . --load
--platform
: 指定 linux/arm64
--version
: IoTDB 版本
-f
: 指定 Dockerfile 文件
-t
: 指定镜像的名称和标签。
如果 apt 速度慢可以替换国内源再执行:
# 替换为清华大学软件源
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list && \
sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn\/debian-security/g' /etc/apt/sources.list
结果:
当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »