大量更新
This commit is contained in:
123
81-202604-深圳龙华监管/2.1-镜像脚本.sh
Normal file
123
81-202604-深圳龙华监管/2.1-镜像脚本.sh
Normal file
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# =========================
|
||||
# 基础配置
|
||||
# =========================
|
||||
OUTPUT_DIR="/var/lib/docker/wdd/octopus_image/cmii_uas_23_tmp"
|
||||
|
||||
IMAGES=(
|
||||
"bitnamilegacy/redis:6.2.14-debian-11-r19"
|
||||
"bitnamilegacy/redis:7.4.3-debian-12-r0"
|
||||
"bitnamilegacy/mysql:8.1.0-debian-11-r42"
|
||||
"bitnamilegacy/os-shell:12-debian-12-r51"
|
||||
"bitnamilegacy/rabbitmq:3.13.7-debian-12-r5"
|
||||
"ossrs/srs:v5.0.195"
|
||||
"emqx/emqx:5.8.8"
|
||||
"nacos/nacos-server:v2.1.2"
|
||||
"library/mongo:5.0"
|
||||
"minio/minio:RELEASE.2023-06-02T23-17-26Z"
|
||||
"nginx:1.28.2"
|
||||
"harbor.cdcyy.com.cn/cmii/doris.be-ubuntu:2.1.6"
|
||||
"harbor.cdcyy.com.cn/cmii/doris.fe-ubuntu:2.1.6"
|
||||
)
|
||||
|
||||
# =========================
|
||||
# 日志函数
|
||||
# =========================
|
||||
log() {
|
||||
local level="$1"
|
||||
shift
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $*"
|
||||
}
|
||||
|
||||
# =========================
|
||||
# 异常处理
|
||||
# =========================
|
||||
on_error() {
|
||||
local exit_code=$?
|
||||
local line_no=${1:-unknown}
|
||||
log "ERROR" "脚本执行失败,行号: ${line_no},退出码: ${exit_code}"
|
||||
exit "${exit_code}"
|
||||
}
|
||||
trap 'on_error $LINENO' ERR
|
||||
|
||||
# =========================
|
||||
# 前置检查
|
||||
# =========================
|
||||
check_command() {
|
||||
local cmd="$1"
|
||||
if ! command -v "${cmd}" >/dev/null 2>&1; then
|
||||
log "ERROR" "缺少命令: ${cmd}"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_command docker
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
log "INFO" "输出目录已准备: ${OUTPUT_DIR}"
|
||||
|
||||
# =========================
|
||||
# 工具函数
|
||||
# =========================
|
||||
image_exists() {
|
||||
local image="$1"
|
||||
docker image inspect "${image}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
sanitize_filename() {
|
||||
local image="$1"
|
||||
# 将镜像名转换成适合文件名的格式
|
||||
# harbor.cdcyy.com.cn/cmii/cmii-uas-gateway:2.3.0-pro-20260226
|
||||
# ->
|
||||
# harbor.cdcyy.com.cn_cmii_cmii-uas-gateway_2.3.0-pro-20260226.tar
|
||||
local name
|
||||
name="${image//\//_}"
|
||||
name="${name//:/_}"
|
||||
echo "${name}.tar"
|
||||
}
|
||||
|
||||
pull_image_if_needed() {
|
||||
local image="$1"
|
||||
if image_exists "${image}"; then
|
||||
log "INFO" "镜像已存在,无需拉取: ${image}"
|
||||
else
|
||||
log "INFO" "镜像不存在,开始拉取: ${image}"
|
||||
docker pull "${image}"
|
||||
log "INFO" "镜像拉取完成: ${image}"
|
||||
fi
|
||||
}
|
||||
|
||||
save_image_to_tar() {
|
||||
local image="$1"
|
||||
local tar_name
|
||||
local tar_path
|
||||
|
||||
tar_name="$(sanitize_filename "${image}")"
|
||||
tar_path="${OUTPUT_DIR}/${tar_name}"
|
||||
|
||||
log "INFO" "开始打包镜像: ${image}"
|
||||
docker save -o "${tar_path}" "${image}"
|
||||
log "INFO" "镜像打包完成: ${tar_path}"
|
||||
}
|
||||
|
||||
# =========================
|
||||
# 主流程
|
||||
# =========================
|
||||
main() {
|
||||
local image
|
||||
|
||||
for image in "${IMAGES[@]}"; do
|
||||
log "INFO" "----------------------------------------"
|
||||
log "INFO" "处理镜像: ${image}"
|
||||
|
||||
pull_image_if_needed "${image}"
|
||||
save_image_to_tar "${image}"
|
||||
done
|
||||
|
||||
log "INFO" "----------------------------------------"
|
||||
log "INFO" "全部镜像处理完成,输出目录: ${OUTPUT_DIR}"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user