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

发布于:2025-08-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

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=5

mkdir -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个,从根本上防止日志膨胀。

在这里插入图片描述


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



网站公告

今日签到

点亮在社区的每一天
去签到