From 5a26c3bb239142e7d22133a43c73fc6f2060a435 Mon Sep 17 00:00:00 2001 From: djshen Date: Tue, 19 Sep 2023 09:33:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20'bash/docker-compose?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E8=84=9A=E6=9C=AC/docker-operate.sh'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-operate.sh | 441 ++++++++++++++++++ 1 file changed, 441 insertions(+) create mode 100644 bash/docker-compose操作脚本/docker-operate.sh diff --git a/bash/docker-compose操作脚本/docker-operate.sh b/bash/docker-compose操作脚本/docker-operate.sh new file mode 100644 index 0000000..678b02c --- /dev/null +++ b/bash/docker-compose操作脚本/docker-operate.sh @@ -0,0 +1,441 @@ +#!/usr/bin/env bash + +#-------------------------------------------- +# shell 用于启动docker应用 +# author: djshen +# The script: +# - Requires `root` or `sudo` privileges to run. +# - 如果想添加新的docker-compose 请模仿脚本中example的语句,搜索example即可 +#-------------------------------------------- + +# 检查当前用户是否为 root 用户 +if [[ $EUID -eq 0 ]]; then + echo "当前脚本以 root 权限运行" +else + # 检查当前脚本是否使用了 sudo + if sudo -n true > /dev/null 2>&1; then + echo "当前脚本使用了 sudo" + else + echo "当前脚本没有 root 权限,且没有使用 sudo " + exitHandle + fi +fi + +# 检查docker-compose文件是否存在,不存在则创建 todo + + +# 退出操作 +function exitHandle() { + valid_choice=true + echo "下次见~" +} +# 开启全部Docker服务 +function startAllDocker() { + dockerComposeServiceCheck "alist" + if [ "$?" = "0" ]; then + startDockerService "alist" + fi + + dockerComposeServiceCheck "uptime-kuma" + if [ "$?" = "0" ]; then + startDockerService "uptime-kuma" + fi + + dockerComposeServiceCheck "bitwatden" + if [ "$?" = "0" ]; then + startDockerService "bitwatden" + fi + + dockerComposeServiceCheck "ddns" + if [ "$?" = "0" ]; then + startDockerService "ddns" + fi + + dockerComposeServiceCheck "gitea" + if [ "$?" = "0" ]; then + startDockerService "gitea" + fi + + dockerComposeServiceCheck "drone" + if [ "$?" = "0" ]; then + startDockerService "drone" + fi + + dockerComposeServiceCheck "halo" + if [ "$?" = "0" ]; then + startDockerService "halo" + fi + + # dockerComposeServiceCheck "frpc" + # if [ "$?" = "0" ]; then + # startDockerService "frpc" + # fi + + # dockerComposeServiceCheck "influxdb" + # if [ "$?" = "0" ]; then + # startDockerService "influxdb" + # fi + dockerComposeServiceCheck "tailchat" + if [ "$?" = "0" ]; then + startTailChat + fi + + # example + # dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样" + # if [ "$?" = "0" ]; then + # startDockerService "服务名,例如halo" + # fi +} +# 关闭全部Docker服务 +function stopAllDocker() { + dockerComposeServiceCheck "alist" + if [ "$?" = "1" ]; then + stopDockerService "alist" + fi + + dockerComposeServiceCheck "uptime-kuma" + if [ "$?" = "1" ]; then + stopDockerService "uptime-kuma" + fi + + dockerComposeServiceCheck "bitwatden" + if [ "$?" = "1" ]; then + stopDockerService "bitwatden" + fi + + dockerComposeServiceCheck "ddns" + if [ "$?" = "1" ]; then + stopDockerService "ddns" + fi + + dockerComposeServiceCheck "gitea" + if [ "$?" = "1" ]; then + stopDockerService "gitea" + fi + + dockerComposeServiceCheck "drone" + if [ "$?" = "1" ]; then + stopDockerService "drone" + fi + + dockerComposeServiceCheck "halo" + if [ "$?" = "1" ]; then + stopDockerService "halo" + fi + + # dockerComposeServiceCheck "frpc" + # if [ "$?" = "1" ]; then + # stopDockerService "frpc" + # fi + + # dockerComposeServiceCheck "influxdb" + # if [ "$?" = "1" ]; then + # stopDockerService "influxdb" + # fi + + dockerComposeServiceCheck "tailchat" + if [ "$?" = "1" ]; then + stopDockerService "tailchat" + fi + + # example + # dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样" + # if [ "$?" = "1" ]; then + # startDockerService "服务名,例如halo" + # fi +} + +# 检查所有docker服务状态 +function checkAllDockerState(){ + dockerComposeServiceCheck "alist" + dockerComposeServiceCheck "uptime-kuma" + dockerComposeServiceCheck "bitwatden" + dockerComposeServiceCheck "ddns" + dockerComposeServiceCheck "gitea" + dockerComposeServiceCheck "drone" + dockerComposeServiceCheck "halo" + dockerComposeServiceCheck "frpc" + dockerComposeServiceCheck "influxdb" + dockerComposeServiceCheck "tailchat" + # example + # dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样" +} + +# 操作服务 (开启 关闭 重启) +function operationService(){ + echo "请选择你对'$1'服务的操作?(1.重启 2.开启 3.关闭 4.查看状态) 请输入:" + read operationChoice + operationWhile=false + while [ "$operationWhile" = false ]; do + if [ "$operationChoice" == "1" ]; then + operationWhile=true + restartDockerService "$1" + elif [ "$operationChoice" == "2" ]; then + operationWhile=true + if [ ["$1" == "tailchat"] ]; then + startTailChat + else + startDockerService "$1" + fi + elif [ "$operationChoice" == "3" ]; then + operationWhile=true + stopDockerService "$1" + elif [ "$operationChoice" == "4" ]; then + operationWhile=true + dockerComposeServiceCheck "$1" + else + echo "请重新输入:" + read operationChoice + fi + done +} + +# 开启 tailchat聊天应用 +function startTailChat() { + echo "tailchat 启动中..." + checkDockerImages "moonrailgun/tailchat:1.8" + if [ "$?" == 0 ]; then + docker pull moonrailgun/tailchat:1.8 + fi + checkDockerTag "moonrailgun/tailchat:1.8" "tailchat" + if [ "$?" == 0 ]; then + docker tag moonrailgun/tailchat tailchat + fi + docker-compose -f docker-compose.tailchat.yml --env-file docker-compose.tailchat.env -p tailchat up -d + echo "tailchat 启动成功!" +} + +# 安装docker +function installDocker(){ + curl -fsSL https://get.docker.com | bash -s docker + +} +# 安装dockerCompose +function installDockerCompose(){ + curl -L https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-`uname -m` > ./docker-compose +} + +# 开启Docker-compose 服务 +function startDockerService () { + echo "$1 开启中..." + docker-compose -f docker-compose.$1.yml -p $1 up -d + echo "$1 开启成功!" +} + +# 关闭Docker-compose 服务 +function stopDockerService () { + echo "$1 关闭中..." + docker-compose -f docker-compose.$1.yml -p $1 down + echo "$1 关闭成功!" +} + +# 重启Docker-compose 服务 +function restartDockerService () { + echo "$1 重启中..." + docker-compose -f docker-compose.$1.yml -p $1 restart + echo "$1 重启成功!" +} + +# 服务是否启动检查 +function dockerComposeServiceCheck(){ + # 定义docker-compose文件和项目名称 + compose_file="docker-compose.$1.yml" + project_name="$1" + service_name="$1" + # 检查服务是否已启动 + container_id=$(docker-compose -f "$compose_file" -p "$project_name" ps -q "$service_name") + if [ -n "$container_id" ]; then + echo "$service_name已启动" + return 1 + else + echo "$service_name未启动" + return 0 + fi +} + +# 检查docker镜像是否存在 +function checkDockerImages () { + if docker image inspect $1 >/dev/null 2>&1; then + echo "镜像 $1 存在" + return 1 + else + echo "镜像 $1 不存在" + return 0 + fi +} + +# 检查docker镜像标签是否存在 +function checkDockerTag () { + if docker image inspect $1 -f '{{.RepoTags}}' | grep -q $2; then + echo "标签 '$2' 存在于镜像 '$1'" + return 1 + else + echo "标签 '$2' 不存在于镜像 '$1'" + return 0 + fi +} + +# 选择操作 +function echoOperate(){ + echo "请选择以下操作:" + echo " 1. 开启 全部Docker服务" + echo " 2. 关闭 全部Docker服务 " + echo " 3. 检查 Docker服务运行情况" + echo " 4. 操作 alist 服务" + echo " 5. 操作 bitwatden 服务" + echo " 6. 操作 ddns 服务" + echo " 7. 操作 gitea 服务" + echo " 8. 操作 drone 服务" + echo " 9. 操作 halo 服务" + echo "10. 操作 frpc 服务" + echo "11. 操作 influxdb 服务" + echo "12. 操作 tailchat 服务" + echo "13. 操作 uptime-kuma 服务" + echo "14. 退出" + # example + # echo "99. 操作 xxx 服务" +} + +# =================================================== 上面全是函数======================================================== +echo "脚本依赖基础环境检查开始" + +# 判断docker是否安装过 +if command -v docker >/dev/null 2>&1; then + echo "Docker已安装" +else + echo "Docker未安装" + echo "如果你想要安装docker? 请输入 yes/no :" + read isNeedInstallDocker + isNeedInstallDockerWhile=false + while [ [ "$isNeedInstallDockerWhile" = false ] ]; do + if [ "$isNeedInstallDocker" == "yes" ]; then + installDocker + if ! command -v docker >/dev/null 2>&1; then + echo "docker安装失败!" + exitHandle + fi + isNeedInstallDockerWhile=true + elif [ "$isNeedInstallDocker" == "no" ]; then + isNeedInstallDockerWhile=true + echo "本脚本需要安装docker作为基础支持~下次见~" + exitHandle + else + echo "请重新输入:" + read isNeedInstallDocker + fi + done +fi +# 判断docker是否正常运行中 +if systemctl is-active --quiet docker; then + echo "Docker 运行正常" +else + echo "Docker未运行,是否需要启动?请输入 yes/no :" + read isNeedStartDocker + isNeedStartDockerWhile=false + while [ [ "$isNeedStartDockerWhile" = false ] ]; do + if [ "$isNeedStartDocker" == "yes" ]; then + systemctl start docker + systemctl enable docker + if systemctl is-active --quiet docker; then + echo "Docker 启动失败!" + exitHandle + fi + isNeedStartDockerWhile=true + elif [ "$isNeedStartDocker" == "no" ]; then + isNeedStartDockerWhile=true + echo "本脚本需要安装docker作为基础支持~下次见~" + exitHandle + else + echo "请重新输入:" + read isNeedStartDocker + fi + done +fi + +# 判断docker compose是否安装 +if which docker-compose >/dev/null 2>&1; then + echo "docker-compose 已安装" +else + echo "docker-compose 未安装" + echo "如果你想要安装docker-compose ? 请输入 yes/no :" + read isNeedInstallDockerCompose + isNeedInstallDockerComposeWhile=false + while [ [ "$isNeedInstallDockerComposeWhile" = false ] ]; do + if [ "$isNeedInstallDockerCompose" == "yes" ]; then + installDockerCompose + if ! which docker-compose >/dev/null 2>&1; then + echo "docker-compose安装失败!" + exitHandle + fi + isNeedInstallDockerComposeWhile=true + elif [ "$isNeedInstallDockerCompose" == "no" ]; then + isNeedInstallDockerComposeWhile=true + echo "本脚本需要安装docker-compose作为基础支持~下次见~" + exitHandle + else + echo "请重新输入:" + read isNeedInstallDockerCompose + fi + done +fi + +echo "脚本依赖基础环境检查结束" + +echoOperate + +# 判断操作是否有效 +valid_choice=false + +read choice + +while [[ "$valid_choice" == false ]]; do + if [ "$choice" == "1" ]; then + startAllDocker + exitHandle + elif [ "$choice" == "2" ]; then + stopAllDocker + exitHandle + elif [ "$choice" == "3" ]; then + checkAllDockerState + exitHandle + elif [[ "$choice" == "4" ]]; then + operationService "alist" + exitHandle + elif [[ "$choice" == "5" ]]; then + operationService "bitwatden" + exitHandle + elif [[ "$choice" == "6" ]]; then + operationService "ddns" + exitHandle + elif [[ "$choice" == "7" ]]; then + operationService "gitea" + exitHandle + elif [[ "$choice" == "8" ]]; then + operationService "drone" + exitHandle + elif [[ "$choice" == "9" ]]; then + operationService "halo" + exitHandle + elif [[ "$choice" == "10" ]]; then + operationService "frpc" + exitHandle + elif [[ "$choice" == "11" ]]; then + operationService "influxdb" + exitHandle + elif [[ "$choice" == "12" ]]; then + operationService "tailchat" + exitHandle + elif [[ "$choice" == "13" ]]; then + operationService "uptime-kuma" + exitHandle + elif [[ "$choice" == "14" ]]; then + exitHandle + # example + # elif [[ "$choice" == "99" ]]; then + # 你的操作~ + # exitHandle + else + echo "无效选项,请重新输入:" + read choice + fi +done