如题,大家都是怎么管理多个docker镜像的?
我服务器上跑了8个镜像,我用的办法是把不同docker镜像的docker-compose.yml文件放在同一个父目录下的不同子目录,然后在脚本中定义工作目录为该父目录,通过脚本来管理。
我的目录结构类似于:
- /etc
- /docker-compose
- /docker-compose
我的脚本长这样:
#!/bin/bash
usage() {
echo ""
echo "使用说明:这个脚本用于管理 Docker 容器,支持 start, stop, restart,logs, pull命令"
echo "用法一,启动所有镜像: ./docker.sh [指令]"
echo "用法二,启动特定镜像: ./docker.sh -n [服务] [指令]"
echo ""
echo "服务:"
echo ""
echo " wechat: chatgpt-on-wechat"
echo " chatnext: chat-next-web"
echo " chatgemini: chetgemini"
echo " gemini: gemini-pro-chat"
echo " oneapi: oneapi"
echo " bing: go-proxy-bingai"
echo " coze: coze-discord-proxy"
echo " lobe: lobe"
echo ""
echo "命令:"
echo ""
echo " start: 启动服务"
echo " stop: 停止服务"
echo " restart: 重启服务"
echo " logs: 查看日志"
echo " pull: 更新镜像并重启"
echo ""
echo "示例:"
echo ""
echo " ./docker.sh start - 启动所有服务"
echo " ./docker.sh stop - 停止所有服务"
echo " ./docker.sh -n wechat restart - 重启wechat服务"
exit 1
}
# 检查至少有一个参数
if [ "$#" -lt 1 ]; then
usage
fi
parent_dir="/etc/docker-compose"
perform_action() {
dir=$1
action=$2
echo "*** $action $dir ***"
case $action in
start)
(cd "$dir" && docker compose up -d)
;;
stop)
(cd "$dir" && docker compose down)
;;
restart)
(cd "$dir" && docker compose down && docker compose up -d)
;;
logs)
(cd "$dir" && docker compose logs -f)
;;
pull)
(cd "$dir" && docker compose pull && docker compose up -d)
docker image prune -f --filter "dangling=true"
;;
*)
echo "未知操作: $action"
usage
;;
esac
}
if [ "$1" = "-n" ]; then
# 指定服务操作
if [ "$#" -ne 3 ]; then
usage
fi
service_name=$2
action=$3
service_dir="$parent_dir/$service_name"
if [ ! -d "$service_dir" ]; then
echo "未找到对应的服务,请检查你的输入。"
exit 1
fi
perform_action "$service_dir" "$action"
else
# 对所有服务执行操作
action=$1
for dir in "$parent_dir"/*; do
if [ -d "$dir" ]; then
perform_action "$dir" "$action"
fi
done
fi
PS:本人并无编程经验,代码由GPT-4生成后多次修修补补而来,不喜轻喷
有没有更好的方法或者管理软件啥的?