修改打包部署脚本
This commit is contained in:
parent
adda4f64e3
commit
d6efa9ce0f
|
|
@ -0,0 +1,257 @@
|
|||
#!/bin/bash
|
||||
|
||||
# ZLMediaKit 多架构 Docker 镜像构建脚本(兼容原版参数)
|
||||
# 用法: ./build_docker_multiarch.sh [-t build|push] [-p amd64|arm64|multi] [-m Debug|Release] [-v version] [-r registry]
|
||||
# 示例: ./build_docker_multiarch.sh -t build -p multi -m Release -v latest -r registry.t-aaron.com
|
||||
# 示例: ./build_docker_multiarch.sh -t build -p amd64 -m Debug -v v1.0.0
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 打印带颜色的信息
|
||||
info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# 默认值
|
||||
type=""
|
||||
version=""
|
||||
platform=""
|
||||
model=""
|
||||
registry="registry.t-aaron.com"
|
||||
|
||||
# 解析命令行参数
|
||||
while getopts "t:p:m:v:r:" opt
|
||||
do
|
||||
case $opt in
|
||||
t)
|
||||
type=$OPTARG
|
||||
;;
|
||||
v)
|
||||
version=$OPTARG
|
||||
;;
|
||||
p)
|
||||
platform=$OPTARG
|
||||
;;
|
||||
m)
|
||||
model=$OPTARG
|
||||
;;
|
||||
r)
|
||||
registry=$OPTARG
|
||||
;;
|
||||
?)
|
||||
error "未知参数"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 帮助信息
|
||||
help_string="用法: $0 [-t build|push] [-p amd64|arm64|multi] [-m Debug|Release] [-v version] [-r registry]\n示例: $0 -t build -p multi -m Release -v latest\n示例: $0 -t build -p amd64 -m Debug -v v1.0.0"
|
||||
|
||||
# 验证必要参数
|
||||
if [[ ! -n $type ]];then
|
||||
echo $help_string
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ ! -n $model ]];then
|
||||
echo $help_string
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ ! -n $version ]];then
|
||||
echo "使用 latest,未设置版本"
|
||||
version="latest"
|
||||
fi
|
||||
|
||||
if [[ ! -n $platform ]];then
|
||||
platform=`arch`
|
||||
info "自动选择架构: ${platform}"
|
||||
fi
|
||||
|
||||
# 架构转换
|
||||
case $platform in
|
||||
"arm64")
|
||||
platform="linux/arm64"
|
||||
PLATFORMS="linux/arm64"
|
||||
;;
|
||||
"x86_64"|"amd64")
|
||||
platform="linux/amd64"
|
||||
PLATFORMS="linux/amd64"
|
||||
;;
|
||||
"multi")
|
||||
platform="linux/multiarch"
|
||||
PLATFORMS="linux/arm64,linux/amd64"
|
||||
;;
|
||||
*)
|
||||
error "未知架构 ${platform}\n使用 'docker buildx ls' 查看支持的架构"
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
|
||||
# 构建模式验证
|
||||
case $model in
|
||||
'Debug')
|
||||
;;
|
||||
'Release')
|
||||
;;
|
||||
*)
|
||||
error "未知构建模式"
|
||||
echo $help_string
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
|
||||
# 项目配置
|
||||
namespace="zlmediakit"
|
||||
packagename="zlmediakit"
|
||||
image_name="${registry}/${namespace}/${packagename}"
|
||||
target_image="${image_name}:${model}.${version}"
|
||||
|
||||
# 显示配置信息
|
||||
info "=========================================="
|
||||
info "ZLMediaKit 多架构 Docker 镜像构建"
|
||||
info "=========================================="
|
||||
info "操作类型: $type"
|
||||
info "架构平台: $PLATFORMS"
|
||||
info "构建模式: $model"
|
||||
info "镜像版本: $version"
|
||||
info "目标仓库: $registry"
|
||||
info "镜像名称: $target_image"
|
||||
info "=========================================="
|
||||
echo
|
||||
|
||||
# 检查 Docker buildx(多架构构建需要)
|
||||
if [[ $PLATFORMS == *","* ]]; then
|
||||
info "检查 Docker buildx..."
|
||||
if ! docker buildx version >/dev/null 2>&1; then
|
||||
error "多架构构建需要 Docker buildx,请确保 Docker 版本 >= 20.10"
|
||||
fi
|
||||
|
||||
# 创建或使用现有的 buildx builder
|
||||
BUILDER_NAME="zlm-multiarch"
|
||||
if ! docker buildx ls | grep -q "$BUILDER_NAME"; then
|
||||
info "创建 buildx builder: $BUILDER_NAME"
|
||||
docker buildx create --name "$BUILDER_NAME" --use --bootstrap
|
||||
else
|
||||
info "使用现有 buildx builder: $BUILDER_NAME"
|
||||
docker buildx use "$BUILDER_NAME"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 执行操作
|
||||
case $type in
|
||||
'build')
|
||||
# 清理旧的构建缓存
|
||||
rm -rf ../build/CMakeCache.txt 2>/dev/null || true
|
||||
|
||||
info "开始构建 Docker 镜像..."
|
||||
if [[ $PLATFORMS == *","* ]]; then
|
||||
# 多架构构建
|
||||
info "构建多架构镜像: $PLATFORMS"
|
||||
|
||||
# 构建并推送各架构镜像
|
||||
for arch in linux/arm64 linux/amd64; do
|
||||
arch_tag=$(echo $arch | sed 's/linux\///')
|
||||
arch_image="${image_name}:${model}.${version}-${arch_tag}"
|
||||
|
||||
info "构建 $arch 架构镜像: $arch_image"
|
||||
docker buildx build \
|
||||
--platform=$arch \
|
||||
--network=host \
|
||||
--build-arg MODEL=$model \
|
||||
--build-arg VERSION=$version \
|
||||
--tag $arch_image \
|
||||
--push \
|
||||
--file ../dockerfile \
|
||||
..
|
||||
done
|
||||
|
||||
# 创建 multi-arch manifest
|
||||
info "创建多架构 manifest..."
|
||||
arm64_image="${image_name}:${model}.${version}-arm64"
|
||||
amd64_image="${image_name}:${model}.${version}-amd64"
|
||||
|
||||
docker buildx imagetools create -t $target_image \
|
||||
$arm64_image \
|
||||
$amd64_image
|
||||
|
||||
info "✓ 多架构镜像创建完成: $target_image"
|
||||
|
||||
# 验证多架构镜像
|
||||
info "验证多架构镜像..."
|
||||
docker buildx imagetools inspect $target_image
|
||||
|
||||
else
|
||||
# 单架构构建
|
||||
info "构建单架构镜像: $PLATFORMS"
|
||||
docker buildx build \
|
||||
--platform=$PLATFORMS \
|
||||
--network=host \
|
||||
--build-arg MODEL=$model \
|
||||
--build-arg VERSION=$version \
|
||||
--tag $target_image \
|
||||
--load \
|
||||
--file ../dockerfile \
|
||||
..
|
||||
|
||||
info "✓ 单架构镜像构建完成: $target_image"
|
||||
fi
|
||||
;;
|
||||
'push')
|
||||
if [[ $PLATFORMS == *","* ]]; then
|
||||
warn "多架构镜像已在构建时推送,此操作将推送统一 manifest"
|
||||
info "推送多架构 manifest..."
|
||||
docker buildx imagetools create -t $target_image \
|
||||
${image_name}:${model}.${version}-arm64 \
|
||||
${image_name}:${model}.${version}-amd64
|
||||
else
|
||||
info "推送到目标仓库: $registry"
|
||||
info "注意: 如果推送到私有仓库,请先登录: docker login $registry"
|
||||
docker push $target_image
|
||||
fi
|
||||
info "✓ 镜像推送完成: $target_image"
|
||||
;;
|
||||
*)
|
||||
error "未知操作类型"
|
||||
echo $help_string
|
||||
exit
|
||||
;;
|
||||
esac
|
||||
|
||||
echo
|
||||
info "=========================================="
|
||||
info "操作完成!"
|
||||
info "=========================================="
|
||||
info "镜像信息: $target_image"
|
||||
if [[ $PLATFORMS == *","* ]]; then
|
||||
info "支持架构: linux/arm64, linux/amd64"
|
||||
info ""
|
||||
info "使用方法:"
|
||||
info " docker pull $target_image"
|
||||
info ""
|
||||
info "验证方法:"
|
||||
info " docker buildx imagetools inspect $target_image"
|
||||
else
|
||||
info "架构: $PLATFORMS"
|
||||
info ""
|
||||
info "使用方法:"
|
||||
info " docker pull $target_image"
|
||||
fi
|
||||
info "=========================================="
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
FROM ubuntu:20.04 AS build
|
||||
FROM registry.t-aaron.com/ubuntu:20.04 AS build
|
||||
ARG MODEL
|
||||
#shell,rtmp,rtsp,rtsps,http,https,rtp
|
||||
EXPOSE 1935/tcp
|
||||
|
|
@ -50,7 +50,7 @@ WORKDIR /opt/media/ZLMediaKit/build
|
|||
RUN cmake -DCMAKE_BUILD_TYPE=${MODEL} -DENABLE_WEBRTC=true -DENABLE_FFMPEG=true -DENABLE_TESTS=false -DENABLE_API=false .. && \
|
||||
make -j $(nproc)
|
||||
|
||||
FROM ubuntu:20.04
|
||||
FROM registry.t-aaron.com/ubuntu:20.04
|
||||
ARG MODEL
|
||||
|
||||
# ADD sources.list /etc/apt/sources.list
|
||||
|
|
|
|||
Loading…
Reference in New Issue