06.容器存储 - 教程

news/2025/9/27 18:40:46/文章来源:https://www.cnblogs.com/lxjshuju/p/19115464

《Docker 数据管理全解析:从基础到实战》

一、Docker 核心概念回顾

在深入探讨数据管理之前,我们先简单回顾 Docker 的核心组件,这有助于理解后续的数据处理机制。

Docker 采用了客户端 - 服务器架构,主要包含三个部分:

容器的一个重要特性是临时性 - 当容器被删除时,其内部的数据也会随之消失。这就是为什么我们需要专门的数据管理策略来确保重要数据的持久化。

二、Docker 存储驱动深度解析

存储驱动是 Docker 实现容器分层文件系统的关键技术,它允许容器共享基础镜像的资源,同时拥有自己的读写层。

(一)常用存储驱动对比

存储驱动优势劣势适用场景
overlay2性能优秀,空间效率高对内核版本有要求 (≥4.0)大多数生产环境
devicemapper稳定性好,支持精简配置性能一般,配置复杂企业级稳定性要求高的场景
btrfs支持高效快照,适合大文件内存占用高需要频繁快照的场景
zfs数据完整性好,支持压缩配置复杂,资源消耗大数据完整性要求高的场景

(二)查看和设置存储驱动

查看当前 Docker 使用的存储驱动:

docker info | grep "Storage Driver"

修改存储驱动(需要重启 Docker 服务):

  1. 编辑 Docker 配置文件 /etc/docker/daemon.json
  2. 添加配置:
{
"storage-driver": "overlay2"
}
  1. 重启 Docker 服务:
sudo systemctl restart docker

三、数据卷详解

数据卷是绕过容器可写层的特殊目录,具有以下特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立即生效
  • 数据卷不会被容器删除而影响
  • 数据卷默认会一直存在,直到显式删除

(一)绑定挂载(Bind Mounts)

绑定挂载允许将主机上的任意文件或目录挂载到容器中,是最直接的数据共享方式。

基本用法

# 将主机的/path/on/host目录挂载到容器的/path/in/container目录
docker run -v /path/on/host:/path/in/container image_name

实战示例
假设我们开发一个 Python 应用,希望在容器中运行代码,同时在本地编辑代码能实时生效:

# 创建项目目录
mkdir python-app &&
cd python-app
echo "print('Hello Docker')" > app.py
# 运行容器并挂载当前目录
docker run -v $(pwd):/app -w /app python:3.9 python app.py

此时,修改本地的 app.py 文件,再次运行上述命令会看到更新后的结果。

(二)Docker 管理的数据卷

Docker 管理的数据卷由 Docker 后台自动创建和管理,存储在主机的/var/lib/docker/volumes/目录下。

常用命令

# 创建数据卷
docker volume create myvolume
# 查看所有数据卷
docker volume ls
# 查看数据卷详情
docker volume inspect myvolume
# 使用数据卷运行容器
docker run -v myvolume:/data image_name
# 删除未使用的数据卷
docker volume prune

实战示例:创建一个使用数据卷的 Nginx 容器,确保网站文件不会因容器删除而丢失:

# 创建数据卷
docker volume create nginx_data
# 启动Nginx容器并挂载数据卷
docker run -d -p 80:80 -v nginx_data:/usr/share/nginx/html --name mynginx nginx
# 复制HTML文件到数据卷(通过容器)
echo "<h1>Hello Docker Volume</h1>" > index.html
docker cp index.html mynginx:/usr/share/nginx/html/
# 测试访问
curl http://localhost

现在即使删除并重新创建容器,只要挂载相同的数据卷,网站内容依然存在。

四、高级数据共享策略

(一)多容器数据共享

1. 通过命名卷共享

创建一个命名卷,然后在多个容器中挂载它:

# 创建共享卷
docker volume create shared_data
# 启动第一个容器写入数据
docker run -v shared_data:/data --name writer alpine sh -c "echo 'shared content' > /data/file.txt && sleep 300"
# 启动第二个容器读取数据
docker run -v shared_data:/data --name reader alpine cat /data/file.txt
2. 使用数据卷容器(推荐用于 Docker 1.9 之前版本)

虽然现代 Docker 更推荐使用命名卷,但了解数据卷容器的概念仍有价值:

# 创建数据卷容器
docker create -v /shared --name data_container alpine
# 从数据卷容器挂载数据
docker run --volumes-from data_container --name app1 alpine
docker run --volumes-from data_container --name app2 alpine

(二)跨主机数据共享

对于需要跨主机共享数据的场景,可以考虑以下方案:

  1. NFS 共享存储
# 在主机上挂载NFS共享
sudo mount -t nfs server_ip:/nfs_share /local/path
# 在Docker中使用该目录作为绑定挂载
docker run -v /local/path:/container/path image_name
  1. 分布式存储系统:如 Ceph、GlusterFS 等,适合大规模部署。

五、数据卷备份与恢复

(一)备份数据卷

# 备份名为myvolume的数据卷到backup.tar
docker run --rm -v myvolume:/source -v $(pwd):/backup alpine tar -czvf /backup/backup.tar -C /source .

(二)恢复数据卷

# 创建新数据卷
docker volume create restored_volume
# 从备份文件恢复
docker run --rm -v restored_volume:/target -v $(pwd):/backup alpine sh -c "tar -xzvf /backup/backup.tar -C /target"

六、实战:构建持久化的 WordPress 站点

让我们通过一个完整实例,创建一个数据持久化的 WordPress 站点,包括 MySQL 数据库和 WordPress 应用。

  1. 创建网络
docker network create wordpress_network
  1. 创建 MySQL 容器
# 创建数据卷存储数据库
docker volume create mysql_data
# 启动MySQL容器
docker run -d \
--name wordpress_db \
--network wordpress_network \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=db_password \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wp_user \
-e MYSQL_PASSWORD=wp_password \
mysql:8.0
  1. 创建 WordPress 容器
# 创建数据卷存储WordPress文件
docker volume create wordpress_data
# 启动WordPress容器
docker run -d \
--name wordpress \
--network wordpress_network \
-v wordpress_data:/var/www/html \
-p 8080:80 \
-e WORDPRESS_DB_HOST=wordpress_db \
-e WORDPRESS_DB_USER=wp_user \
-e WORDPRESS_DB_PASSWORD=wp_password \
-e WORDPRESS_DB_NAME=wordpress \
wordpress:latest
  1. 测试访问
    打开浏览器访问 http://localhost:8080,完成 WordPress 安装。
  2. 验证持久化
# 删除并重新创建容器
docker rm -f wordpress
docker run -d \
--name wordpress \
--network wordpress_network \
-v wordpress_data:/var/www/html \
-p 8080:80 \
-e WORDPRESS_DB_HOST=wordpress_db \
-e WORDPRESS_DB_USER=wp_user \
-e WORDPRESS_DB_PASSWORD=wp_password \
-e WORDPRESS_DB_NAME=wordpress \
wordpress:latest

再次访问 http://localhost:8080,你会发现之前的配置和内容都被保留了。

七、最佳实践与注意事项

  1. 选择合适的存储方式

    • 开发环境:优先使用绑定挂载,方便代码调试
    • 生产环境:优先使用 Docker 管理的数据卷,更安全可靠
  2. 数据卷安全

    • 定期备份重要数据卷
    • 限制数据卷的访问权限
    • 敏感数据避免使用数据卷,考虑使用 Docker Secrets
  3. 性能优化

    • 对于 I/O 密集型应用,选择高性能存储驱动(如 overlay2)
    • 避免在容器内频繁读写大量小文件
    • 考虑使用 tmpfs 挂载临时文件目录:docker run --tmpfs /tmp:size=100m image_name
  4. 清理无用数据

    # 清理未使用的数据卷
    docker volume prune
    # 清理所有未使用的资源(容器、镜像、网络、数据卷)
    docker system prune -a --volumes

通过本文的学习,你应该已经掌握了 Docker 数据管理的核心概念和实用技巧。合理运用这些知识,可以确保容器化应用的数据安全和持久化,为你的 Docker 实践打下坚实基础。

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

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

相关文章

fm网站开发有源码怎么搭建网站

文章来源&#xff1a;http://blog.csdn.net/edeed/archive/2006/02/10/596271.aspx 1、安装PD v11.0版 2、由pdm生成建表脚本时&#xff0c;字段超过15字符就发生错误&#xff08;oracle&#xff09; 原因未知&#xff0c;解决办法是打开PDM后&#xff0c;会出现Database的菜单…

电子商务网站如何进行维护和推广建设部网站官网挂证通报

ARM32位系统的内存布局图 32位操作系统的内存布局很经典&#xff0c;很多书籍都是以32位系统为例子去讲解的。32位的系统可访问的地址空间为4GB&#xff0c;用户空间为1GB ~ 3GB&#xff0c;内核空间为3GB ~ 4GB。 为什么要划分为用户空间和内核空间呢&#xff1f; 一般处理器…

一般路人向第39次CSP认证

一般路人向第39次CSP认证Q1 第一题十分水,照着他意思来就行了,十来分钟写出来交上去,不行。反复确认直到半个小时,发现交到第二题上去了。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int m, n; do…

1748:约瑟夫问题

题目 总时间限制: 1000ms 内存限制: 65536kB 描述 约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样…

做报名统计的网站微门户网站建设

前面两篇文章记录了 Spring IOC 的相关知识&#xff0c;本文记录 Spring 中的另一特性 AOP 相关知识。 部分参考资料&#xff1a; 《Spring实战&#xff08;第4版&#xff09;》 《轻量级 JavaEE 企业应用实战&#xff08;第四版&#xff09;》 Spring 官方文档 W3CSchool Spri…

net网站开发教程简易微网站模板

构造器最大的作用:创建对象. 为什么使用反射创建对象,为什么不直接来new呢? 在框架中,提供给我们的都是字符串. ----------------------------------------------------------- 使用反射创建对象: 步骤: 1);找到构造器所在类的字节码对象. 2):获取构造器对象. 3):使用反射…

安全可信网站营销活动策划方案模板

前言 Python可以用于复杂的数据分析和Web开发项目&#xff0c;还能以极少的代码行数完成令人惊叹的任务。本文将分享25个简短的Python代码示例&#xff0c;用来展示Python编程语言的魅力和效率。 1.列表推导式 Python的列表推导式提供了一种优雅的方法来创建列表。 # 将一个…

完整教程:微论-神经网络的亲情密码,权重矩阵的家庭关系论

完整教程:微论-神经网络的亲情密码,权重矩阵的家庭关系论2025-09-27 18:26 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

Ansible + Docker 部署 Apache Nifi 1.28 单用户集群

Ansible + Docker 部署 Apache Nifi 1.28 单用户集群1. 准备工作 1.1 主机列表IP 主机名 内存(GB) CPU核数 磁盘 操作系统 CPU 架构10.0.0.13 arc-pro-dc01my.registry.com 16 1 500GB CentOS 7.9.2009 x86_6410.0.…

候机的队伍

候机的队伍今天乘机,小朋友们很激动地早早地去排队了。我苦口婆心地教育他们,不需要这么早排队。因为座位都是固定的,而需要早排队的理由只有两个: 1. 带了较多行李,需要早点登机占个位置。 2. 缓解焦虑,早点坐上…

个人网站怎么做支付功能抖音代运营合作协议免费

聚苯乙烯&#xff08;Polystyrene&#xff0c;简称PS&#xff09;是一种常见的合成聚合物&#xff0c;属于热塑性塑料。它是由苯乙烯单体聚合而成的&#xff0c;具有轻质、透明或半透明、电绝缘性好等特点。常见: 包装材料白色泡沫塑料&#xff08;EPS&#xff0c;用于包装、保…

网站推广策划的思路包括哪些内容广州网站建设功能

来源&#xff1a;半导体行业观察摘 要在本项目中&#xff0c;我们提出了一种基于学习的芯片布局方法&#xff0c;这是芯片设计过程中最复杂&#xff0c;最耗时的阶段之一。与以前的方法不同&#xff0c;我们的方法具有从过去的经验中学习并随着时间的推移而不断改进的能力。特别…

Keil uVision5 设置 hex 输出路径,不放Objects目录下

前言全局说明最近从 keil 2 换到 keil5, 新建项目后编译输出的 .hex 文件被放到 Objects目录下,找着不方便。一、说明 1.1 环境: Windows 7 旗舰版二、修改路径 2.1 打开项目设置选项 从工具栏打开或 从菜单里打开2.…

深入解析:【Linux】进程概念(六):进程地址空间深度解析:虚拟地址与内存管理的奥秘

深入解析:【Linux】进程概念(六):进程地址空间深度解析:虚拟地址与内存管理的奥秘pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

深入解析:Metal - 5.深入剖析 3D 变换

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

垃圾收集器G1ZGC详解

垃圾收集器G1&ZGC详解 一、G1 收集器(-XX:+UseG1GC) G1(Garbage-First)是面向多处理器、大内存的服务器级收集器,核心目标是可预测的 GC 停顿时间与高吞吐量平衡。1. 核心特性Region 划分:将 Java 堆划分为最…

菠菜网站怎么做外贸网站该怎么做

控制actor在level中沿着一个spline path运动。 由finterp to 函数的输出数值来控制每一帧actor运动的距离。 从开始位置到spline path的终点的时间&#xff0c;是1/interp speed。假如我们控制actor从开头到终点运动的总时间是1秒&#xff0c;那么 interp speed就传入0.5&#…

Godot Outline

Godot OutlineGodot 4.5 这几天更新了,补全了模板缓冲, 在渲染Depth Buffer时,一般使用D32S8的类似格式。在Godot中,原本Depth Buffer就只渲染了Depth,因此S8的通道没有被使用。Stencil即特定材质可以向这个通道里…

油猴脚本(tampermonkey)离线安装文件下载,带油猴(tampermonkey)插件清单

油猴插件(Tampermonkey)是一款浏览器扩展程序(也称为“用户脚本管理器”),主要是在浏览器中安装和运行自定义脚本,用于修改或增强网页功能。目前支持Chrome、Firefox、Edge、Safari等主流浏览器,基本就是丰富浏…

树在线网页制作网站wordpress目录在哪里

一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码&#xff0c;该版本为整合版本&#xff0c;内置了Joe主题&#xff0c;搭建后直接启用即可~ 安装环境要求&#xff1a; PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff…