Docker卷备份策略全解析(Restic实战指南)

第一章:Docker卷备份的核心挑战与Restic优势

在容器化环境中,Docker卷用于持久化存储应用数据,但其动态性和分布性给数据备份带来了显著挑战。传统备份工具往往难以高效处理运行中的容器数据一致性问题,且缺乏增量备份和去重能力,导致存储成本上升和恢复时间延长。

核心挑战

  • 数据一致性:容器运行时,文件可能被频繁读写,直接拷贝易导致备份数据不一致。
  • 存储效率低下:全量备份占用空间大,重复数据未得到有效压缩。
  • 恢复粒度粗:多数工具不支持文件级恢复,只能整体还原卷。
  • 跨平台兼容性差:部分工具依赖特定存储驱动,迁移困难。

Restic的架构优势

Restic是一款现代化的开源备份工具,专为安全与效率设计。它采用内容寻址存储机制,自动对数据块进行哈希去重,仅上传变更部分,极大减少网络传输和存储开销。同时,Restic支持端到端加密,保障备份数据在传输与存储中的安全性。
# 初始化本地备份仓库
restic -r /path/to/backup-repo init

# 备份Docker卷(如/var/lib/docker/volumes/myapp_data)
restic -r /path/to/backup-repo backup /var/lib/docker/volumes/myapp_data --exclude="*.log"

# 查看备份快照
restic -r /path/to/backup-repo snapshots
上述命令展示了使用Restic备份Docker卷的基本流程:初始化仓库、执行增量备份并排除日志文件、查看历史快照。通过定时任务(如cron)结合该流程,可实现自动化保护策略。
特性Docker内置方案Restic
增量备份不支持支持
数据去重无块级去重
加密支持需手动实现原生AES-256
graph TD A[Docker Volume] --> B{Restic Backup} B --> C[Chunk Data] C --> D[Encrypt & Hash] D --> E[Upload to Repo] E --> F[Remote Storage/S3]

第二章:Restic基础与环境准备

2.1 Restic核心概念与备份模型解析

数据去重与内容寻址
Restic采用基于内容的分块策略,将文件切分为可变大小的数据块,并通过SHA-256哈希值唯一标识每个数据块。这种内容寻址机制确保相同数据仅存储一次,显著提升存储效率。
  • 所有数据块在写入前进行加密,保障传输与静态安全
  • 使用Bloom过滤器加速去重判断,降低内存开销
快照与备份模型
每次备份生成一个快照(snapshot),记录文件系统某一时刻的状态。快照之间共享数据块,仅保存差异内容。
restic backup /home/user --exclude=".cache"
该命令创建包含/home/user路径的快照,排除指定目录。参数--exclude用于过滤临时文件,减少冗余数据写入。
概念说明
Repository存储所有备份数据的根目录,支持本地或云后端
Snapshot一次备份的元数据集合,指向实际数据块
Pack多个数据块打包后的物理存储单元

2.2 在Docker环境中部署Restic客户端

在容器化环境中,使用Docker部署Restic可实现轻量化的备份管理。通过自定义镜像集成Restic客户端,便于统一运维。
构建包含Restic的Docker镜像
FROM alpine:latest
RUN apk add --no-cache restic openssh-client
WORKDIR /backup
CMD ["restic", "snapshots"]
该Dockerfile基于Alpine Linux最小化构建,安装Restic和SSH客户端以支持远程仓库连接。精简的系统减小攻击面,提升安全性。
运行容器并挂载配置
使用-v参数挂载本地配置与数据目录,确保凭据和备份目标可访问:
  • /host/config:/root/.restic:存放加密密钥与环境变量
  • /data:/backup:映射待备份的数据卷
容器启动后可通过执行docker exec -it restic-container restic backup /backup触发备份任务。

2.3 配置安全的远程存储仓库(SFTP/MinIO/S3)

在构建可靠的数据备份体系时,选择安全且高效的远程存储方案至关重要。支持SFTP、MinIO和Amazon S3等协议的存储后端,可满足不同场景下的加密传输与访问控制需求。
配置SFTP存储示例
storage:
  type: sftp
  config:
    host: "backup.example.com"
    port: 22
    username: "backup_user"
    password: "secure_password"
    path: "/backups"
    key_path: "/etc/ssh/id_rsa"
上述配置通过SSH密钥认证建立安全连接,host指定远程服务器地址,path定义备份存储路径,建议启用密钥认证而非密码以提升安全性。
对象存储对比
特性SFTPMinIOS3
协议SSHS3兼容S3
加密传输是是(TLS)是(HTTPS)
扩展性低高极高

2.4 使用Docker Volume实现Restic配置持久化

在容器化环境中,Restic的配置和密钥等敏感数据需持久化存储以避免每次重启丢失。通过Docker Volume可将宿主机目录挂载至容器内,确保数据独立于容器生命周期。
创建专用Volume
使用以下命令创建用于存储Restic配置的持久化卷:
docker volume create restic-config
该命令在宿主机上创建名为 restic-config 的命名卷,由Docker管理其物理存储路径。
挂载至Restic容器
运行容器时通过 -v 参数挂载Volume:
docker run -v restic-config:/root/.cache/restic my-restic-container
此挂载将Restic的缓存目录持久化,保障备份锁、密钥环及性能缓存不丢失。
优势对比
方式数据持久性迁移便利性
匿名卷中等低
绑定挂载高中
命名卷高高

2.5 备份前的权限与访问控制策略设置

在执行数据备份前,必须建立严格的权限管理机制,防止未授权访问和数据泄露。应遵循最小权限原则,确保只有必要的人员或服务账户具备读取源数据和写入备份目标的权限。
基于角色的访问控制(RBAC)配置
通过角色划分明确职责,例如创建 `backup-operator` 角色,仅授予文件系统读取和加密密钥使用权限。
apiVersion: iam.example.com/v1
kind: Role
metadata:
  name: backup-operator
rules:
  - apiGroups: [""]
    resources: ["secrets", "pods"]
    verbs: ["get", "list"]
  - resources: ["backup-storage"]
    verbs: ["create", "write"]
上述配置限定操作员仅能获取必要资源并写入指定存储位置,增强安全性。
访问策略验证清单
  • 确认所有备份组件使用临时凭证登录
  • 启用多因素认证(MFA)用于管理员访问
  • 审计日志记录所有备份相关的访问行为

第三章:Docker卷数据备份实战

3.1 识别关键Docker卷并制定备份优先级

在容器化环境中,数据持久化依赖于Docker卷的合理管理。并非所有卷都具有相同的重要性,需根据业务影响制定备份优先级。
关键卷识别标准
  • 包含用户数据:如数据库存储、上传文件目录
  • 配置持久化:应用配置、密钥文件等
  • 不可再生内容:日志归档、训练模型输出
备份优先级分类示例
优先级卷类型示例
高数据库卷mysql_data
中应用配置卷nginx_conf
低缓存卷redis_cache
# 查看所有卷及其挂载信息
docker volume inspect mysql_data
该命令用于获取指定卷的详细元数据,包括挂载路径、驱动类型和关联容器,是评估其重要性的基础操作。

3.2 基于Restic对运行中容器卷执行快照备份

快照机制原理
Restic 是一款开源的备份工具,支持加密、去重和增量备份。其核心优势在于能对正在运行的容器挂载卷进行一致性快照,而无需停止服务。
操作流程示例
以下命令演示如何对容器绑定的 /var/lib/mysql 卷执行备份:

# 初始化本地仓库
restic -r /backup/repo init

# 执行快照备份(自动忽略临时文件)
restic -r /backup/repo backup /var/lib/mysql \
  --exclude="*.tmp" \
  --host=mysql-container
上述命令中,-r 指定备份仓库路径,--exclude 过滤临时文件避免数据不一致,--host 标识数据来源主机名,便于多容器环境管理。
备份策略对比
策略停机要求加密支持增量备份
Restic无需停机是是
Docker commit建议暂停否否

3.3 自动化定时备份任务的Shell脚本设计

在运维实践中,定期备份关键数据是保障系统稳定的核心措施。通过Shell脚本结合cron可实现高效、可靠的自动化备份机制。
基础脚本结构
以下脚本实现了将指定目录压缩并按日期命名存储,同时保留最近7天的备份:
#!/bin/bash
BACKUP_DIR="/backup"
SOURCE_DIR="/var/www/html"
DATE=$(date +%Y%m%d)
FILENAME="backup-$DATE.tar.gz"

tar -czf $BACKUP_DIR/$FILENAME -C $SOURCE_DIR .
find $BACKUP_DIR -name "backup-*.tar.gz" -mtime +7 -delete
脚本首先定义备份目标与源路径,利用tar命令进行压缩归档,并通过find删除7天前的旧文件,避免磁盘溢出。
调度配置
使用crontab -e添加定时任务:
  • 0 2 * * * /path/to/backup.sh:每日凌晨2点执行备份
该配置确保备份操作在系统低峰期运行,减少资源争抢。

第四章:备份恢复、验证与监控

4.1 从Restic仓库恢复Docker卷数据完整流程

在灾难恢复场景中,使用Restic恢复Docker卷数据是保障服务连续性的关键步骤。首先需确保已配置正确的Restic仓库并完成身份验证。
恢复前准备
确认目标容器已停止,避免数据写入冲突。通过环境变量或命令行指定仓库路径和加密密钥:
export RESTIC_REPOSITORY=s3://your-bucket/restic-backup
export AWS_ACCESS_KEY_ID=your-key
export AWS_SECRET_ACCESS_KEY=your-secret
上述代码设置Restic访问S3存储库所需凭证,确保权限正确。
执行数据恢复
使用restic restore命令按快照ID恢复数据至指定Docker卷目录:
restic restore latest --target /var/lib/docker/volumes/myvolume/_data
该命令将最新快照数据解压至目标卷路径,latest可替换为具体快照ID以精确恢复。
验证与重启
恢复完成后,校验文件完整性并重新启动关联容器,确保应用正常读取数据。

4.2 备份一致性校验与数据完整性测试

在备份系统中,确保数据在传输和存储过程中保持完整且一致至关重要。通过哈希校验机制,可有效识别数据偏差。
哈希校验实现
使用 SHA-256 对原始数据与备份数据进行摘要比对:
import hashlib

def calculate_sha256(file_path):
    hash_sha256 = hashlib.sha256()
    with open(file_path, "rb") as f:
        for chunk in iter(lambda: f.read(4096), b""):
            hash_sha256.update(chunk)
    return hash_sha256.hexdigest()
该函数分块读取文件,避免内存溢出,适用于大文件校验。计算完成后,对比源文件与备份文件的哈希值即可判断一致性。
完整性测试流程
  • 生成原始数据指纹
  • 执行备份操作
  • 恢复数据并重新计算哈希
  • 比对前后指纹是否一致

4.3 差分备份策略与版本管理最佳实践

差分备份机制原理
差分备份通过记录自上次完整备份以来的数据变更,显著减少存储开销和备份时间。相较于增量备份,其恢复过程仅需一个完整备份和最新的差分备份。
典型备份周期配置
  • 每周日执行一次全量备份
  • 周一至周六每日执行差分备份
  • 备份文件保留策略遵循GFS(祖父-父亲-儿子)模型
自动化脚本示例

#!/bin/bash
# 每日差分备份脚本
DUMP_DIR="/backup/differential"
FULL_BACKUP_FLAG="/backup/full.done"
DATE=$(date +%Y%m%d)

if [ -f "$FULL_BACKUP_FLAG" ]; then
  xtrabackup --backup \
    --target-dir=$DUMP_DIR/$DATE \
    --incremental-basedir=/backup/full/latest
fi
该脚本依赖Percona XtraBackup工具,通过--incremental-basedir指定基础全备目录,实现高效差分备份。需配合cron定时任务调度执行。

4.4 集成Prometheus与Alertmanager实现备份状态监控

为了实时掌握数据库备份任务的执行状态,可通过 Prometheus 抓取备份脚本暴露的指标,并结合 Alertmanager 实现告警通知。
指标暴露与采集
在备份脚本末尾输出 Prometheus 可采集的文本格式:
# 备份成功时输出
echo "backup_last_success_timestamp $(date +%s)" >> /tmp/backup_metrics.prom
echo "backup_status{job=\"daily_backup\"} 1" >> /tmp/backup_metrics.prom
通过 Node Exporter 的 Textfile Collector 机制,Prometheus 周期性抓取该文件内容,实现自定义指标采集。
告警规则配置
在 Prometheus 中定义备份超时告警规则:
groups:
- name: backup.rules
  rules:
  - alert: BackupTooOld
    expr: time() - backup_last_success_timestamp > 86400
    for: 10m
    labels:
      severity: critical
    annotations:
      summary: "备份已超过24小时未成功"
该规则检测最近一次成功备份时间戳,若距今超过一天则触发告警。
告警通知分发
Alertmanager 根据告警标签将事件路由至不同通道:
  • 企业微信 webhook 发送运维群通知
  • 邮件通道发送详细日志附件
  • 静默时段自动抑制非关键告警

第五章:构建企业级Docker备份体系的未来思考

多云环境下的统一备份策略
现代企业常采用混合云或多云架构,Docker容器跨平台部署成为常态。为确保数据一致性,需引入基于策略的集中管理工具,如Velero结合MinIO对象存储,实现跨AWS、Azure与本地Kubernetes集群的备份同步。
  • 定义命名空间级别的备份规则
  • 利用标签选择器(Label Selector)动态匹配工作负载
  • 通过CRON表达式配置增量快照周期
持久化卷的精细化控制
并非所有PV都需高频备份。可基于存储类别(StorageClass)区分关键级别:
StorageClass备份频率保留策略
ssd-prod每4小时保留7天
hdd-dev每日一次保留3天
自动化恢复演练机制
# 定期触发恢复测试脚本
velero restore create \
  --from-backup backup-2025-weekly \
  --namespace-mappings prod-db:restore-test \
  --dry-run -o yaml | kubectl apply -f -
通过CI/CD流水线集成恢复验证步骤,确保RTO与RPO达标。某金融客户在灾备演练中发现,未加密的etcd快照导致恢复失败,后续强制启用AES-256静态加密并绑定KMS密钥轮换策略。
流程图:备份触发 → 快照持久化 → 异地复制 → 完整性校验 → 自动化报告生成
使用OpenTelemetry采集备份任务指标,接入Prometheus实现可视化监控。当某次全量备份耗时突增200%,告警触发后定位到NFS网关带宽瓶颈,随即调整QoS策略优化传输优先级。
jre9下载 jdk9 (Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】 立即下载

相关推荐

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2536

从入门到上线:3种Restic备份Docker卷的部署模式,第2种最省成本

掌握高效Docker卷的备份策略(restic+volume + 对象存储),解决容器数据持久化难题。介绍3种Restic部署模式,涵盖本地、共享与低成本对象存储方案,第2种节省成本超50%。适用中小团队生产环境,配置简单、恢复可靠,值得收藏。

ProceChat的博客 857

pytorch转onnx转paddlepaddle

1.pt转onnx 可查看我之前的文章:https://blog.youkuaiyun.com/oyjwin/article/details/117778583?spm=1001.2014.3001.5501

oyjwin的博客 1462

如何实现Docker卷的增量、加密、异地备份?Restic + 对象存储全解析

掌握Docker卷的增量、加密与异地备份难题?本文详解Docker卷的备份策略(restic+volume + 对象存储),适用于生产环境数据保护。利用Restic实现自动加密备份,结合对象存储保障可靠性与低成本,支持跨地域恢复。方案简洁高效,值得收藏。

FuncLens的博客 856

程序员的自我修养

一个好的程序员的自我修养需要从不同角度出发,工作能力是一个方面,对自身的定位和了解也是一个方面,程序员的工作能力修养包括需求理解、功能设计、沟通确认、代码规范、成果验证、代码重构优化等,通过自我剖析来对自身进行定位并了解自身的优缺点,如去除劣根性、端正意识形态与态度、提升自己的核心竞争力等。 自我剖析 一个成功的人,必须要先了解自己,只有了解自己是什么样的人,了解自身有哪些优缺点,了解自己更合适做什么工作,知道自己做什么才能发挥出自身的优势,这样才能使自己在工作中发光发热,在职业生涯的道路上走的更远。

数通畅联 1677

workbench谐响应

定义材料 打开Engineering Data定义材料,在分析时不同部分选择不同材料 建模 打开Geometry建模,我举的例子很简单就一根光秃秃的轴 因为要加轴承,在轴上创建imprint face 因为要用point mass代替轴上原来的盘,在轴上盘的位置新建一个Plane,用Slice方法将轴从XYPlane3分成两段 施加边界条件以及谐响应分析 打开Model 1.在两段轴的交界面处,创建Point Mass,输入质量与转动惯量,位置在轴线上 2.mass point promote to.

my blogs include programming, math, physics.回首过去,放眼未来。 leslielee.blog.youkuaiyun.com 5886

5步搞定Docker卷持久化备份:Restic + Volume最佳实践

5步掌握Docker卷持久化备份方法,详解Restic + Volume实现自动快照与增量备份,适用于生产环境数据保护。涵盖配置流程、定时任务与恢复验证,安全高效,值得收藏。

CodeIsle的博客 784

Cesium进阶学习四、shadertoy(着色器)

Cesium进阶学习着色器

程迷学习的博客 4322

【Docker卷备份终极方案】:Restic + Volume + 对象存储全栈实战指南

掌握高效可靠的Docker卷的备份策略(restic+volume + 对象存储),解决容器数据持久化难题。适用于生产环境数据库、应用配置等场景,利用Restic加密增量备份至S3兼容对象存储,实现低成本、高安全性与自动化恢复。运维人员必看,值得收藏。

DevPath的博客 839

【初阶】手把手教你轻松上手Denodo | 连接数据库并创建基本视图 (二)

在本教程的第二部分,我们将涵盖:连接到数据库,与创建基本视图。

Denodo的博客 1107

优秀的 Verilog/FPGA开源项目介绍(二十七)- 小型CPU

介绍在FPGA上实现一个CPU是一个令人兴奋的事情,但是太复杂的CPU实现起来太难,而且不适合去了解计算机的架构,所以今天介绍一些小型的CPU,比如8051、MIPS、MSP430等~关于RISC-V的项目,请查看《优秀的 Verilog/FPGA开源项目介绍(二)-RISC-V》ZipCPUhttp://zipcpu.com/about/zipcpu.html项目介绍Z...

OpenFPGA的博客 2576

【企业级备份方案】:为什么顶级团队都在用Restic备份Docker卷?

解决Docker数据持久化难题,详解企业级备份方案。通过Restic与Volume结合实现高效、增量备份,支持加密存储与多平台恢复,适用于生产环境数据库、配置文件保护。Docker卷的备份策略(restic+volume)操作简单且安全可靠,值得收藏。

ByteShoal的博客 1073

MIPI C-PHY介绍(Specification for C-PHY V1.2)

本文档描述了一个名为C-PHY的高速串行接口,它在带宽有限(bandwidth limited channels,看的有人说C的含义就是channel limit)的通道上提供高吞吐量性能,用于连接到外设,包括显示器和摄像头。首先0x4fff在0x4000~0x4fff区域,则f=(0,0,0,0,0,0,1),顺序是S6~S1;最后,端到端的传输过程是什么样呢,如下图所示,16bit先转换成7个符号(每个符号3位,共21位),然后并行数据转换成串行数据,输送到符号编码器和3个线的驱动器,接收端流程相反。

qflook的博客 5880

揭秘高效Docker卷备份策略:如何用Restic集成对象存储实现自动化

掌握高效Docker卷的备份策略(restic+volume + 对象存储),解决容器数据持久化难题。适用于生产环境中的自动化备份,利用Restic加密备份至S3等对象存储,节省成本且安全可靠。配置简单、恢复快速,值得收藏。

BreakVein的博客 676

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

每天只需5分钟:用Restic自动化备份所有Docker卷到对象存储

轻松实现Docker卷数据安全,详解基于restic的备份策略(restic+volume + 对象存储),支持自动化每日备份至S3等对象存储。适用于生产环境,高效、低成本、易于恢复。每天5分钟,保障数据不丢失,值得收藏。

LearnFlow的博客 960

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Docker卷数据崩溃怎么办?Restic实时备份拯救生产环境(附脚本)

应对Docker卷数据崩溃,掌握高效的备份策略至关重要。本文介绍基于restic+volume的Docker卷备份策略(restic+volume),适用于生产环境实时保护容器数据,支持加密存储与增量备份,确保恢复快速可靠。运维人员值得收藏,点击了解完整脚本方案。

PixelFlow的博客 1089

【高可用架构必备】:Restic实现Docker卷增量备份的3个关键步骤

解决Docker数据持久化难题,详解Restic实现Docker卷增量备份的高效方案。涵盖容器化环境适用场景、自动化备份流程与恢复验证方法,安全可靠且节省存储。完整掌握Docker卷的备份策略(restic+volume),值得收藏。

Algorift的博客 1143

Docker卷备份实战(Restic+MinIO+自动化脚本)——运维必掌握的灾备技能

掌握高效Docker卷的备份策略(restic+volume + 对象存储),解决容器数据持久化难题。适用于MinIO等对象存储环境,结合自动化脚本实现增量备份与快速恢复,提升运维可靠性。方法简单、成本低、易于落地,值得收藏。

LogicShoal的博客 686

紧急预警:Docker容器删除后数据如何找回?Restic备份策略必须现在部署!

掌握Docker卷数据防丢失方案,详解Restic备份策略(restic+volume + 对象存储)的实战配置。适用于容器化生产环境,实现自动增量备份与高效恢复,保障数据安全。低成本、高可靠性,值得收藏。

BytePerch的博客 982

Resticker完全指南:如何通过Docker容器实现自动化Restic备份

Resticker是一款强大的Docker容器工具,能够帮助用户轻松实现Restic备份的自动化。无论是本地存储还是远程目标,Resticker都能通过简单的配置,让你的数据备份工作变得高效而可靠。本文将为你详细介绍Resticker的核心功能、安装步骤以及高级配置技巧,让你快速掌握这一自动化备份利器。 ## 为什么选择Resticker进行自动化备份? 在当今数据驱动的时代,定期备份数据已成

gitblog_01029的博客 722

【Docker卷备份终极方案】:Restic+Volume实现高效数据保护

解决Docker数据持久化难题,本文详解Docker卷的备份策略(restic+volume),适用于容器化环境下的自动化备份。利用Restic高效增量备份与加密存储,结合Volume实现无缝集成,保障数据安全。操作简单、恢复快速,值得收藏。

SimSolve的博客 781

企业级Docker备份策略,基于Restic与S3兼容存储的高可用解决方案

解决Docker数据持久化难题,提供企业级备份方案。基于Restic实现Docker卷的备份策略(restic+volume + 对象存储),支持S3兼容存储,保障数据高可用与长期归档。适用于微服务、生产环境容器化场景,自动化备份恢复,安全高效,值得收藏。

CompiShoal的博客 699

为什么90%的Docker用户忽视卷备份?Restic+对象存储完整解决方案曝光

解决Docker卷数据丢失风险,详解高效备份方案。通过Restic结合volume与对象存储,实现自动化、低成本的Docker卷的备份策略(restic+volume + 对象存储),适用于生产环境持久化数据保护,支持增量加密备份,值得收藏。

InstrIsle的博客 667

你还在手动备份Docker卷?Restic+对象存储自动化方案来了!

告别繁琐手动备份!本文详解Docker卷的备份策略(restic+volume + 对象存储),适用于容器化环境数据持久化场景,利用Restic实现增量加密备份,自动同步至对象存储。安全高效,成本低廉,运维自动化首选方案,值得收藏。

LiteTrans的博客 727

揭秘Docker数据持久化难题:如何用Restic与对象存储构建零丢失备份体系

解决Docker数据丢失风险,详解高效可靠的备份方案。通过Restic定期备份Docker卷至对象存储,实现自动化、增量式保护,适用于生产环境数据持久化。掌握Docker卷的备份策略(restic+volume + 对象存储),保障服务高可用,值得收藏。

AlgoPerch的博客 728

别等数据丢了才后悔,Restic+Volume打造坚不可摧的备份防线

掌握高效Docker卷的备份策略(restic+volume),防止容器数据意外丢失。适用于生产环境数据库、应用配置等持久化场景,利用Restic实现增量加密备份,支持多存储后端,安全可靠。自动化备份与恢复流程,资源占用低,值得收藏。

IterLoom的博客 926

你还在手动备份Docker数据?Restic自动化方案已全面上线

告别手动备份Docker数据烦恼,详解Docker卷的备份策略(restic+volume),适用于容器化应用持久化数据保护。通过自动化脚本结合Restic实现高效增量备份,节省存储成本并提升恢复可靠性。方案简单易用,支持定时任务,值得收藏。

VarPerch的博客 586
上一篇: Dify API调用优化实战(从限流到智能重试的完整指南)
下一篇: 为什么你的服务更新总出问题?Docker Swarm滚动策略避坑指南
varchat
博客等级 码龄11年 159粉丝 1993原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值