Docker 40个自动化管理脚本-1 (20/40)

文章目录

      • 1. 自动化容器创建脚本
      • 2. 批量启动所有容器
      • 3. 批量停止运行中容器#!/bin/bash
      • 4. 批量删除停止的容器
      • 5. 运行容器并在退出后自动清理
      • 6. 自动重启关键容器
      • 7. 容器资源监控脚本
      • 8. 监控所有容器资源使用
      • 9. 检查所有容器日志
      • 10. 清理未使用资源脚本
      • 11. 删除悬空镜像
      • 12. 容器数据备份脚本
      • 13. 容器文件系统完整备份
      • 14. 从备份恢复容器#!/bin/bash
      • 15. 数据卷备份到S3
      • 16. Docker网络管理脚本
      • 17. 列出所有容器暴露端口
      • 18. 更新运行中容器
      • 19. 手动清理容器日志
      • 20. 设置日志大小限制

Docker作为当今最流行的容器化技术,已经彻底改变了应用程序的部署和管理方式。然而,随着项目规模的扩大和容器数量的增加,手动管理容器变得越来越繁琐且容易出错。本文将介绍40个实用的自动化脚本,涵盖容器生命周期管理、资源监控、数据备份恢复、日志清理等各个方面,帮助开发者和运维人员提升效率,减少人为错误,构建更加健壮的Docker环境。

1. 自动化容器创建脚本

IMAGE_NAME="nginx"
CONTAINER_NAME="my_nginx"
PORT_MAPPING="8080:80"
ENV_VARS="ENV=production"docker run -d --name $CONTAINER_NAME -p $PORT_MAPPING -e $ENV_VARS $IMAGE_NAME

脚本通过预定义配置自动创建容器,使用 -d 参数以分离模式运行,–name 指定容器名称,-p 映射端口,-e 设置环境变量。只需修改顶部变量即可快速创建不同配置的容器。

2. 批量启动所有容器

docker start $(docker ps -aq)

此脚本通过 docker ps -aq 获取所有容器ID(包括停止的),然后使用 docker start 批量启动,特别适合系统重启或维护后快速恢复服务。

3. 批量停止运行中容器#!/bin/bash

docker stop $(docker ps -q)

与启动脚本对应,docker ps -q 只列出运行中容器ID,docker stop 命令批量停止这些容器,适合需要快速关闭所有服务的场景。

4. 批量删除停止的容器

docker rm $(docker ps -aq -f "status=exited")

通过 docker ps -aq -f “status=exited” 过滤出已停止的容器,然后使用 docker rm 删除它们,释放系统资源。

5. 运行容器并在退出后自动清理

IMAGE_NAME=$1
docker run --rm $IMAGE_NAME

使用 –rm 参数可以在容器停止后自动删除,非常适合执行一次性任务的临时容器。

6. 自动重启关键容器

CONTAINER_NAME=$1
docker update --restart always $CONTAINER_NAME

通过 docker update –restart always 为关键容器配置重启策略,确保它们在意外停止后能自动恢复,增强服务可靠性。

7. 容器资源监控脚本

CONTAINER_NAME="my_app"
echo "资源使用情况:"
docker stats --no-stream $CONTAINER_NAME
echo "日志:"
docker logs --tail 50 $CONTAINER_NAME

该脚本结合 docker stats –no-stream 获取容器实时资源使用情况,以及 docker logs –tail 查看最新日志,是故障排查的利器。

8. 监控所有容器资源使用

docker stats --all

更全面的监控方案,–all 参数包括停止的容器,提供系统整体资源消耗视图。

9. 检查所有容器日志

docker ps -q | xargs -I {} docker logs {}

通过管道和 xargs 将运行中容器ID传递给 docker logs 命令,实现多容器日志的统一查看。

10. 清理未使用资源脚本

docker system prune -f --volumes

docker system prune 是强大的清理工具,-f 跳过确认,–volumes 包括未使用的卷,定期运行可释放大量磁盘空间。

11. 删除悬空镜像

docker rmi $(docker images -q -f "dangling=true")

docker images -q -f “dangling=true” 列出无标签的悬空镜像,docker rmi 删除它们,避免占用存储空间。

12. 容器数据备份脚本

CONTAINER_NAME="my_app"
BACKUP_DIR="/backup"
TIMESTAMP=$(date +%F)
docker cp $CONTAINER_NAME:/data $BACKUP_DIR/$CONTAINER_NAME-backup-$TIMESTAMP

使用 docker cp 将容器内数据复制到主机备份目录,并添加时间戳便于管理。可通过cron定时执行,如 0 2 * * * /path/to/backup_script.sh 实现每日自动备份。

13. 容器文件系统完整备份

CONTAINER_ID=$1
BACKUP_FILE="${CONTAINER_ID}_backup_$(date +%F).tar"
docker export $CONTAINER_ID > $BACKUP_FILE

docker export 导出整个容器文件系统到tar文件,比单纯数据备份更完整。

14. 从备份恢复容器#!/bin/bash

BACKUP_FILE=$1
docker import $BACKUP_FILE restored_container:latest

与导出对应,docker import 从tar备份创建新镜像,可用于启动恢复后的容器。

15. 数据卷备份到S3

BACKUP_PATH="/path/to/backup"
S3_BUCKET="s3://your-bucket-name/docker-volumes/"
MAX_BACKUPS=5mkdir -p "$BACKUP_PATH"
docker run --rm -v "$BACKUP_PATH:/backup" alpine tar czf /backup/backup-$(date +%Y%m%d%H%M%S).tar.gz /var/lib/docker/volumes/
aws s3 cp "/backup/backup-$(date +%Y%m%d%H%M%S).tar.gz" "$S3_BUCKET"
find "$BACKUP_PATH" -type f -name 'backup-*' -mtime +$MAX_BACKUPS -exec rm {} \;

脚本将数据卷打包压缩后上传到S3,并自动清理旧备份,实现了异地容灾。

16. Docker网络管理脚本

NETWORK_NAME="custom_bridge"
docker network create $NETWORK_NAME
docker network connect $NETWORK_NAME my_container

使用 docker network create 创建自定义网络,docker network connect 将容器接入网络,适合构建隔离的微服务环境。

17. 列出所有容器暴露端口

docker ps --format '{{.ID}}: {{.Ports}}'

自定义格式输出容器ID和暴露端口,快速了解服务访问端点。

18. 更新运行中容器

CONTAINER_NAME=$1
IMAGE_NAME=$(docker inspect --format='{{.Config.Image}}' $CONTAINER_NAME)
docker pull $IMAGE_NAME
docker stop $CONTAINER_NAME
docker rm $CONTAINER_NAME
docker run -d --name $CONTAINER_NAME $IMAGE_NAME

通过 docker inspect 获取容器镜像名,拉取最新镜像后重新创建容器,实现无缝更新。

19. 手动清理容器日志

find /var/lib/docker/containers/ -name "*.log" -exec stat {} \;
find /var/lib/docker/containers/ -name "*.log" -mtime +7 -exec rm -f {} \;

第一条命令查看日志文件大小和修改时间,第二条删除7天前的日志文件,有效释放空间。

20. 设置日志大小限制

cat > /etc/docker/daemon.json <<EOF
{"log-driver": "json-file","log-opts": {"max-size": "50m","max-file": "3"}
}
EOF
systemctl restart docker

通过修改daemon.json配置文件,限制单个日志文件最大50MB,最多保留3个,从根本上防止日志膨胀。

在这里插入图片描述


“人的一生会经历很多痛苦,但回头想想,都是传奇”。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95222.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95222.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go学习1:常量、变量的命名

golang 安装 | go-zero Documentation 在这个文档里&#xff0c;环境变量系统自动配好了&#xff08;自定义的一样&#xff09;不需要修改环境变量。 我下载的是1.25版本的。 目前使用go mod管理项目。 C的产出比太低&#xff0c;而Java和C#哲学又来源于C。 Go语言成功的项目…

2025_WSL2_Ubuntu20.04_C++20_concept 环境配置

需要使用 c20 新特性 concept 泛型约束 记录如何在 wsl2 里面配置环境&#xff0c;如果需要源工程&#xff0c;可以私发 背景&#xff1a;使用 CMakeLists.txt 配置整个工程 从官网 https://gcc.gnu.org/projects/cxx-status.html#cxx20 可以看到 concept 受 g10 支持这里注意虽…

Encoder编码器

Encoder编码器 #include <libavutil/log.h> #include <libavutil/opt.h> #include <libavcodec/avcodec.h>static int encode(AVCodecContext *ctx, AVFrame *frame, AVPacket *pkt, FILE *out){int ret -1;ret avcodec_send_frame(ctx, frame);if(ret <…

微服务-ruoyi-cloud部署

微服务 阿里 阿里nacos 注册中心&#xff0c;配置中心 spring cloud gateway网关 公共服务 阿里sentinel 面向分布式、多语言异构化服务架构的流量治理组件 阿里seata 是一款开源的分布式事务解决方案 nginx 静态资源服器 反向代理 ruoyi-cloud部署架构 VM配置 网…

Win7能看到Win10打印机但连接不上

解决方案&#xff1a;方法1.修改注册表&#xff08;适用于错误代码0x0000011b&#xff09;修改注册表&#xff08;关键步骤&#xff09;&#xff1a;许多情况下&#xff0c;这是由于Win10的一项隐私设置导致的1。在Win10电脑上&#xff0c;按 Win R&#xff0c;输入 regedit 并…

如何构建灵活、可控、可扩展的多云网络底座

在 AI 和数字化的浪潮中&#xff0c;越来越多的企业不再满足于单一云环境&#xff0c;而是同时使用 多家公有云、自建IDC、甚至边缘节点。这种多云模式虽然灵活&#xff0c;但也带来了一个新的挑战&#xff1a;如何让跨云、跨地的数据流动变得高效、安全、可控&#xff1f;答案…

幂等性设计艺术:在分布式重试风暴中构筑坚不可摧的防线

幂等性设计艺术&#xff1a;在分布式重试风暴中构筑坚不可摧的防线​​2023年某支付平台凌晨故障​​&#xff1a;由于网络抖动导致支付指令重复发送&#xff0c;系统在2分钟内处理了​​17万笔重复交易​​&#xff0c;引发​​4.2亿资金风险​​。事故根本原因&#xff1a;​…

从零开始理解NDT算法的原理及应用

1. 概述 NDT&#xff0c;全称 Normal Distributions Transform&#xff08;正态分布变换&#xff09;&#xff0c;是一种广泛使用的点云配准算法&#xff0c;它的核心思想与ICP截然不同&#xff1a;NDT不直接计算点与点之间的对应关系&#xff0c;而是通过概率模型来描述和匹配…

艾体宝案例 | 数据驱动破局:DOMO 如何重塑宠物零售门店的生存法则

某连锁宠物店店长紧盯着电脑屏幕上的Excel表格&#xff0c;手指机械地在键盘上敲击出“CtrlC/V”的组合键——这是她第17次尝试将三个不同系统的数据拼凑到一起。门店POS机导出的销售记录、会员系统的消费偏好、库存管理的临期预警&#xff0c;这些本应串联起门店运营全貌的关键…

极飞科技AI智慧农业实践:3000亩棉田2人管理+产量提15%,精准灌溉与老农操作门槛引讨论

在新疆尉犁县的棉田里&#xff0c;两架农业无人机正沿着设定航线低空飞行&#xff0c;它们掠过之处&#xff0c;传感器实时传回土壤湿度和作物长势数据——这片3000亩的棉田&#xff0c;如今只需要两名90后新农人通过手机管理&#xff0c;产量却比传统种植模式提高了15%。这不是…

企业级-搭建CICD(持续集成持续交付)实验手册

搭建CI/CD(持续集成/持续交付)企业示例 为了让容器构建镜像并可以持续集成&#xff0c;可以自动上传到Harbor仓库&#xff1b;并且业务主机可以通过CD自动从仓库中下载镜像latest版本并实现业务更新。1.环境部署 1.1 环境搭建业务IP域名GitLab172.25.254.50gitlab.dhj.orgJenki…

吃透《数据结构》C 语言版:线性表的类型定义详解

作为数据结构的入门章节&#xff0c;线性表就像 “地基” 一样重要&#xff0c;而第二章 2.3 节的 “线性表的类型定义”&#xff0c;更是理解后续操作&#xff08;插入、删除、查找等&#xff09;的核心前提。今天就结合自己的学习笔记&#xff0c;用通俗的语言拆解这个知识点…

文件系统中的核心数据结构

宏观上文件系统在kernel的形态文件系统运作流程按照:vfs->磁盘缓存->实际磁盘文件系统->通用块设备层->io调度层->块设备驱动层->磁盘。具体流程的详细展现如下如如何理解文件系统中的数据结构&#xff1f;linux中文件系统还有几种核心数据结构分别是super_b…

TDengine与StarRocks在技术架构和适用场景上有哪些主要区别?

TDengine 与 StarRocks 作为国产数据库领域的代表性产品&#xff0c;分别专注于时序数据处理和高性能分析场景&#xff0c;在技术架构和适用场景上存在显著差异。以下从核心架构、数据模型、性能特点及典型应用场景等方面进行对比分析&#xff1a;&#x1f3d7;️ ​​一、技术…

Qt事件_xiaozuo

Qt事件Qt 的事件机制是其实现用户交互和系统响应的核心框架&#xff0c;基于事件驱动模型构建。以下从五个关键方面详细解释其工作原理和用法&#xff1a;1. 事件&#xff08;QEvent&#xff09;的定义与分类事件本质&#xff1a;事件是 QEvent 类或其子类的实例&#xff0c;用…

运动控制技术:自动化与智能驱动的核心

一、运动控制概述运动控制技术是自动化技术和电气拖动技术的融合&#xff0c;以工控机、PLC、DSP等为控制器的运动控制技术融合了微电子技术、计算机技术、检测技术、自动化技术以及伺服控制技术等学科的新成果&#xff0c;在工业生产中起着极为重要的作用。早期的运动控制技术…

链表实战指南:手动实现单链表与双链表的接口及OJ挑战(含完整源码)

文章目录一、链表的概念二、链表的分类三、手动实现单链表1.链表的初始化2.链表的打印3.申请新的节点大小空间4.链表的尾插5.链表的头插6.链表的尾删7.链表的头删8.链表的查找9.在指定位置之前插入数据10.在指定位置之后插入数据11.删除指定节点12.删除指定节点之后的数据13.销…

Spring 事件驱动编程初探:用 @EventListener 轻松处理业务通知

一、核心概念与模型Spring 的事件机制是观察者模式&#xff08;也叫发布-订阅模型&#xff09;的一种典型实现。它主要由三个核心部分组成&#xff1a;事件 (Event)&#xff1a; 承载信息的对象&#xff0c;通常是某种状态变化的通知。可以是继承 ApplicationEvent 的类&#x…

无人机也能称重?电力巡检称重传感器安装与使用指南

在无人机电力巡检中&#xff0c;工程师们常常面临一个棘手难题&#xff1a;如何精确知道新架设或老旧缆线的实际负重&#xff1f; 传统依靠老师傅“肉眼估算”的方法不仅风险极高&#xff0c;而且数据极不准确&#xff0c;给电网安全埋下巨大隐患。难道没有更科学的方法吗&…

第二阶段WinForm-8:特性和反射,加密和解密,单例模式

1_预处理指令 &#xff08;1&#xff09;源代码指定了程序的定义&#xff0c;预处理指令&#xff08;preprocessor directive&#xff09;指示编译器如何处理源代码。例如&#xff0c;在某些情况下&#xff0c;我们希望编译器能够忽略一部分代码&#xff0c;而在其他情况下&am…