【Linux】ubuntu 在多台主机上批量安装、加载并运行 docker 镜像(批量执行脚本)

ubuntu 在多台主机上批量安装加载并运行 docker 镜像

前提:

  • 主机之间可以相互通信
  • 所有主机开放 ssh root 用户远程连接权限
  • 所有主机 root 用户密码相同
  • 所有主机开放22端口,或者指定端口

1.安装sshpass

sudo apt update
sudo apt install sshpass

2.准备主机列表文件

创建一个名为 hosts.txt 的文件:

nano hosts.txt

格式如下:

[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

如果没有指定用户名,下面的脚本会默认使用 root 用户。

3.创建一个批处理脚本

该脚本会在指定的主机上同时安装、加载并运行 docker 镜像,每台主机上创建一个日志文件,保存在 /tmp 目录下的 talimu_deploy.remote.log文件中。此外,该脚本还会持续监控每台主机的部署状态,并输出到终端。完成所有主机部署后,会输出最终的部署统计结果。并且,还会把每台主机在部署过程中产生的日志文件保存到 远程主机日志 目录下,并以每台主机的 ip 命名。

其中的 install_big_box_env.sh 脚本是自定义的安装 docker 的前置环境的脚本,包括离线安装 docker 、nvidia-container-toolkit 和加载本地镜像等操作。

#!/bin/bash

# 声明关联数组
declare -A hosts_status

# 配置参数
HOSTS_FILE="hosts.txt"                        
PASSWORD="Qwer1234!"                          
SSH_PORT="22"                                 
REMOTE_LOGS_DIR="远程主机日志"
mkdir -p "$REMOTE_LOGS_DIR"

# 定义要执行的命令
COMMANDS="cd /home/yy/talimu/talimu && \
          echo '开始执行安装脚本...' && \
          bash install_big_box_env.sh && \
          
          # 停止并删除旧容器
          echo '正在停止并删除旧容器...' && \
          docker stop talimu1.0 || true && \
          docker rm -f talimu1.0 || true && \
          
          # 启动新容器
          echo '正在启动新容器...' && \
          docker run --gpus all -d --network host \
          --device=/dev/snd \
          -v /etc/asound.conf:/etc/asound.conf \
          -v ~/.asoundrc:/root/.asoundrc \
          -v /app:/app \
          -v /voice_models:/voice_models \
          -v /db:/db \
          -p 81:81 \
          --name talimu1.0 \
          --restart always \
          talimu:1.0 python3 app.py --logfile=output.log && \
          
          echo '容器启动完成'"

# 定义颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# execute_remote_command 函数
execute_remote_command() {
   
   
    local username=$1
    local host=$2
    local commands=$3
    local log_prefix=$4
    local log_file="${REMOTE_LOGS_DIR}/${host}.log"
    
    # 创建或清空日志文件
    echo "==================== 部署日志 ====================" > "$log_file"
    echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file"
    echo "部署主机: $username@$host" >> "$log_file"
    echo "================================================" >> "$log_file"
    echo "" >> "$log_file"
    
    echo "开始执行远程命令 - $username@$host" | tee -a "$log_file"
    
    # 执行远程命令
    sshpass -p "$PASSWORD" ssh -p $SSH_PORT -o StrictHostKeyChecking=no "$username@$host" \
        "nohup bash -c '$commands' > $log_prefix.remote.log 2>&1 &" 2>&1 | tee -a "$log_file"
    
    sleep 5
    
    # 检查命令是否成功启动
    if sshpass -p "$PASSWORD" ssh -p $SSH_PORT "$username@
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值