蒙珣的博客

未来很长,当有勇气面对,当与自己和解。

0%

一些关于docker的shell脚本

这个脚本是不值得单写一篇文章的,但是我怕哪一天脑子一抽就忘了,还是记录一下吧

反正周末在家闲着没事,也算是终于有时间写写文档和书评了

Docker多实例一键换包

  1. 先来看一下五个docker实例的目录结构,下方仅展示其中一个实例,其他实例仅存在数字差别

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    [root@localhost audiolistening_arm]# tree -L 1 ./audio_1/
    ./audio_1/
    ├── conf
    ├── docker-audio1.yml
    ├── logs
    └── user_manage_web

    ./audio_2/
    ├── conf
    ├── docker-audio2.yml
    └── logs

    ...

    ./audio_5/
    ├── conf
    ├── docker-audio5.yml
    └── logs
  2. 接着我们来看下audio_1的yaml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    version: "3"
    services:
    audiolistening-container_43_1:
    image: "audiolistening_arm:v3_zy_292"
    container_name: "audiolistening_43_1"
    deploy:
    resources:
    limits:
    cpus: "3.00"
    memory: 4G
    reservations:
    memory: 2G
    cpus: "1.00"
    restart: always
    volumes:
    - ./conf:/usr/local/audiolistening/AudioListening/etc/conf
    - ./logs:/usr/local/audiolistening/logs
    ports:
    - "18941:9000"
    - "19941:9800"
  3. 因为仅是多个实例统一换包,所以我们仅需要更改每个实例yaml文件的第四行,最后的版本号就行了

    下面是通过sed命令做的替换,就不多赘述了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #!/bin/bash

    #basePath=/data/voice_bot_4.2/audiolistening_arm

    read -p "请输入小程序版本号: " duration

    for i in {1..5};do

    lastDuration=`sed -n "4p" ./audio_${i}/docker-audio${i}.yml | awk -F '_' '{print $4}' | awk -F '"' '{print $1}'`
    sed -i "4s/$lastDuration/$duration/g" ./audio_${i}/docker-audio${i}.yml

    done

    for i in {1..5}; do docker-compose -f "`pwd`/audio_${i}/docker-audio${i}.yml" down ;done

    sleep 10s

    for i in {1..5}; do docker-compose -f "`pwd`/audio_${i}/docker-audio${i}.yml" up -d ;done
  4. 结果

Docker监控容器并输出到文件

这个脚本是用于监控大批量文件下载的内存开销的,所以打印了时间。当时因为用例少所以就没有使用python做统计。之前的文章有docker的监控与统计,所以这里就不说了

当然这个脚本有时间还是要写个python文件统计一下的

1
2
3
4
5
#!/bin/bash

now=$(date "+%Y-%m-%d_%H_%M_%S")

while true;do printf "\n$(date "+%Y-%m-%d_%H_%M_%S"):\n" | tee --append stats_$now.txt; docker stats --no-stream audiolistening_42 | tee --append stats_$now.txt; sleep 1; done

tee 命令允许用户在管道中间拆分数据流,一部分输出到屏幕(标准输出),另一部分输出到文件。这样可以在不影响数据流的同时,将数据保存到文件中。

tee 命令被用来将输出同时打印到终端屏幕和一个文件中。通过使用 --append 参数,它会将输出追加到文件的末尾,而不是覆盖文件内容。

docker stats --no-stream命令会获取容器的统计信息,但不会持续输出实时数据流,而是获取一次性的统计信息,然后将其写入文件。