添加 'bash/docker-compose操作脚本/docker-operate.sh'

master
djshen 2 years ago
parent 1b45a18316
commit 5a26c3bb23

@ -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
Loading…
Cancel
Save