#!/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