使用buildx在x86机器上面编译arm64架构的Docker镜像
使用,buildx,x86,机器,上面,编译,arm64,架构,docker,镜像
·
浏览次数 : 292
小编点评
**多架构编译安装docker下载docker下载buildx安装架构支持docker run --privileged --rm tonistiigi/binfmt --install all**
**信息:**
* 使用 Docker Buildx 创建多架构的容器。
* 构建基于arm64、amd64和arm64v2平台的 Docker Images。
* 使用 `docker run` 命令启动容器时指定平台。
**步骤:**
1. 创建一个名为 `mybuilder` 的 Docker Buildx build。
2. 使用 `--use` 选项指定多架构构建。
3. 使用 `--name` 选项指定容器名称为 `mybuilder`。
4. 使用 `--bootstrapNodes` 选项指定 Bootstrap节点的 IP 地址和端口。
5. 使用 `--buildx build` 指令构建 Docker Images。
6. 使用 `docker run` 命令启动容器。
**构建 Docker Images 的详细信息:**
* `FROM docker.io/adoptopenjdk/openjdk8WORKDIR /app`:从 Docker Hub上的 OpenJDK WORKDIR镜像构建基础镜像。
* `COPY /app /app /appENTRYPOINT [\"java\",\"-Djava.security.egd=file:/dev/./urandom\",\"-Dloader.path=./server/runtime/3rd,./server/runtime/libs\",\"-Dparallel.startup=true\",\"-Dserver.runtime.path.name=server\",\"-XX:+UseContainerSupport\",\"-XX:MaxRAMPercentage=75.0\",\"-XX:InitialRAMPercentage=75.0\",\"-XX:MinRAMPercentage=75.0\",\"-XX:-DisableExplicitGC\",\"-XX:+PrintGC\",\"-XX:+PrintGCDateStamps\",\"-XX:+PrintGCDetails\",\"-XX:+PrintGCTimeStamps\",\"-Xloggc:/app/dump/gclog\",\"-XX:+HeapDumpOnOutOfMemoryError\",\"-XX:HeapDumpPath=/app/dump\",\"-jar\",\"./server/runtime/caf-bootstrap.jar\",\"--spring.config.location=./server/runtime/\"]`:构建容器时运行 Java镜像的构建步骤。
**其他提示:**
* 使用 `docker buildx build -t zhaobsh:arm64 --platform=linux/arm64 -o type=docker .` 命令构建针对arm64平台的 Docker Images。
* 使用 `docker buildx build -t zhaobsh:amd64 --platform=linux/amd64 -o type=docker .` 命令构建针对amd64平台的 Docker Images。
* 使用 `docker buildx build -t harbor.xxxx.com/library/zhaobsh --platform=linux/arm,linux/arm64,linux/amd64 . --push#` 命令构建针对arm、arm64和amd64平台的 Docker Images并将其推送到 Harbor。
正文
buildx 多架构编译
安装docker
下载docker
下载buildx
安装架构支持
docker run --privileged --rm tonistiigi/binfmt --install all
创建一个自己的空间
buildx create --use --name mybuilder
检查支持的架构
buildx inspect mybuilder --bootstrap
Nodes:
Name: mybuilder0
Endpoint: unix:///var/run/docker.sock
Status: running
Buildkit: v0.11.6
Platforms: linux/arm64, linux/amd64, linux/amd64/v2, linux/riscv64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64
打包镜像
dockerfile 的信息为:
# 注意from 好像不能写带架构的. 会根据platform自动进行下载. 比较简单.
FROM docker.io/adoptopenjdk/openjdk8
WORKDIR /app
COPY /app /app
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dloader.path=./server/runtime/3rd,./server/runtime/libs","-Dparallel.startup=true","-Dserver.runtime.path.name=server","-XX:+UseContainerSupport","-XX:MaxRAMPercentage=75.0","-XX:InitialRAMPercentage=75.0","-XX:MinRAMPercentage=75.0","-XX:-DisableExplicitGC","-XX:+PrintGC","-XX:+PrintGCDateStamps","-XX:+PrintGCDetails","-XX:+PrintGCTimeStamps","-Xloggc:/app/dump/gclog","-XX:+HeapDumpOnOutOfMemoryError","-XX:HeapDumpPath=/app/dump","-jar","./server/runtime/caf-bootstrap.jar","--spring.config.location=./server/runtime/"]
buildx build -t zhaobsh:arm64 --platform=linux/arm64 -o type=docker .
buildx build -t zhaobsh:amd64 --platform=linux/amd64 -o type=docker .
我在arm上面搭建的就不行没法运行amd64的
docker run -it zhaobsh:amd64
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
java: error while loading shared libraries: libpthread.so.0: ELF load command alignment not page-aligned
然后 arm64自己的进行验证
可以直接push操作
buildx build -t harbor.xxxx.com/library/zhaobsh --platform=linux/arm,linux/arm64,linux/amd64 . --push
# 这个我还没测试
迁移测试
docker save zhaobsh:amd64 |gzip > zhaobsh_amd64.tgz
然后在amd64的机器上面进行验证.
也可以使用如下命令进行检查具体的架构信息:
[root@auto02 docker]# docker inspect zhaobsh:amd64 |grep Architecture
"Architecture": "amd64",
[root@auto02 docker]# docker inspect zhaobsh:arm64 |grep Architecture
"Architecture": "arm64",
[root@auto02 docker]#
与使用buildx在x86机器上面编译arm64架构的Docker镜像相似的内容: