136 lines
3.4 KiB
Bash
136 lines
3.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# 定义变量
|
||
|
|
CONTAINER_NAME="itc-web"
|
||
|
|
IMAGE_NAME="pcitc/itc-web"
|
||
|
|
IMAGE_VERSION="1.0.0"
|
||
|
|
IMAGE_FULL="$IMAGE_NAME:$IMAGE_VERSION"
|
||
|
|
PORT=80 # 服务暴露端口
|
||
|
|
CONTAINER_PORT=8080 # 服务暴露端口
|
||
|
|
HTML_DIR="/docker-data/nginx/html" # 服务暴露端口
|
||
|
|
CONF_DIR="/docker-data/nginx/conf" # 服务暴露端口
|
||
|
|
TZ="Asia/Shanghai" # 时区设置
|
||
|
|
|
||
|
|
# 显示帮助信息
|
||
|
|
show_help() {
|
||
|
|
echo "使用方法: $0 [操作类型]"
|
||
|
|
echo "操作类型:"
|
||
|
|
echo " deploy - 部署并启动服务容器"
|
||
|
|
echo " remove - 停止并删除容器及数据/日志目录"
|
||
|
|
echo " restart - 重启容器"
|
||
|
|
echo " logs - 查看容器日志"
|
||
|
|
echo " help - 显示帮助信息"
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
# 部署服务
|
||
|
|
deploy_service() {
|
||
|
|
# 创建数据和日志目录
|
||
|
|
if [ ! -d "$HTML_DIR" ]; then
|
||
|
|
echo "创建html数据目录: $HTML_DIR"
|
||
|
|
mkdir -p "$HTML_DIR"
|
||
|
|
chmod 777 "$HTML_DIR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 创建数据和日志目录
|
||
|
|
if [ ! -d "$CONF_DIR" ]; then
|
||
|
|
echo "创建配置数据目录: $CONF_DIR"
|
||
|
|
mkdir -p "$CONF_DIR"
|
||
|
|
chmod 777 "$CONF_DIR"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "部署镜像【$IMAGE_FULL】"
|
||
|
|
# 检查容器是否已存在,存在则停止并删除
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "停止并删除现有容器: $CONTAINER_NAME"
|
||
|
|
docker stop $CONTAINER_NAME >/dev/null
|
||
|
|
docker rm $CONTAINER_NAME >/dev/null
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 启动服务容器
|
||
|
|
echo "启动服务容器..."
|
||
|
|
docker run -d --privileged --restart always \
|
||
|
|
--name $CONTAINER_NAME \
|
||
|
|
-p $PORT:$CONTAINER_PORT \
|
||
|
|
-v $HTML_DIR:/usr/share/nginx/html \
|
||
|
|
-v $CONF_DIR:/etc/nginx \
|
||
|
|
$IMAGE_FULL
|
||
|
|
|
||
|
|
# 检查启动状态
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME -f status=running)" ]; then
|
||
|
|
echo "服务启动成功!"
|
||
|
|
echo "容器名称: $CONTAINER_NAME"
|
||
|
|
echo "访问地址: http://localhost:$PORT"
|
||
|
|
echo "数据目录: $HTML_DIR"
|
||
|
|
echo "配置目录: $CONF_DIR"
|
||
|
|
else
|
||
|
|
echo "服务启动失败,日志如下:"
|
||
|
|
docker logs $CONTAINER_NAME
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 删除服务
|
||
|
|
remove_service() {
|
||
|
|
# 检查容器是否存在
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "停止容器: $CONTAINER_NAME"
|
||
|
|
docker stop $CONTAINER_NAME >/dev/null
|
||
|
|
|
||
|
|
echo "删除容器: $CONTAINER_NAME"
|
||
|
|
docker rm $CONTAINER_NAME >/dev/null
|
||
|
|
else
|
||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 启动服务
|
||
|
|
restart_service() {
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "重启容器: $CONTAINER_NAME"
|
||
|
|
docker restart $CONTAINER_NAME >/dev/null
|
||
|
|
else
|
||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 查看日志
|
||
|
|
show_logs() {
|
||
|
|
if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
|
||
|
|
echo "查看 $CONTAINER_NAME 容器日志 (按 Ctrl+C 退出)..."
|
||
|
|
docker logs -f --tail 100 $CONTAINER_NAME
|
||
|
|
else
|
||
|
|
echo "容器 $CONTAINER_NAME 不存在"
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
# 主逻辑
|
||
|
|
if [ $# -lt 1 ]; then
|
||
|
|
show_help
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
case "$1" in
|
||
|
|
deploy)
|
||
|
|
deploy_service
|
||
|
|
;;
|
||
|
|
remove)
|
||
|
|
remove_service
|
||
|
|
;;
|
||
|
|
restart)
|
||
|
|
restart_service
|
||
|
|
;;
|
||
|
|
logs)
|
||
|
|
show_logs
|
||
|
|
;;
|
||
|
|
help)
|
||
|
|
show_help
|
||
|
|
;;
|
||
|
|
*)
|
||
|
|
echo "无效的操作类型: $1"
|
||
|
|
show_help
|
||
|
|
exit 1
|
||
|
|
;;
|
||
|
|
esac
|