Docker多平台镜像打包

# 使用该命令先查询当前设备和目标设备的系统架构是否相同
uname -a

buildx 是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个构建命令。

此外,buildx 还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度

要安装并使用 buildx,需要 Docker Engine 版本号大于等于 19.03。

  1. docker buildx version 查看当前buildx版本,如果有就会返回具体的版本信息

  2. docker run --privileged --rm tonistiigi/binfmt --install all 需要tonistiigi/binfmt 镜像启动一个特权容器来进行支持

  3. docker buildx ls 查看当前build列表

  4. 创建一个自己的buildx docker buildx create --name mybuilder 执行完这个命令后使用 docker build ls 会出现一个mybuilder的信息,这就是自己创建的一个builder

  5. docker buildx use mybuilder 切换构建器,使用该命令将从默认的构建器切换到自己创建的构建器上

  6. docker buildx inspect --bootstrap mybuilder 启动builder

  7. docker buildx build --platform linux/arm64,linux/amd64 -t 镜像名称 . 这里使用 docker buildx build --platform 进行制作镜像,我们再不使用buildx的情况下,是使用 docker build --platform 进行制作镜像。

额外的命令

  1. docker images 显示所有镜像

  2. docker ps -a 列出正在运行的容器

  3. docker rmi 删除镜像

  4. docker rm 删除容器

  5. docker stop 停止容器

  6. docker run 启动容器

  7. docker image inspect 获得指定镜像的信息(可用来查看镜像的架构)

提供一个Dockerfile

FROM openjdk:8
WORKDIR /opt
ADD ./data_trans_docker/data_push_client.jar /opt/data_push_client.jar
EXPOSE 9011
ENTRYPOINT ["java","-jar","data_push_client.jar"]

提供一个build.sh

#!/bin/bash

#镜像名称
image_name="myimage_name:v${1}"
#打包后的镜像名称
out_image_name="myimage_out_name.tar"
#打包后输出的路径,替换成自己的目录
out_image_filepath="./out_images"


echo "执行build:$image_name"

# ./data_trans_docker 替换成自己的目录
docker build --platform linux/arm64 -f ./data_trans_docker/Dockerfile -t $image_name .

docker save -o $out_image_filepath/$out_image_name $image_name $image_name

总结

其实使用buildx 和 我们正常制作多平台镜像的Dockerfile 和 执行的制作流程以及命令是一样的,区别就在于使用 buildx可以同时构建多平台镜像。buildx 允许同时指定 --platform 多个参数,而默认的是 只能允许一个参数。