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

[Docker集群] Docker 数据持久化

目录

一、为什么需要 Docker 数据持久化?

二、数据卷挂载:最常用的持久化方式

1️⃣三类数据卷挂载对比

2️⃣实操示例:三类挂载怎么用?

(1)指定宿主机目录挂载

(2)匿名卷挂载

(3)命名卷挂载

3️⃣数据卷的核心优势

三、数据卷容器:专门的 “数据管家”

1️⃣核心概念

2️⃣实操示例:创建并使用数据卷容器

3️⃣使用场景与注意事项

四、总结:三种持久化方案怎么选?


对于刚接触 Docker 的开发者来说,“容器删除后数据丢失” 是最容易踩的坑之一。Docker 数据持久化正是解决这一问题的核心方案,它不仅能保障数据安全,还能实现容器间数据共享。本文将基于 Docker 核心存储策略,从概念到实操,全面讲解数据持久化的三种核心方法,帮你彻底掌握容器数据的管理技巧。

一、为什么需要 Docker 数据持久化?

默认情况下,容器内的数据与容器生命周期绑定 —— 一旦容器被删除,数据也会随之消失。数据持久化的核心价值就在于打破这种绑定,主要体现在三个方面:

  1. 数据保护:即使容器意外删除或重启,数据仍能长期保存,避免业务数据丢失。
  2. 数据共享:实现 “容器与宿主机”“多个容器之间” 的双向数据共享,比如 Web 容器和数据库容器共享配置文件。
  3. 管理灵活:可根据业务场景(如数据库存储、日志输出)选择不同的持久化方案,兼顾性能与易用性。

二、数据卷挂载:最常用的持久化方式

数据卷挂载是 Docker 中最基础、最常用的持久化手段,核心是将 “宿主机的目录 / 文件” 与 “容器内的目录 / 文件” 关联,实现数据同步。根据挂载方式的不同,可分为三类,适合不同的使用场景。

1️⃣三类数据卷挂载对比

挂载类型核心特点适用场景
指定宿主机目录需手动指定宿主机绝对路径,容器与宿主机目录直接绑定需明确控制数据存储位置的场景(如宿主机特定磁盘分区存储)
匿名卷不指定宿主机路径,Docker 自动生成随机路径(默认在/var/lib/docker/volumes/<卷ID>/_data临时数据存储,无需记住具体路径的场景
命名卷给数据卷起自定义名称,路径固定(/var/lib/docker/volumes/<卷名>/_data长期使用、需跨容器共享的场景(如多个容器共用配置文件)

2️⃣实操示例:三类挂载怎么用?

所有挂载都通过docker run命令的-v参数实现,格式为-v [宿主机路径/卷名]:[容器路径]:[权限],其中权限可选ro(只读)或rw(读写,默认)。

(1)指定宿主机目录挂载

适合需要明确数据存储位置的场景,比如将宿主机的/data目录挂载到容器的/opt目录:

bash

# 命令:-v 宿主机绝对路径:容器路径
[root@localhost ~]# docker run -it --name c1 -v /data:/opt centos:7
# 进入容器后,操作/opt目录等同于操作宿主机的/data目录
[root@78b724f7bf34 /]# cd /opt/
[root@78b724f7bf34 opt]# ls
# 此时能看到宿主机/data目录下的文件(如Centos-7.repo、dockerfile等)
(2)匿名卷挂载

无需指定宿主机路径,Docker 自动分配路径,适合临时存储:

bash

# 命令:只写容器路径,不写宿主机路径
[root@localhost ~]# docker run --name nginx -v /etc/nginx nginx
# 进入容器,在/etc/nginx目录创建文件
[root@localhost ~]# docker exec -it nginx bash
root@5d4d2f9f93f2:/# cd /etc/nginx
root@5d4d2f9f93f2:/etc/nginx# touch aaa
# 宿主机中,数据实际存在于/var/lib/docker/volumes/<随机卷ID>/_data目录
(3)命名卷挂载

给数据卷起固定名称,方便管理和跨容器共享,推荐长期使用:

bash

# 1. 先创建命名卷(也可以不创建,run时会自动创建)
[root@localhost ~]# docker volume create vol1
# 2. 挂载命名卷到容器
[root@localhost ~]# docker run -d -p 80:80 --name nginx01 -v vol1:/usr/share/nginx/html nginx
# 3. 管理命名卷(查看、删除等)
[root@localhost ~]# docker volume ls  # 查看所有数据卷
[root@localhost ~]# docker volume inspect vol1  # 查看vol1的详细信息(如路径)
[root@localhost ~]# docker volume rm vol1  # 删除vol1(需确保无容器使用)

3️⃣数据卷的核心优势

  • 生命周期独立:容器删除后,数据卷仍保留,数据不会丢失。
  • 性能更高:数据卷绕过 Docker 的联合文件系统,读写速度比容器内部文件系统更快。
  • 跨容器共享:多个容器可同时挂载同一个数据卷,实现数据互通。

三、数据卷容器:专门的 “数据管家”

如果需要多个容器共享大量数据,单独管理数据卷会比较繁琐。这时可以用 “数据卷容器”—— 它本身不运行业务应用,只作为 “数据存储容器”,让其他容器通过挂载它来共享数据。

1️⃣核心概念

  • 定义:一个专门存储数据的容器,内部包含一个或多个数据卷,其他容器通过--volumes-from参数挂载它的数据卷。
  • 用途:集中管理共享数据,简化多容器数据共享的配置(比如 Web 容器、APP 容器共用一个数据库数据卷容器)。

2️⃣实操示例:创建并使用数据卷容器

以 “创建数据卷容器 web2,让 web3 容器共享其数据” 为例:

  1. 创建数据卷容器 web2:

    bash

    # 命令:--name 容器名 -v 数据卷1 -v 数据卷2 基础镜像
    [root@localhost ~]# docker run --name web2 -v /data1 -v /data2 -it centos:7 /bin/bash
    # 在web2中写入测试数据
    [root@web2 /]# echo "this is web2" > /data1/abc.txt
    [root@web2 /]# echo "THIS IS WEB2" > /data2/ABC.txt
    
  2. 创建 web3 容器,挂载 web2 的数据卷:

    bash

    # 命令:--volumes-from 数据卷容器名
    [root@localhost ~]# docker run -it --volumes-from web2 --name web3 centos:7 /bin/bash
    # 验证数据:在web3中查看/data1和/data2
    [root@web3 /]# cat /data1/abc.txt  # 输出:this is web2
    [root@web3 /]# cat /data2/ABC.txt  # 输出:THIS IS WEB2
    

3️⃣使用场景与注意事项

  • 适用场景:多容器协作(如微服务架构中,多个服务共享配置文件、静态资源)、需要集中管理数据的场景。
  • 注意事项:
    1. 数据卷容器仅用于存储数据,不要在其中运行业务进程。
    2. 数据卷容器删除后,其数据也会丢失,若需长期保存,建议结合命名卷使用。
    3. 性能依赖宿主机文件系统,若需高性能存储,需优化宿主机磁盘配置。

四、总结:三种持久化方案怎么选?

Docker 数据持久化的核心是 “将数据与容器解耦”,三种方案各有侧重,初学者可按以下原则选择:

方案核心优势推荐场景
指定宿主机目录路径可控,适合与宿主机直接交互需明确数据存储位置(如宿主机特定分区)
命名卷管理方便,跨容器共享灵活长期使用、多容器共享数据(如数据库、配置文件)
数据卷容器集中管理多数据卷,简化配置多个容器共享多个数据卷(如微服务架构)
匿名卷无需配置,开箱即用临时数据存储(如临时日志、测试文件)

掌握数据持久化是 Docker 进阶的第一步,建议从命名卷开始实践,熟悉后再尝试数据卷容器,逐步搭建更灵活的容器数据管理体系。

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

相关文章:

  • MCP vs. API:AI智能体如何更轻松地连接外部世界?
  • 【XR硬件系列】破局“芯”瓶颈:深入浅出解析XR专用芯片的必然性
  • 浙江省建设培训中心的网站小程序开发公司简介
  • Redis 限流解决方案:结合 Lua 脚本、AOP 和自定义注解的实现
  • 游戏画面卡顿残影?这款电竞显示器610Hz + 4K OLED
  • COLMAP原理讲解与使用教程
  • 定位守护童年,科技构筑安全屏障
  • AWS EC2 Jenkins 自动化部署与 Python 环境管理
  • Linux中快速部署Elasticsearch(基础TLS配置)
  • 2025吉比特-游戏引擎开发-一面复盘
  • java数据结构--List的介绍
  • 网站主页不收录肥城房产网
  • 计算机视觉(opencv)——基于 MediaPipe 的实时面部表情识别
  • C++设计模式_行为型模式_观察者模式Observer(发布-订阅(Publish-Subscribe))
  • 怎么解决ModuleNotFoundError: No module named ‘Cython‘
  • 电子商务网站规划流程手机主题制作网站
  • 微信小程序 Button 组件 open-type 完全指南:从用户信息获取到客服分享的实战应用
  • 阿里云白皮书-架构
  • Rokid 开发空间小程序 实战
  • RAG系统搭建指南:5种主流框架的易用性和效果对比
  • 网站后台怎么添加代码哪里有免费的域名注册建网站
  • Jetson AGX Orin+GMSL+AI视觉开发套件,支持自动驾驶,机器人,工业视觉等应用
  • 【JETSON+FPGA+GMSL+AI】自动驾驶与移动机器人的摄像头如何实现高精度时间同步?
  • Java 设计模式——建造者模式:从原理到实战的极简指南
  • 怎么找做企业网站的雁塔区住房和城乡建设局网站
  • 哈尔滨电商企业服务器托管方案
  • 机器学习基础入门(第五篇):半监督学习与强化学习
  • 建网站解决方案代运营网店公司
  • 网站建设网页制作软件wordpress 移动到回收站发生错误
  • 5G安全深入解析:EAP-AKA、EAP-AKA‘与5G-AKA详解