随机
Enter 搜索 ↑↓ 切换 Esc 清空

docker_daily_scripts

脚本

Docker 40个高频运维脚本合集

docker_daily_scripts

Docker 40个高频运维脚本合集

通用说明

所有脚本通过 sudo cat 创建,sudo chmod +x 添加执行权限后即可直接运行。

传参规则:按顺序在脚本后追加参数,格式 ./脚本名.sh 参数1 参数2 ...

容器常用参数-d 后台运行、--name 指定容器名、-p 端口映射、-e 环境变量、-v 数据卷挂载

一、容器启停 & 批量管理(1–10)

1. 批量启动所有容器

sudo cat > ./docker_start_all.sh << 'EOF'
#!/bin/bash
docker start $(docker ps -aq)
EOF

sudo chmod +x ./docker_start_all.sh

2. 批量停止运行中容器

sudo cat > ./docker_stop_all.sh << 'EOF'
#!/bin/bash
docker stop $(docker ps -q)
EOF

sudo chmod +x ./docker_stop_all.sh

3. 批量重启所有运行容器

sudo cat > ./docker_restart_all.sh << 'EOF'
#!/bin/bash
docker restart $(docker ps -q)
EOF

sudo chmod +x ./docker_restart_all.sh

4. 批量删除已停止容器

sudo cat > ./docker_rm_exited.sh << 'EOF'
#!/bin/bash
docker rm $(docker ps -aq -f "status=exited")
EOF

sudo chmod +x ./docker_rm_exited.sh

5. 删除单个容器(传参)

sudo cat > ./docker_rm_container.sh << 'EOF'
#!/bin/bash
docker rm $1
EOF

sudo chmod +x ./docker_rm_container.sh

6. 强制停止并删除容器

sudo cat > ./docker_rm_force.sh << 'EOF'
#!/bin/bash
docker rm -f $1
EOF

sudo chmod +x ./docker_rm_force.sh

7. 临时容器(退出自动删除)

sudo cat > ./docker_run_temp.sh << 'EOF'
#!/bin/bash
IMAGE=$1
docker run --rm $IMAGE
EOF

sudo chmod +x ./docker_run_temp.sh

8. 容器设置自动重启

sudo cat > ./docker_set_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart always $1
EOF

sudo chmod +x ./docker_set_autorestart.sh

9. 取消容器自动重启

sudo cat > ./docker_cancel_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart no $1
EOF

sudo chmod +x ./docker_cancel_autorestart.sh

10. 批量给所有容器开启自启

sudo cat > ./docker_batch_autorestart.sh << 'EOF'
#!/bin/bash
docker update --restart always $(docker ps -aq)
EOF

sudo chmod +x ./docker_batch_autorestart.sh

二、镜像管理 & 清理(11–20)

11. 拉取镜像

sudo cat > ./docker_pull_img.sh << 'EOF'
#!/bin/bash
docker pull $1
EOF

sudo chmod +x ./docker_pull_img.sh

12. 删除单个镜像

sudo cat > ./docker_rmi_img.sh << 'EOF'
#!/bin/bash
docker rmi $1
EOF

sudo chmod +x ./docker_rmi_img.sh

13. 清理悬空镜像(无用残片)

sudo cat > ./docker_clean_dangling.sh << 'EOF'
#!/bin/bash
docker rmi $(docker images -q -f dangling=true)
EOF

sudo chmod +x ./docker_clean_dangling.sh

14. 一键全量清理 Docker 垃圾

sudo cat > ./docker_prune.sh << 'EOF'
#!/bin/bash
docker system prune -f
EOF

sudo chmod +x ./docker_prune.sh

15. 清理镜像+容器+网络+数据卷

sudo cat > ./docker_prune_all.sh << 'EOF'
#!/bin/bash
docker system prune -a -f --volumes
EOF

sudo chmod +x ./docker_prune_all.sh

16. 导出镜像为本地文件

sudo cat > ./docker_save_img.sh << 'EOF'
#!/bin/bash
IMG=$1
OUT_FILE="${IMG//:/_}.tar"
docker save -o $OUT_FILE $IMG
EOF

sudo chmod +x ./docker_save_img.sh

17. 导入本地镜像文件

sudo cat > ./docker_load_img.sh << 'EOF'
#!/bin/bash
docker load -i $1
EOF

sudo chmod +x ./docker_load_img.sh

18. 给镜像打新标签

sudo cat > ./docker_tag_img.sh << 'EOF'
#!/bin/bash
OLD_IMG=$1
NEW_IMG=$2
docker tag $OLD_IMG $NEW_IMG
EOF

sudo chmod +x ./docker_tag_img.sh

19. 查看本地所有镜像列表

sudo cat > ./docker_list_img.sh << 'EOF'
#!/bin/bash
docker images
EOF

sudo chmod +x ./docker_list_img.sh

20. 按名称过滤镜像

sudo cat > ./docker_grep_img.sh << 'EOF'
#!/bin/bash
docker images | grep $1
EOF

sudo chmod +x ./docker_grep_img.sh

三、日志查看 & 日志管控(21–28)

21. 查看容器实时日志

sudo cat > ./docker_logs_follow.sh << 'EOF'
#!/bin/bash
docker logs -f $1
EOF

sudo chmod +x ./docker_logs_follow.sh

22. 查看容器最后100行日志

sudo cat > ./docker_logs_tail.sh << 'EOF'
#!/bin/bash
docker logs --tail 100 $1
EOF

sudo chmod +x ./docker_logs_tail.sh

23. 批量查看所有运行容器日志

sudo cat > ./docker_batch_logs.sh << 'EOF'
#!/bin/bash
docker ps -q | xargs docker logs --tail 20
EOF

sudo chmod +x ./docker_batch_logs.sh

24. 进入容器终端交互

sudo cat > ./docker_exec_bash.sh << 'EOF'
#!/bin/bash
docker exec -it $1 /bin/bash
EOF

sudo chmod +x ./docker_exec_bash.sh

25. 容器内执行单次命令(不进入终端)

sudo cat > ./docker_exec_cmd.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
CMD=${*:2}
docker exec $CONTAINER $CMD
EOF

sudo chmod +x ./docker_exec_cmd.sh

26. 手动清空容器日志文件

sudo cat > ./docker_clear_log.sh << 'EOF'
#!/bin/bash
LOG_FILE=$(docker inspect --format='{{.LogPath}}' $1)
cat /dev/null > $LOG_FILE
EOF

sudo chmod +x ./docker_clear_log.sh

27. 全局限制容器日志大小(永久配置)

sudo cat > ./docker_limit_log.sh << 'EOF'
#!/bin/bash
cat > /etc/docker/daemon.json <<EOF2
{
  "log-driver":"json-file",
  "log-opts":{
    "max-size":"50m",
    "max-file":"3"
  }
}
EOF2
systemctl restart docker
EOF

sudo chmod +x ./docker_limit_log.sh

28. 查看容器日志文件路径

sudo cat > ./docker_get_log_path.sh << 'EOF'
#!/bin/bash
docker inspect --format='{{.LogPath}}' $1
EOF

sudo chmod +x ./docker_get_log_path.sh

四、备份、迁移 & 文件互传(29–34)

29. 容器文件拷贝到宿主机

sudo cat > ./docker_cp_to_host.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
SRC=$2
DEST=$3
docker cp $CONTAINER:$SRC $DEST
EOF

sudo chmod +x ./docker_cp_to_host.sh

30. 宿主机文件上传到容器

sudo cat > ./docker_cp_to_container.sh << 'EOF'
#!/bin/bash
SRC=$1
CONTAINER=$2
DEST=$3
docker cp $SRC $CONTAINER:$DEST
EOF

sudo chmod +x ./docker_cp_to_container.sh

31. 导出整个容器为备份包

sudo cat > ./docker_export_container.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
BACKUP="${CONTAINER}_$(date +%F).tar"
docker export $CONTAINER > $BACKUP
EOF

sudo chmod +x ./docker_export_container.sh

32. 从备份包导入为镜像

sudo cat > ./docker_import_container.sh << 'EOF'
#!/bin/bash
FILE=$1
docker import $FILE restore_img:latest
EOF

sudo chmod +x ./docker_import_container.sh

33. 数据卷备份打包

sudo cat > ./docker_backup_volume.sh << 'EOF'
#!/bin/bash
VOLUME=$1
BACKUP=volume_${VOLUME}_$(date +%F).tar.gz
docker run --rm -v $VOLUME:/src -v $(pwd):/backup alpine tar -zcvf /backup/$BACKUP /src
EOF

sudo chmod +x ./docker_backup_volume.sh

34. 数据卷恢复

sudo cat > ./docker_restore_volume.sh << 'EOF'
#!/bin/bash
FILE=$1
VOLUME=$2
docker run --rm -v $VOLUME:/dst -v $(pwd):/backup alpine tar -zxvf /backup/$FILE -C /dst
EOF

sudo chmod +x ./docker_restore_volume.sh

五、网络、端口、资源监控(35–40)

35. 查看所有容器端口映射

sudo cat > ./docker_list_port.sh << 'EOF'
#!/bin/bash
docker ps --format "{{.Names}} -> {{.Ports}}"
EOF

sudo chmod +x ./docker_list_port.sh

36. 创建自定义桥接网络

sudo cat > ./docker_create_network.sh << 'EOF'
#!/bin/bash
NET_NAME=$1
docker network create $NET_NAME
EOF

sudo chmod +x ./docker_create_network.sh

37. 容器接入指定网络

sudo cat > ./docker_connect_network.sh << 'EOF'
#!/bin/bash
CONTAINER=$1
NET=$2
docker network connect $NET $CONTAINER
EOF

sudo chmod +x ./docker_connect_network.sh

38. 查看容器资源实时占用

sudo cat > ./docker_stats_single.sh << 'EOF'
#!/bin/bash
docker stats $1
EOF

sudo chmod +x ./docker_stats_single.sh

39. 一次性统计容器资源(不刷新)

sudo cat > ./docker_stats_all.sh << 'EOF'
#!/bin/bash
docker stats --no-stream
EOF

sudo chmod +x ./docker_stats_all.sh

40. 一键集群启停综合脚本(整合版)

sudo cat > ./docker_tool.sh << 'EOF'
#!/bin/bash
case $1 in
start)
  echo "=== 启动所有容器 ==="
  docker start $(docker ps -aq -f status=exited)
  ;;
stop)
  echo "=== 停止所有容器 ==="
  docker stop $(docker ps -q)
  ;;
restart)
  echo "=== 重启所有容器 ==="
  docker restart $(docker ps -q)
  ;;
clean)
  echo "=== 清理停止容器 & 悬空镜像 ==="
  docker rm $(docker ps -aq -f status=exited)
  docker rmi $(docker images -q -f dangling=true)
  ;;
*)
  echo "用法: $0 [start|stop|restart|clean]"
  ;;
esac
EOF

sudo chmod +x ./docker_tool.sh

通用补充说明

  1. 权限要求:涉及系统配置(如 daemon.json)、批量清理命令,建议使用 root 或 sudo 执行。
  2. 安全提醒docker rm -fdocker system prune -a --volumes 为高危删除操作,生产环境执行前务必确认。
  3. 脚本命名建议:可按功能命名,如 docker_rm_container.shdocker_pull_img.sh,方便日常调用。