From 36e83a6197c142c4416ff29614c412cb83890b06 Mon Sep 17 00:00:00 2001
From: huty <huty@hty1024.com>
Date: Mon, 24 Mar 2025 10:49:07 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0docker-tools=E5=B7=A5?=
 =?UTF-8?q?=E5=85=B7=EF=BC=9B=E6=96=B0=E5=A2=9Edocker-tools=5Fv1.1.0.zip?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 docker-tools/docker-tools        | 134 ++++++++++++++++++++++++++++---
 releases/docker-tools_v1.1.0.zip | Bin 0 -> 5719 bytes
 2 files changed, 123 insertions(+), 11 deletions(-)
 create mode 100644 releases/docker-tools_v1.1.0.zip

diff --git a/docker-tools/docker-tools b/docker-tools/docker-tools
index 8f81daa..1ece29e 100755
--- a/docker-tools/docker-tools
+++ b/docker-tools/docker-tools
@@ -4,7 +4,7 @@
 
 # 参数配置
 ## 版本号
-VERSION=1.0.0
+VERSION=1.1.0
 ## 当前的日期、日期时间
 DATE=`date +%Y%m%d`
 DATETIME=`date +%Y%m%d`_`date +%H%M%S`
@@ -19,11 +19,11 @@ NEED_OFFLINE_INSTALL=false
 ## 是否安装 Docker Engine
 NEED_INSTALL_ENGINE=true
 ## Docker 版本号
-DOCKER_VERSION=28.0.1
+DOCKER_VERSION=28.0.2
 ## Docker 安装包下载地址(在线安装时使用)
 DOCKER_PACKAGE_URL=https://download.docker.com/linux/static/stable
 ## Docker 安装包名称(离线安装时使用)
-DOCKER_PACKAGE_NAME=docker-28.0.1.tgz
+DOCKER_PACKAGE_NAME=docker-28.0.2.tgz
 ## 是否安装 Docker Compose
 NEED_INSTALL_COMPOSE=true
 ## Docker Compose 版本号
@@ -159,7 +159,7 @@ downloadDockerEnginePackage () {
   echo '------------------------------ 开始下载 Docker 安装包... ------------------------------'
 
   wget $DOCKER_PACKAGE_URL/$CPU_ARCH/docker-$DOCKER_VERSION.tgz
-  $DOCKER_PACKAGE_NAME=docker-$DOCKER_VERSION.tgz
+  DOCKER_PACKAGE_NAME=docker-$DOCKER_VERSION.tgz
 
   echo '------------------------------ Docker 安装包下载完成! ------------------------------'
 }
@@ -178,7 +178,7 @@ 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
+  DOCKER_COMPOSE_PACKAGE_NAME=docker-compose-linux-$CPU_ARCH
 
   echo '------------------------------ Docker Compose 安装包下载完成! ------------------------------'
 }
@@ -201,28 +201,48 @@ installDockerEngine () {
   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.$DATE
+  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.$DATE
+  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
@@ -236,14 +256,14 @@ configEnv () {
 removeEnv () {
   echo '------------------------------ 开始移除环境变量... ------------------------------'
 
-  cp -rpf ~/.bashrc ~/.bashrc.bak.$DATE
+  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.$DATE
+  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
@@ -283,9 +303,9 @@ configDockerEngine () {
   cp -rpf daemon.json /etc/docker/daemon.json
   sed -i 's#{{DOCKER_DATA_DIR}}#'$DOCKER_DATA_DIR'#g' /etc/docker/daemon.json
 
-  chmod -R docker.docker $DOCKER_INSTALL_DIR
+  chown -R docker.docker $DOCKER_INSTALL_DIR
   chmod -R 755 $DOCKER_INSTALL_DIR
-  chmod -R docker.docker $DOCKER_DATA_DIR
+  chown -R docker.docker $DOCKER_DATA_DIR
   hmod -R 755 $DOCKER_DATA_DIR
 
   echo '------------------------------ Docker 配置完成! ------------------------------'
@@ -379,6 +399,43 @@ onlyInstallDockerCompose () {
   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
 install () {
   echo '===================================================================================================='
@@ -435,6 +492,9 @@ uninstall () {
   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
@@ -465,6 +525,55 @@ uninstall () {
   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 版本,存在一定风险,请确认是否更新(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
+      ;;
+    N)
+      echo '取消更新。'
+      ;;
+    E)
+      echo '退出更新。'
+      exit 1
+      ;;
+    *)
+      echo '参数错误。'
+      exit 1
+      ;;
+  esac
+
+  echo '============================== Docker 更新完成!!! =============================='
+  echo `date +%Y-%m-%d` `date +%H:%M:%S`
+  echo '===================================================================================================='
+}
+
 # 初始化选项
 echo $@
 
@@ -534,6 +643,9 @@ case $@ in
   uninstall)
     uninstall
     ;;
+  update)
+    update
+    ;;
   info)
     info
     ;;
diff --git a/releases/docker-tools_v1.1.0.zip b/releases/docker-tools_v1.1.0.zip
new file mode 100644
index 0000000000000000000000000000000000000000..c6ff6e1e77e841f5b08d6a2d4e5817997f32493f
GIT binary patch
literal 5719
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
H1mOPw><Lsd

literal 0
HcmV?d00001