#!/bin/bash

# Docker 工具

# 参数配置
## 版本号
VERSION=1.2.0
## 当前的日期、日期时间
DATE=`date +%Y%m%d`
DATETIME=`date +%Y%m%d`_`date +%H%M%S`
## 服务器 CPU 架构
CPU_ARCH=x86_64
## Docker 安装目录
DOCKER_INSTALL_DIR=/opt/docker/bin
## Docker 数据目录
DOCKER_DATA_DIR=/opt/docker/data
## 是否离线安装
NEED_OFFLINE_INSTALL=false
## 是否安装 Docker Engine
NEED_INSTALL_ENGINE=true
## Docker 版本号
DOCKER_VERSION=28.1.1
## Docker 安装包下载地址（在线安装时使用）
DOCKER_PACKAGE_URL=https://download.docker.com/linux/static/stable
## Docker 安装包名称（离线安装时使用）
DOCKER_PACKAGE_NAME=docker-28.1.1.tgz
## 是否安装 Docker Compose
NEED_INSTALL_COMPOSE=true
## Docker Compose 版本号
DOCKER_COMPOSE_VERSION=v2.36.0
## Docker Compose 安装包下载地址（在线安装时使用）
DOCKER_COMPOSE_PACKAGE_URL=https://github.com/docker/compose/releases/download
## Docker Compose 安装包名称（离线安装时使用）
DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-x86_64
## 是否需要设置 Docker 开机自启动
NEED_ENABLE_DOCKER=true
## 是否启用 Swarm 模式
NEED_ENABLE_DOCKER_SWARM=false
## Docker Swarm 角色
DOCKER_SWARM_ROLE=manager
## Docker Swarm Manager IP
DOCKER_SWARM_MANAGER_IP=127.0.0.1
## Docker Swarm Token
DOCKER_SWARM_TOKEN=123456

# 相关方法
## 帮助信息
help () {
  version
  echo ''
  echo '使用方式:  docker-tools 参数 选项'
  echo '参数说明：'
  echo '  -v： Docker 版本（可选，默认安装 28.1.1 版本）'
  echo '  -i： Docker 安装目录（可选，默认为 /opt/docker/bin）'
  echo '  -d： Docker 数据目录（可选，默认为 /opt/docker/data）'
  echo '  -p： Docker 安装包名称（可选，仅离线安装时使用，默认为在线安装）'
  echo '  -c： Docker Compose 版本（可选，默认安装 v2.36.0 版本）'
  echo '  -n： Docker Compose 安装包名称（可选，仅离线安装时使用，默认为在线安装）'
  echo '  -a： 仅安装 Docker Engine（可选，默认安装 Docker Engine 和 Docker Compose ）'
  echo '  -b： 仅安装 Docker Compose（可选，默认安装 Docker Engine 和 Docker Compose ）'
  echo '  -s： 启用 Docker Swarm（可选，默认不启用 ）'
  echo '  -r： Docker Swarm 角色（可选，默认 manager，可选 manager、worker ）'
  echo '  -m： Docker Swarm Manager IP（可选，默认 127.0.0.1 ）'
  echo '  -t： Docker Swarm Token（当角色为 worker 时必选 ）'
  echo '选项说明：'
  echo '  version： 查看工具版本'
  echo '  install： 安装 Docker'
  echo '  uninstall： 卸载 Docker'
  echo '  start： 启动 Docker'
  echo '  stop： 停止 Docker'
  echo '  restart： 重启 Docker'
  echo '  enable： 设置 Docker 开机自启动'
  echo '  disable： 取消 Docker 开机自启动'
  echo '  update： 更新 Docker 版本'
  echo '  swarm： 设置 Docker Swarm'
  echo '  info： 查看 Docker 信息'
  echo '示例：'
  echo '  安装 Docker （使用默认配置） ： docker-tools install'
  echo '  安装 Docker （使用自定义配置） ： docker-tools -v 28.1.1 -i /data/docker/bin -d /data/docker/data -p docker-28.1.1.tgz -c v2.36.0 -n docker-compose-linux-x86_64 install'
  echo '  安装 Docker （同时作为 manager 节点启用 Swarm） ： docker-tools -s install'
  echo '  安装 Docker （同时作为 worker 节点启用 Swarm） ： docker-tools -s -r worker -m 192.168.0.100 -t 123456 install'
  echo '  安装 Docker （仅安装 Docker Engine） ： docker-tools -oe install'
  echo '  安装 Docker （仅安装 Docker Compose） ： docker-tools -oc install'
  echo '  卸载 Docker （使用默认配置） ： docker-tools uninstall'
  echo '  卸载 Docker （使用自定义配置） ： docker-tools -v 28.1.1 -i /data/docker/bin -d /data/docker/data -p docker-28.1.1.tgz -c v2.36.0 -n docker-compose-linux-x86_64 uninstall'
  echo '  重启 Docker ： docker-tools restart'
  echo '  设置 Docker 开机自启动 ： docker-tools enable'
  echo '  取消 Docker 开机自启动 ： docker-tools disable'
  echo '  设置 Docker Swarm（manager） ： docker-tools swarm'
  echo '  设置 Docker Swarm（worker） ： docker-tools -r worker -m 192.168.0.100 -t 123456 swarm'
  echo '  查看 Docker 信息 ： docker-tools info'
}

## 版本号
version () {
 echo 'docker-tools '$VERSION'（ HTY1024 ）'
}

## 查询 CPU 架构
searchCPUArch () {
  echo '------------------------------ 开始设置 CPU 架构... ------------------------------'

  CPU_ARCH=`arch`

  echo '------------------------------ CPU 架构设置完成! ------------------------------'
}

## 创建目录
createDir () {
  echo '------------------------------ 开始创建相关目录... ------------------------------'

  mkdir -pv $DOCKER_INSTALL_DIR
  mkdir -pv $DOCKER_DATA_DIR
  mkdir -pv /etc/docker

  echo '------------------------------ 所需目录创建完成! ------------------------------'
}

## 删除目录
deleteDir () {
  echo '------------------------------ 开始删除相关目录... ------------------------------'

  rm -rf $DOCKER_INSTALL_DIR
  rm -rf $DOCKER_DATA_DIR
  rm -rf /etc/docker

  echo '------------------------------ 相关目录删除完成! ------------------------------'
}

## 创建用户
createUser () {
  echo '------------------------------ 开始创建 Docker 用户... ------------------------------'
  
  groupadd -r -g 1001 docker
  useradd -r -g docker -u 1001 -d /home/docker -s /bin/bash docker

  echo '------------------------------ Docker 用户创建完成! ------------------------------'
}

## 删除用户
deleteUser () {
  echo '------------------------------ 开始删除 Docker 用户... ------------------------------'

  groupdel docker
  userdel docker

  echo '------------------------------ Docker 用户删除完成! ------------------------------'
}


## 配置系统参数
configSystem () {
  echo '------------------------------ 开始配置系统参数... ------------------------------'

  modprobe br_netfilter
  echo 'net.bridge.bridge-nf-call-ip6tables = 1' > /etc/sysctl.d/docker.conf
  echo 'net.bridge.bridge-nf-call-iptables = 1' >> /etc/sysctl.d/docker.conf
  echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/docker.conf
  sysctl --system

  echo '------------------------------ 系统参数配置完成! ------------------------------'
}

## 移除参数
removeSystemConfig () {
  echo '------------------------------ 开始删除系统参数... ------------------------------'

  rm -rf /etc/sysctl.d/docker.conf
  sysctl --system

  echo '------------------------------ 系统参数删除完成! ------------------------------'
}

## 下载 Docker 安装包
downloadDockerEnginePackage () {
  echo '------------------------------ 开始下载 Docker 安装包... ------------------------------'

  wget $DOCKER_PACKAGE_URL/$CPU_ARCH/docker-$DOCKER_VERSION.tgz
  DOCKER_PACKAGE_NAME=docker-$DOCKER_VERSION.tgz

  echo '------------------------------ Docker 安装包下载完成! ------------------------------'
}

## 删除 Docker 安装包
removeDockerEnginePackage () {
  echo '------------------------------ 开始删除 Docker 安装包... ------------------------------'

  rm -rf $DOCKER_PACKAGE_NAME

  echo '------------------------------ Docker 安装包删除完成! ------------------------------'
}

## 下载 Docker Compose 安装包
downloadDockerComposePackage () {
  echo '------------------------------ 开始下载 Docker Compose 安装包... ------------------------------'

  wget $DOCKER_COMPOSE_PACKAGE_URL/$DOCKER_COMPOSE_VERSION/docker-compose-linux-$CPU_ARCH
  DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-$CPU_ARCH

  echo '------------------------------ Docker Compose 安装包下载完成! ------------------------------'
}

## 删除 Docker Compose 安装包
removeDockerComposePackage () {
  echo '------------------------------ 开始删除 Docker Compose 安装包... ------------------------------'

  rm -rf $DOCKER_COMPOSE_PACKAGE_NAME

  echo '------------------------------ Docker Compose 安装包删除完成! ------------------------------'
}

## 安装 Docker Engine
installDockerEngine () {
  echo '------------------------------ 开始安装 Docker Engine... ------------------------------'

  tar zxvf $DOCKER_PACKAGE_NAME -C $DOCKER_INSTALL_DIR --strip-components 1

  echo '------------------------------ Docker Engine 安装完成! ------------------------------'
}

## 备份当前 Docker Engine () {
backupDockerEngine () {
  echo '------------------------------ 开始备份 Docker Engine... ------------------------------'

  cp -rpf $DOCKER_INSTALL_DIR $DOCKER_INSTALL_DIR'_bak_'$DATETIME

  echo '------------------------------ Docker Engine 备份完成! ------------------------------'
}

## 安装 Dokcer Compose
installDockerCompose () {
  echo '------------------------------ 开始安装 Docker Compose... ------------------------------'

  cp -rpf ./$DOCKER_COMPOSE_PACKAGE_NAME $DOCKER_INSTALL_DIR/docker-compose
  chown docker.docker $DOCKER_INSTALL_DIR/docker-compose
  chmod +x $DOCKER_INSTALL_DIR/docker-compose

  echo '------------------------------ Docker Compose 安装完成! ------------------------------'
}

## 备份当前 Docker Coimpose 
backupDockerCompose () {
  echo '------------------------------ 开始备份 Docker Compose... ------------------------------'

  mkdir -pv $DOCKER_INSTALL_DIR'_bak_'$DATETIME
  cp -rpf $DOCKER_INSTALL_DIR/docker-compose $DOCKER_INSTALL_DIR'_bak_'$DATETIME/docker-compose

  echo '------------------------------ Docker Compose 备份完成! ------------------------------'
}

## 配置环境变量
configEnv () {
  echo '------------------------------ 开始配置环境变量... ------------------------------'

  cp -rpf ~/.bashrc ~/.bashrc.bak.$DATETIME
  echo '# Docker Env Begin' >> ~/.bashrc
  echo 'export DOCKER_HOME='$DOCKER_INSTALL_DIR >> ~/.bashrc
  echo 'export PATH=$PATH:$DOCKER_HOME' >> ~/.bashrc
  echo '# Docker Env End' >> ~/.bashrc
  source ~/.bashrc

  cp -rpf /etc/profile /etc/profile.bak.$DATETIME
  echo '# Docker Env Begin' >> /etc/profile
  echo 'export DOCKER_HOME='$DOCKER_INSTALL_DIR >> /etc/profile
  echo 'export PATH=$PATH:$DOCKER_HOME' >> /etc/profile
  echo '# Docker Env End' >> /etc/profile
  source /etc/profile

  echo '------------------------------ 环境变量配置完成! ------------------------------'
}

## 移除环境变量
removeEnv () {
  echo '------------------------------ 开始移除环境变量... ------------------------------'

  cp -rpf ~/.bashrc ~/.bashrc.bak.$DATETIME
  sed -i 's/# Docker Env Begin//g' ~/.bashrc
  sed -i 's#export DOCKER_HOME='$DOCKER_INSTALL_DIR'##g' ~/.bashrc
  sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' ~/.bashrc
  sed -i 's/# Docker Env End//g' ~/.bashrc
  source ~/.bashrc

  cp -rpf /etc/profile /etc/profile.bak.$DATETIME
  sed -i 's/# Docker Env Begin//g' /etc/profile
  sed -i 's#export DOCKER_HOME='$DOCKER_INSTALL_DIR'##g' /etc/profile
  sed -i 's/export PATH=$PATH:$DOCKER_HOME//g' /etc/profile
  sed -i 's/# Docker Env End//g' /etc/profile
  source /etc/profile

  echo '------------------------------ 环境变量移除完成! ------------------------------'
}

## 配置系统服务
configService () {
  echo '------------------------------ 开始配置系统服务... ------------------------------'

  cp -rpf docker.service /usr/lib/systemd/system/docker.service
  cp -rpf docker.socket /usr/lib/systemd/system/docker.socket
  sed -i 's#{{DOCKER_BIN_DIR}}#'$DOCKER_INSTALL_DIR'#g' /usr/lib/systemd/system/docker.service
  systemctl daemon-reload

  echo '------------------------------ 系统服务配置完成! ------------------------------'
}

## 移除系统服务
removeService () {
  echo '------------------------------ 开始移除系统服务... ------------------------------'

  rm -rf /usr/lib/systemd/system/docker.service
  rm -rf /usr/lib/systemd/system/docker.socket
  systemctl daemon-reload

  echo '------------------------------ 系统服务移除完成! ------------------------------'
}

## 配置 Docker 
configDockerEngine () {
  echo '------------------------------ 开始配置 Docker... ------------------------------'

  cp -rpf daemon.json /etc/docker/daemon.json
  sed -i 's#{{DOCKER_DATA_DIR}}#'$DOCKER_DATA_DIR'#g' /etc/docker/daemon.json

  if [ $NEED_ENABLE_DOCKER_SWARM == "false" ]; then
    sed -i 's#{{DOCKER_LIVE_RESTORE}}#true#g' /etc/docker/daemon.json
  fi
  if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then
    sed -i 's#{{DOCKER_LIVE_RESTORE}}#false#g' /etc/docker/daemon.json
  fi

  chown -R docker.docker $DOCKER_INSTALL_DIR
  chmod -R 755 $DOCKER_INSTALL_DIR
  chown -R docker.docker $DOCKER_DATA_DIR
  hmod -R 755 $DOCKER_DATA_DIR

  echo '------------------------------ Docker 配置完成! ------------------------------'
}

## 启动 Docker
startDocker () {
  echo '------------------------------ 开始启动 Docker... ------------------------------'

  systemctl start docker

  echo '------------------------------ Docker 启动完成! ------------------------------'
}

## 停止 Docker
stopDocker () {
  echo '------------------------------ 开始停止 Docker... ------------------------------'

  systemctl stop docker

  echo '------------------------------ Docker 停止完成! ------------------------------'
}

## 重启 Docker
restartDocker () {
  stop
  start
}

## 设置 Docker 自启动
enableDocker () {
  echo '------------------------------ 开始设置 Docker 自启动... ------------------------------'

  systemctl enable docker

  echo '------------------------------ Docker 自启动设置完成! ------------------------------'
}

## 取消 Docker 自启动
disableDocker () {
  echo '------------------------------ 开始取消 Docker 自启动... ------------------------------'

  systemctl disable docker

  echo '------------------------------ Docker 自启动取消完成! ------------------------------'
}

## 查询 Dokcer 信息
infoDocker () {
  echo '------------------------------ 开始查询 Docker 信息... ------------------------------'
  docker info
  echo '------------------------------ Docker 信息查询完成! ------------------------------'
}

## 安装 Docker Engine
onlyInstallDockerEngine () {
  echo '------------------------------ 开始安装 Docker Engine... ------------------------------'

  searchCPUArch
  createDir
  createUser
  configSystem
  if [ $NEED_OFFLINE_INSTALL == "false" ];then
    downloadDockerEnginePackage 
  fi
  installDockerEngine
  configEnv
  configService
  configDockerEngine
  startDocker
  if [ $NEED_ENABLE_DOCKER == "true" ];then
    enableDocker
  fi
  infoDocker

  echo '------------------------------ Docker Engine 安装完成! ------------------------------'
}

## 安装 Docker Compose
onlyInstallDockerCompose () {
  echo '------------------------------ 开始安装 Docker Compose... ------------------------------'

  searchCPUArch
  if [ $NEED_OFFLINE_INSTALL == "false" ]; then
    downloadDockerComposePackage
  fi
  installDockerCompose
  restartDocker
  infoDocker

  echo '------------------------------ Docker Conpose 安装完成! ------------------------------'
}

## 更新 Dokcer Engine 
onlyUpdateDockerEngine () {
  echo '------------------------------ 开始更新 Docker Engine... ------------------------------'

  searchCPUArch
  if [ $NEED_OFFLINE_INSTALL == "false" ];then
    downloadDockerEnginePackage
  fi
  disableDocker
  stopDocker
  backupDockerEngine
  installDockerEngine
  startDocker
  if [ $NEED_ENABLE_DOCKER == "true" ];then
    enableDocker
  fi
  infoDocker

  echo '------------------------------ Docker Engine 更新完成! ------------------------------'
}

## 更新 Dokcer Compose
onlyUpdateDockerCompose () {
  echo '------------------------------ 开始更新 Docker Compose... ------------------------------'

  searchCPUArch
  if [ $NEED_OFFLINE_INSTALL == "false" ]; then
    downloadDockerComposePackage
  fi
  backupDockerCompose
  installDockerCompose
  restartDocker
  infoDocker

  echo '------------------------------ Docker Conpose 更新完成! ------------------------------'
}

## 启用 Docker Swarm
onlyEnableDockerSwarm () {
  echo '------------------------------ 开始启用 Docker Swarm... ------------------------------'

  if [ $DOCKER_SWARM_ROLE == "manager" ]; then
    docker swarm init --advertise-addr $DOCKER_SWARM_MANAGER_IP
  fi
  if [ $DOCKER_SWARM_ROLE == "worker" ]; then
    docker swarm join --token $DOCKER_SWARM_TOKEN $DOCKER_SWARM_MANAGER_IP:2377
  fi

  echo '------------------------------ Docker Swarm 启用完成! ------------------------------'
}

## 安装 Docker
install () {
  echo '===================================================================================================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '============================== 开始安装 Docker ...... =============================='

  echo '安装参数如下 ：'
  echo 'CPU 架构 ： '$CPU_ARCH
  echo 'Docker 安装目录 ： '$DOCKER_INSTALL_DIR
  echo 'Docker 数据目录 ： '$DOCKER_DATA_DIR
  echo '是否离线安装 ： '$NEED_OFFLINE_INSTALL
  echo '是否安装 Docker Engine ： '$NEED_INSTALL_ENGINE
  echo 'Docker Engine 版本 ： '$DOCKER_VERSION
  echo 'Docker Engine 安装包下载地址（在线安装时使用）： '$DOCKER_PACKAGE_URL
  echo 'Docker Engine 安装包名称（离线安装时使用） ： '$DOCKER_PACKAGE_NAME
  echo '是否安装 Docker Compose ： '$NEED_INSTALL_COMPOSE
  echo 'Docker Compose 版本 ： '$DOCKER_COMPOSE_VERSION
  echo 'Docker Compose 安装包下载地址（在线安装时使用） ： '$DOCKER_COMPOSE_PACKAGE_URL
  echo 'Docker Compose 安装包名称（离线安装时使用） ： '$DOCKER_COMPOSE_PACKAGE_NAME
  echo '是否开机自动启动： '$NEED_ENABLE_DOCKER
  echo '是否启用 Docker Swarm： '$NEED_ENABLE_DOCKER_SWARM
  echo '请确认安装参数是否正确，并根据提示进入安装（Y：安装，N：不安装，E：退出）：'
  read NEED_DELETE
  case $NEED_DELETE in
    Y)
      if [ $NEED_INSTALL_ENGINE == "true" ]; then
        onlyInstallDockerEngine
      fi
      if [ $NEED_INSTALL_COMPOSE == "true" ]; then
        onlyInstallDockerCompose
      fi
      if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then
        onlyEnableDockerSwarm
      fi
      ;;
    N)
      echo '取消安装。'
      ;;
    E)
      echo '退出安装。'
      exit 1
      ;;
    *)
      echo '参数错误。'
      exit 1
      ;;
  esac

  echo '============================== Docker 安装完成！！！ =============================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '===================================================================================================='
}

## 卸载 Docker
uninstall () {
  echo '===================================================================================================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '============================== 开始卸载 Docker ...... =============================='

  echo '删除目录如下 ：'
  echo 'Docker 安装目录 ： '$DOCKER_INSTALL_DIR
  echo 'Docker 数据目录 ： '$DOCKER_DATA_DIR
  echo '此操作将会卸载 Docker 服务，并删除所有文件（包含 Docker 程序文件、镜像、容器文件等），请确认是否卸载（Y：卸载，N：不卸载，E：退出）：'
  read NEED_DELETE
  case $NEED_DELETE in
    Y)
      disableDocker
      stopDocker
      removeService
      removeEnv
      removeSystemConfig
      deleteUser
      deleteDir
      ;;
    N)
      echo '取消卸载。'
      ;;
    E)
      echo '退出卸载。'
      exit 1
      ;;
    *)
      echo '参数错误。'
      exit 1
      ;;
  esac

  echo '============================== Docker 卸载完成！！！ =============================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '===================================================================================================='
}

## 更新 Docker
update () {
  echo '===================================================================================================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '============================== 开始更新 Docker ...... =============================='

  echo '更新参数如下 ：'
  echo 'CPU 架构 ： '$CPU_ARCH
  echo 'Docker 安装目录 ： '$DOCKER_INSTALL_DIR
  echo 'Docker 数据目录 ： '$DOCKER_DATA_DIR
  echo '是否离线安装 ： '$NEED_OFFLINE_INSTALL
  echo '是否安装 Docker Engine ： '$NEED_INSTALL_ENGINE
  echo 'Docker Engine 版本 ： '$DOCKER_VERSION
  echo 'Docker Engine 安装包下载地址（在线安装时使用）： '$DOCKER_PACKAGE_URL
  echo 'Docker Engine 安装包名称（离线安装时使用） ： '$DOCKER_PACKAGE_NAME
  echo '是否安装 Docker Compose ： '$NEED_INSTALL_COMPOSE
  echo 'Docker Compose 版本 ： '$DOCKER_COMPOSE_VERSION
  echo 'Docker Compose 安装包下载地址（在线安装时使用） ： '$DOCKER_COMPOSE_PACKAGE_URL
  echo 'Docker Compose 安装包名称（离线安装时使用） ： '$DOCKER_COMPOSE_PACKAGE_NAME
  echo '是否开机自动启动： '$NEED_ENABLE_DOCKER
  echo '是否启用 Docker Swarm： '$NEED_ENABLE_DOCKER_SWARM
  echo '此操作将会更新当前 Docker 版本，存在一定风险，请确认是否更新（Y：更新，N：不更新，E：退出）：'
  read NEED_UPDATE
  case $NEED_UPDATE in
    Y)
      if [ $NEED_INSTALL_ENGINE == "true" ]; then
        onlyUpdateDockerEngine
      fi
      if [ $NEED_INSTALL_COMPOSE == 'true' ]; then
        onlyUpdateDockerCompose
      fi
      if [ $NEED_ENABLE_DOCKER_SWARM == "true" ]; then
        onlyEnableDockerSwarm
      fi
      ;;
    N)
      echo '取消更新。'
      ;;
    E)
      echo '退出更新。'
      exit 1
      ;;
    *)
      echo '参数错误。'
      exit 1
      ;;
  esac

  echo '============================== Docker 更新完成！！！ =============================='
  echo `date +%Y-%m-%d` `date +%H:%M:%S`
  echo '===================================================================================================='
}

# 初始化选项
echo $@

while getopts "v:i:d:p:c:n:r:m:t:abs" opt; do
  case $opt in
    v) 
      ## 设置 Docker Engine 版本
      DOCKER_VERSION="$OPTARG"
      echo '用户自定义 Docker Engine 版本： '$OPTARG
      ;;
    i)
      ## 设置 Docker 安装目录 
      DOCKER_INSTALL_DIR="$OPTARG"
      echo '用户自定义 Docker 安装目录： '$OPTARG
      ;;
    d)
      ## 设置 Docker 数据目录
      DOCKER_DATA_DIR="$OPTARG"
      echo '用户自定义 Docker 数据目录： '$OPTARG
      ;;
    p)
      ## 设置 Docker 安装包名称
      NEED_OFFLINE_INSTALL=true
      DOCKER_PACKAGE_NAME="$OPTARG"
      echo '【离线安装】用户自定义 Docker Engine 安装包名称： '$OPTARG
      ;;
    c)
      ## 设置 Docker Compose 版本
      DOCKER_COMPOSE_VERSION="$OPTARG"
      echo '用户自定义 Docker Compose 版本： '$OPTARG
      ;;
    n)
      ## 设置 Docker Compose 安装包名称
      NEED_OFFLINE_INSTALL=true
      DOCKER_COMPOSE_PACKAGE_NAME="$OPTARG"
      echo '【离线安装】用户自定义 Docker Compose 安装包名称： '$OPTARG
      ;;
    a)
      ## 设置仅安装 Docker Engine
      NEED_INSTALL_ENGINE=true
      NEED_INSTALL_COMPOSE=false
      echo '用户自定义： 仅安装 Docker Engine'
      ;;
    b)
      ## 设置仅安装 Docker Compose
      NEED_INSTALL_ENGINE=false
      NEED_INSTALL_COMPOSE=true
      echo '用户自定义： 仅安装 Docker Compose'
      ;;
    s)
      ## 设置启用 Docker Swarm
      NEED_ENABLE_DOCKER_SWARM=true
      echo '用户自定义： 启用 Docker Swarm'
      ;;
    r)
      ## 设置 Docker Swarm 角色
      if [ $OPTARG != "manager" && $OPTARG != "worker" ]; then
        echo '角色错误，可选择：manager、worker'
	exit 1
      fi
      NEED_ENABLE_DOCKER_SWARM=true
      DOCKER_SWARM_ROLE="$OPTARG"
      echo '用户自定义： Docker Swarm 角色（'$OPTARG'）'
      ;;
    m)
      ## 设置 Docker Swarm Manager IP
      NEED_ENABLE_DOCKER_SWARM=true
      DOCKER_SWARM_MANAGER_IP="$OPTARG"
      echo '用户自定义： Docker Swarm Manager IP（'$OPTARG'）'
      ;;
    t)
      ## 设置 Docker Swarm Token
      NEED_ENABLE_DOCKER_SWARM=true
      DOCKER_SWARM_TOKEN="$OPTARG"
      echo '用户自定义： Docker Swarm Token（'$OPTARG'）'
      ;;
  esac
done

# 移除已经使用的参数
shift $((OPTIND-1))

# 根据参数执行方法
case $@ in
  help)
    help
    ;;
  version)
    version
    ;;
  install)
    install
    ;;
  uninstall)
    uninstall
    ;;
  update)
    update
    ;;
  info)
    info
    ;;
  start)
    startDocker
    ;;
  stop)
    stopDocker
    ;;
  restart)
    restartDocker
    ;;
  enable)
    enableDocker
    ;;
  disable)
    disableDocker
    ;;
  swarm)
    onlyEnableDockerSwarm
    ;;
  *)
    help
    ;;

esac

