当前位置: 首页 > news >正文

Docker 自动化管理脚本大全

下面是一份经过优化和扩展的 Docker 自动化管理脚本,可帮助您更高效、安全地管理容器和镜像。它支持容器启停、更新、日志、备份、进入容器、导出配置等功能,基本覆盖日常 Docker 运维场景。

脚本代码

保存为 docker-manager.sh 并赋予执行权限:

#!/bin/bash
# Docker 管理脚本集合(增强版)# 用法: ./docker-manager.sh [command] [options]
set -e
# 彩色输出RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'BLUE='\033[0;34m'NC='\033[0m' # No Color
# 显示使用说明usage() {    echo -e "${BLUE}Docker 管理脚本${NC}"    echo "用法: $0 [command]"    echo ""    echo "命令:"    echo "  list          列出所有容器"    echo "  start-all     启动所有容器"    echo "  stop-all      停止所有容器"    echo "  restart-all   重启所有容器"    echo "  cleanup       清理无用镜像和容器"    echo "  stats         显示容器资源使用情况"    echo "  update [name] 更新指定容器(拉取新镜像并重启)"    echo "  backup [path] 备份所有容器的数据卷(默认: ./backups)"    echo "  network       显示网络信息"    echo "  logs [name]   查看容器日志(默认显示所有容器日志)"    echo "  exec [name]   进入容器交互式终端"    echo "  export [name] 导出容器配置到 JSON"    echo "  top [name]    查看容器内进程"    echo ""}
# 检查 Docker 是否可用check_docker() {    if ! command -v docker &> /dev/null; then        echo -e "${RED}错误:${NC} 未找到 Docker,请先安装 Docker"        exit 1    fi}
# 列出容器list_containers() {    echo -e "${YELLOW}正在运行的容器:${NC}"    docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"echo -e "\n${YELLOW}所有容器:${NC}"    docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}"}
# 启动所有容器start_all_containers() {    containers=$(docker ps -aq)    if [ -z "$containers" ]; then        echo "没有容器可启动"        return    fi    echo "正在启动所有容器..."    docker start $containers    echo -e "${GREEN}所有容器已启动${NC}"}
# 停止所有容器stop_all_containers() {    containers=$(docker ps -q)    if [ -z "$containers" ]; then        echo "没有正在运行的容器"        return    fi    echo "正在停止所有容器..."    docker stop $containers    echo -e "${GREEN}所有容器已停止${NC}"}
# 重启所有容器restart_all_containers() {    containers=$(docker ps -q)    if [ -z "$containers" ]; then        echo "没有正在运行的容器"        return    fi    echo "正在重启所有容器..."    docker restart $containers    echo -e "${GREEN}所有容器已重启${NC}"}
# 清理无用资源cleanup_docker() {    echo "清理无用容器..."    docker container prune -fecho "清理无用镜像..."    docker image prune -afecho "清理无用网络..."    docker network prune -fecho "清理无用卷..."    docker volume prune -fecho -e "${GREEN}清理完成${NC}"}
# 显示资源使用情况show_stats() {    docker stats --no-stream}
# 更新容器update_container() {    if [ -z "$1" ]; then        echo "错误: 需要指定容器名称"        exit 1    ficontainer_name=$1    echo "正在更新容器: $container_name"# 获取镜像    image_name=$(docker inspect --format='{{.Config.Image}}' $container_name)echo "拉取最新镜像: $image_name"    docker pull $image_nameecho "停止并删除容器: $container_name"    docker stop $container_name    docker rm $container_nameecho -e "${YELLOW}请手动重新运行容器,因为运行参数可能不同${NC}"    echo "示例: docker run -d --name $container_name [其他参数] $image_name"}
# 备份数据卷backup_volumes() {    backup_path=${1:-./backups}    mkdir -p $backup_pathecho "备份数据卷到: $backup_path"for container in $(docker ps -aq); do        container_name=$(docker inspect --format='{{.Name}}' $container | sed 's/\///g')        volumes=$(docker inspect -f '{{range .Mounts}}{{if .Name}}{{.Name}} {{end}}{{end}}' $container_name)if [ ! -z "$volumes" ]; then            echo "备份容器 $container_name 的数据卷..."            for volume in $volumes; do                echo "备份卷: $volume"                docker run --rm -v $volume:/source -v $backup_path:/backup alpine \                    tar -czf /backup/${container_name}_${volume}_$(date +%Y%m%d_%H%M%S).tar.gz -C /source .            done        fi    doneecho -e "${GREEN}备份完成${NC}"}
# 显示网络信息show_network() {    echo "Docker 网络:"    docker network lsecho -e "\n容器网络详情:"    for network in $(docker network ls -q); do        echo "网络 $(docker network inspect -f '{{.Name}}' $network):"        docker network inspect -f '{{range .Containers}}{{.Name}} {{end}}' $network        echo ""    done}
# 查看容器日志view_logs() {    if [ -z "$1" ]; then        echo "显示所有容器日志 (Ctrl+C 退出)..."        docker-compose logs -f || docker logs -f $(docker ps -q)    else        container_name=$1        echo "显示容器 $container_name 日志 (Ctrl+C 退出)..."        docker logs -f $container_name    fi}
# 进入容器exec_container() {    if [ -z "$1" ]; then        echo "错误: 需要指定容器名称"        exit 1    fi    docker exec -it $1 /bin/bash || docker exec -it $1 sh}
# 导出容器配置export_container() {    if [ -z "$1" ]; then        echo "错误: 需要指定容器名称"        exit 1    fi    docker inspect $1 > ${1}_config.json    echo "容器配置已导出到 ${1}_config.json"}
# 查看容器进程top_container() {    if [ -z "$1" ]; then        echo "错误: 需要指定容器名称"        exit 1    fi    docker top $1}
# 主程序check_docker
case "${1:-}" in    list|ls)        list_containers ;;    start-all)      start_all_containers ;;    stop-all)       stop_all_containers ;;    restart-all)    restart_all_containers ;;    cleanup)        cleanup_docker ;;    stats|st)       show_stats ;;    update)         update_container "$2" ;;    backup)         backup_volumes "$2" ;;    network)        show_network ;;    logs)           view_logs "$2" ;;    exec)           exec_container "$2" ;;    export)         export_container "$2" ;;    top)            top_container "$2" ;;    *)              usage; exit 1 ;;esac
exit 0

使用说明

  1. 保存脚本为 docker-manager.sh
  2. 添加执行权限:
chmod +x docker-manager.sh
  1. 运行脚本:
./docker-manager.sh [command]

✅ 功能说明
● list / ls
: 列出所有容器(运行中和已停止的)
● start-all
: 启动所有容器
● stop-all
: 停止所有容器
● restart-all
: 重启所有容器
● cleanup
: 清理无用的镜像、容器、网络和卷
● stats / st
: 显示容器资源使用情况
● update [name]
: 更新指定容器(拉取新镜像)
● backup [path]
: 备份所有容器的数据卷
● network
: 显示 Docker 网络信息
● logs [name]
: 查看容器日志(单个或全部)
● exec [name]
: 进入容器交互式终端
● export [name]
: 导出容器配置到 JSON
● top [name]
: 查看容器内运行的进程

额外实用命令

# 查看容器资源使用情况(实时)docker stats
# 查看镜像层大小docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
# 一键停止并删除所有容器docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
# 删除所有未使用的镜像docker image prune -a
# 显示磁盘使用情况docker system df
# 查看容器 IP 地址docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name
# 在容器中执行命令docker exec -it container_name /bin/bash

⚡ 有了这份增强版 docker-manager.sh,你基本可以像用小型 CLI 工具一样轻松管理整个 Docker 环境。

http://www.dtcms.com/a/577917.html

相关文章:

  • LangFlow 源码分析:Trace 追踪机制核心问题与解决方案
  • SpringBoot+Vue3全栈开发笔记后端部分
  • 网站服务器模式温江 网站建设
  • it人必看的网站网站开发招聘年薪
  • 安卓基础之《(1)—简介》
  • 面试题剖析:android全局触摸事件的前世与今生InputMonitor/SpyWindow
  • 【HarmonyOS-北向开发(软件)】
  • 20251106给荣品RD-RK3588-MID开发板跑Rockchip的原厂Android13系统时禁止锁屏+永不休眠
  • 深入理解 SELinux:架构、概念与基本操作
  • 用vs2010做网站论文深圳市专业制作网站公司
  • 国土资源局加强网站建设wordpress 栏目 伪静态化
  • XMAU7118_VC1:16通道PDM到I²S/TDM音频转换器产品介绍
  • 云手机 轻松畅玩云端游戏
  • 认证空间官方网站附子seo教程
  • 网络层协议 - ICMP
  • DINO系列粗读
  • Java设计模式精讲---03建造者模式
  • P3384 【模板】重链剖分/树链剖分
  • OpenCV(二十):位运算
  • 重组蛋白纯化标签科普:从His到SUMO、Avi的全面解析
  • 【QT第三章】常用控件1
  • 鱼台做网站多少钱wordpress 防黑
  • 南通网站建设排名公司网站怎么做图片放映效果
  • AI Agent:突破工作流局限,开启智能决策新时代
  • 自己动手写深度学习框架(神经网络的引入)
  • 西安专业网站建设服务好查询食品注册商标查询官网
  • ref对比reactive
  • 基于融智学双重形式化的汉字汉语数学建模方法
  • 手机wap网站多少钱wordpress页面简码
  • 嘉兴网嘉兴网站建设网址大全汽车之家官方网