目录

如果本机是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 二进制文件,然后将其移动到目标机器上。步骤如下:

  1. 在有网的机器上下载 Buildx: 使用上面的命令下载相应的 Buildx 二进制文件。
  2. 将二进制文件移动到离线机器: 使用 USB 驱动器或其他媒介将下载的文件传输到离线机器。
  3. 在离线机器上安装 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

Docker build - x86_64架构,如何构建arm64架构的镜像

使用 Buildx 构建镜像

现在,你可以开始为多个平台构建镜像。首先,你需要确定要构建镜像的目标平台。

  1. 编写 Dockerfile: 确保你的 Dockerfile 是通用的,适合多个平台。
  2. 构建镜像: 使用以下命令构建镜像。这里以 linux/amd64linux/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)

Docker build - x86_64架构,如何构建arm64架构的镜像

说得很清楚,我们就以打包 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 

结果

Docker build - x86_64架构,如何构建arm64架构的镜像