#!/bin/bash # Docker智能离线部署脚本 (支持ARM/x86双架构) # 安装路径:/usr/bin/ # 用法:sudo ./deploy_docker.sh [选项] # 脚本目录定义 SCRIPT_DIR=$(cd $(dirname "$0") && pwd) BIN_DIR="$SCRIPT_DIR/bin" IMAGE_DIR="$SCRIPT_DIR/images" TARGET_DIR="/usr/bin" #⚡ 安装目录改回标准路径 # 帮助信息函数 usage() { echo "Docker离线部署脚本 - 根据系统架构自动选择版本" echo "选项:" echo " -h, --help 显示帮助信息" echo "示例:" echo " sudo ./deploy_docker.sh # 自动部署" echo "文件结构要求:" echo " bin/x86/ 存放x86架构的可执行文件 (docker/dockerd等)" echo " bin/aarch64/ 存放ARM架构的可执行文件" exit 0 } # 参数处理 if [[ $1 == "-h" || $1 == "--help" ]]; then usage fi # 函数:获取系统架构 detect_arch() { case $(uname -m) in x86_64) echo "x86" ;; aarch64) echo "aarch64" ;; arm64) echo "aarch64" ;; # 兼容Mac M1命名 *) echo "不支持的架构: $(uname -m)" >&2; exit 1 ;; esac } # 函数:检查并复制二进制文件 deploy_binaries() { local arch=$1 local src_dir="$BIN_DIR/$arch" # 检查源目录是否存在 if [ ! -d "$src_dir" ]; then echo "错误:架构目录不存在 - $src_dir" >&2 exit 1 fi # 检查关键文件是否存在 if [ ! -f "$src_dir/docker" ] || [ ! -f "$src_dir/dockerd" ]; then echo "错误:缺少核心文件docker/dockerd in $src_dir" >&2 exit 1 fi # 复制文件并赋权 echo "正在部署 $arch 架构文件到 $TARGET_DIR ..." sudo cp -v "$src_dir"/* "$TARGET_DIR" sudo chmod 755 "$TARGET_DIR"/{docker,dockerd,containerd,containerd-shim*,runc} #⚡ 仅关键文件赋权 } # 主流程 ARCH=$(detect_arch) echo "检测到系统架构:$ARCH => 部署目录: bin/$ARCH/" # 部署核心步骤 deploy_binaries $ARCH # 配置systemd服务(路径已适配/usr/bin) sudo tee /etc/systemd/system/docker.service >/dev/null </dev/null sudo usermod -aG docker \$USER newgrp docker </dev/null; then echo "导入Docker镜像..." for image in "$IMAGE_DIR/$ARCH"/*.tar; do docker load -i "$image" done fi