修改打包部署脚本
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
|
ARG MODEL
|
||||||
#shell,rtmp,rtsp,rtsps,http,https,rtp
|
#shell,rtmp,rtsp,rtsps,http,https,rtp
|
||||||
EXPOSE 1935/tcp
|
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 .. && \
|
RUN cmake -DCMAKE_BUILD_TYPE=${MODEL} -DENABLE_WEBRTC=true -DENABLE_FFMPEG=true -DENABLE_TESTS=false -DENABLE_API=false .. && \
|
||||||
make -j $(nproc)
|
make -j $(nproc)
|
||||||
|
|
||||||
FROM ubuntu:20.04
|
FROM registry.t-aaron.com/ubuntu:20.04
|
||||||
ARG MODEL
|
ARG MODEL
|
||||||
|
|
||||||
# ADD sources.list /etc/apt/sources.list
|
# ADD sources.list /etc/apt/sources.list
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue