#!/bin/bash set -e OUTPUT_DIR="./xlcp-images" IMAGES=( "mysql:8.0" "redis:7-alpine" "eclipse-temurin:21-jre-alpine" "nginx:1.25-alpine" ) log_info() { echo "[INFO] $1"; } log_success() { echo "[SUCCESS] $1"; } log_error() { echo "[ERROR] $1"; exit 1; } mkdir -p "$OUTPUT_DIR" log_info "拉取 Docker 镜像..." for image in "${IMAGES[@]}"; do log_info "拉取 $image..." docker pull "$image" done log_info "导出镜像到 tar 文件..." for image in "${IMAGES[@]}"; do image_name=$(echo "$image" | tr ':/' '_') log_info "导出 ${image} -> ${image_name}.tar" docker save "$image" | gzip > "$OUTPUT_DIR/${image_name}.tar.gz" done cat > "$OUTPUT_DIR/upload.sh" << 'UPLOAD_EOF' #!/bin/bash set -e REMOTE_SERVER="${1:-root@192.168.10.150}" REMOTE_DIR="${REMOTE_DEPLOY_DIR:-/projects/data/xlcp}" echo "上传镜像到 $REMOTE_SERVER..." for file in *.tar.gz; do echo "上传 $file..." scp "$file" "$REMOTE_SERVER:$REMOTE_DIR/images-archive/" done echo "上传完成" UPLOAD_EOF chmod +x "$OUTPUT_DIR/upload.sh" cat > "$OUTPUT_DIR/load.sh" << 'LOAD_EOF' #!/bin/bash set -e for file in *.tar.gz; do echo "加载 $file..." docker load -i "$file" done echo "所有镜像加载完成" docker images | grep -E "mysql|redis|eclipse-temurin|nginx" LOAD_EOF chmod +x "$OUTPUT_DIR/load.sh" cat > "$OUTPUT_DIR/README.md" << 'README_EOF' # XL监狱综合管理平台 - Docker 镜像包 ## 镜像列表 | 镜像 | 用途 | |------|------| | mysql:8.0 | 数据库 | | redis:7-alpine | 缓存 | | eclipse-temurin:21-jre-alpine | 后端运行 | | nginx:1.25-alpine | 前端服务 | ## 使用方法 ### 1. 上传到服务器 ```bash cd images-archive ./upload.sh root@192.168.10.150 ``` ### 2. 在服务器加载镜像 ```bash ssh root@192.168.10.150 cd /projects/data/xlcp/images-archive ./load.sh ``` ### 3. 验证镜像 ```bash docker images | grep -E "mysql|redis|eclipse-temurin|nginx" ``` README_EOF log_success "镜像打包完成!" echo "" echo "镜像包位置: $OUTPUT_DIR/" ls -lh "$OUTPUT_DIR/" echo "" echo "使用方法:" echo " 1. 上传: cd $OUTPUT_DIR && ./upload.sh root@192.168.10.150" echo " 2. 加载: ssh root@192.168.10.150 'cd /projects/data/xlcp/images-archive && ./load.sh'"