Docker多平台镜像打包
# 使用该命令先查询当前设备和目标设备的系统架构是否相同
uname -a
buildx
是 Docker 官方提供的一个构建工具,它可以帮助用户快速、高效地构建 Docker 镜像,并支持多种平台的构建。使用 buildx
,用户可以在单个命令中构建多种架构的镜像,例如 x86 和 ARM 架构,而无需手动操作多个构建命令。
此外,buildx
还支持 Dockerfile 的多阶段构建和缓存,这可以大大提高镜像构建的效率和速度
要安装并使用 buildx
,需要 Docker Engine 版本号大于等于 19.03。
docker buildx version
查看当前buildx版本,如果有就会返回具体的版本信息docker run --privileged --rm tonistiigi/binfmt --install all
需要tonistiigi/binfmt
镜像启动一个特权容器来进行支持docker buildx ls
查看当前build列表创建一个自己的buildx
docker buildx create --name mybuilder
执行完这个命令后使用docker build ls
会出现一个mybuilder的信息,这就是自己创建的一个builderdocker buildx use mybuilder
切换构建器,使用该命令将从默认的构建器切换到自己创建的构建器上docker buildx inspect --bootstrap mybuilder
启动builderdocker buildx build --platform linux/arm64,linux/amd64 -t 镜像名称 .
这里使用docker buildx build --platform
进行制作镜像,我们再不使用buildx的情况下,是使用docker build --platform
进行制作镜像。
额外的命令
docker images
显示所有镜像docker ps -a
列出正在运行的容器docker rmi
删除镜像docker rm
删除容器docker stop
停止容器docker run
启动容器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 多个参数,而默认的是 只能允许一个参数。