• 深入探索Docker数据卷:实现容器持久化存储的完美方案(上)


     🐇明明跟你说过:个人主页

    🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅

    🔖行路有良友,便是天堂🔖

    目录

    一、引言

    1、 Docker简介

    2、 数据卷的概念及其在Docker中的重要性

     二、Docker数据卷基础知识

    1、 数据卷的定义

    2、 数据卷与Docker容器的关系

    3、 数据卷的类型

    3.1、 本地数据卷

    3.2、 网络数据卷(例如:Flocker,Portworx等)

    3.3、 云服务提供商的数据卷(例如:AWS EBS, Google Cloud Persistent Disk等

    三、Docker本地数据卷的使用

    1、 创建数据卷

    2、 挂载数据卷 

    3、 从容器内部访问数据卷

    4、 数据备份与恢复

    4.1、 数据备份

    4.2、 数据恢复


    一、引言

    1、 Docker简介

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。它是基于Google公司推出的Golang语言开发,利用Linux内核的Cgroups、NameSpace,以及UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。

    Docker使用沙箱机制,确保容器之间不会有任何接口,从而实现资源和环境的隔离,每个容器都在独立的空间内运行,互不影响。这种隔离环境、沙箱机制、易移植性、灵活封装和易扩展性等特点使得Docker成为开发者和系统管理员广泛使用的容器引擎。

    Docker的三大核心组件包括镜像(Image)、容器(Container)和仓库(Repository)。其中,Docker镜像相当于一个只读的root文件系统,用来创建Docker容器。Docker容器是运行时的实例,是镜像运行时的状态。而Docker仓库则是用来存储Docker镜像的地方,包括Docker Hub和私有Docker Registry等。

    2、 数据卷的概念及其在Docker中的重要性

    Docker数据卷(Volume)是Docker中的一个重要概念,它指的是宿主机上的一个目录或文件,可以被一个或多个容器同时使用。通过数据卷,容器可以访问宿主机上的文件系统,实现数据的持久化和共享。

    在Docker中,容器是运行时的实例,它们是隔离的、独立的进程空间。当容器被删除时,容器内部的数据也会随之销毁。因此,为了实现数据的持久化和共享,Docker引入了数据卷的概念。数据卷可以使得容器与宿主机之间、容器与容器之间实现数据的共享和交换,从而解决了容器间数据通信和数据持久化的问题。

     数据卷的重要性体现在以下几个方面:

    1. 数据持久化:数据卷可以使得容器内的数据在容器被删除后仍然保留在宿主机上,从而实现了数据的持久化。这对于需要长期保存数据的应用来说非常重要。
    2. 数据共享和重用:数据卷可以在多个容器之间共享和重用,从而实现了容器之间的数据交互。这对于需要多个容器协同工作的应用来说非常有用。
    3. 外部机器和容器间接通信:由于Docker容器的隔离性,外部机器无法直接访问容器内的文件系统。但是,通过数据卷,外部机器可以间接地与容器进行通信,从而实现了外部机器和容器之间的数据交换。

     二、Docker数据卷基础知识

    1、 数据卷的定义

    1. 数据卷是一个可供容器使用的特殊目录,它可以将主机操作系统目录直接映射进容器,或者将其他容器中的数据卷挂载到容器中。容器对数据卷的修改操作会立即生效,并且这些修改对容器和宿主机都是可见的。数据卷的生命周期独立于容器,即使容器被删除,数据卷也不会被自动删除,除非显式地删除数据卷。因此,数据卷可以用于持久化存储容器的数据,实现容器之间的数据共享和重用,以及外部机器和容器之间的数据交换。
    2. 数据卷的使用类似于Linux下对目录进行的mount操作,可以使得容器访问宿主机上的文件系统,实现数据的共享和传递。在Docker中,可以使用docker volume命令来创建和管理数据卷,也可以使用docker run命令中的-v选项来挂载数据卷到容器中。

    2、 数据卷与Docker容器的关系

    1. 数据持久性:Docker 容器是临时性的,意味着容器中的文件系统随着容器的销毁而丢失。为了实现数据持久性,可以使用数据卷将容器内部的数据持久化存储到主机的文件系统中。
    2. 容器挂载数据卷:Docker 容器可以通过挂载数据卷的方式将主机文件系统中的目录或文件挂载到容器内部。这样,容器就可以直接访问主机文件系统中的数据,而不必担心数据的丢失。
    3. 容器之间共享数据卷:数据卷可以被多个容器共享,这意味着可以将数据卷挂载到多个容器中,实现容器之间的数据共享和通信。
    4. 数据卷的特性:数据卷可以是匿名的,也可以是具名的。具名数据卷可以被多个容器共享,并且可以轻松管理和维护。数据卷还支持读写权限的设置,可以根据需要设置为只读或读写模式。
    5. 数据卷容器:除了直接在容器中挂载数据卷外,还可以使用数据卷容器来管理数据卷。数据卷容器是一个专门用于存储数据的容器,其他容器可以通过挂载数据卷容器来访问其中的数据,从而实现数据的共享和持久化存储。

    3、 数据卷的类型

    3.1、 本地数据卷

    本地数据卷是Docker的默认数据卷类型,当创建一个数据卷但不指定其驱动类型时,就会创建一个本地数据卷。本地数据卷的生命周期独立于容器,即使容器被删除,数据卷也会保留在宿主机上,除非显式地删除数据卷。

    本地数据卷具有以下特点与用途:

    1. 数据持久性: 本地数据卷使得容器内部的数据可以持久化存储到宿主机的文件系统中,即使容器被删除,数据仍然保留在宿主机上。
    2. 数据共享: 多个容器可以共享同一个本地数据卷,从而实现容器之间的数据共享和通信。这样可以简化容器之间的数据交换和同步,提高应用程序的灵活性和可扩展性。
    3. 数据备份和恢复: 由于数据存储在宿主机的文件系统中,可以通过常规的文件备份和恢复工具对数据进行备份和恢复,提高数据的安全性和可靠性。
    4. 配置灵活性: 本地数据卷允许将宿主机上的任意目录或文件挂载到容器内部,因此可以根据应用程序的需要灵活配置数据卷的位置和内容。
    5. 性能优势: 与远程存储或网络文件系统相比,本地数据卷通常具有更好的性能和稳定性,因为数据直接存储在宿主机的本地文件系统中,无需通过网络传输数据。

    3.2、 网络数据卷(例如:Flocker,Portworx等)

    Docker数据卷的类型不仅限于本地数据卷,还可以通过网络存储系统提供的数据卷进行扩展。这些网络数据卷通常是由第三方存储解决方案提供的,并且可以通过Docker的卷插件机制集成到Docker环境中。网络数据卷的一些例子包括Flocker、Portworx、Convoy等。

    网络数据卷与本地数据卷的主要区别在于数据的存储位置和管理方式。网络数据卷将数据存储在网络存储系统中,这意味着数据可以在多个宿主机之间共享和迁移,而不仅仅局限于单个宿主机。此外,网络存储系统通常提供了更多的数据管理和保护功能,如数据备份、恢复、快照、复制等。

    网络数据卷具有以下特点与用途:

    1. 可扩展性:网络数据卷可以很容易地扩展到多个宿主机或集群中,支持大规模数据存储和管理。
    2. 数据共享和迁移:由于数据存储在网络中,多个容器或宿主机可以共享访问这些数据卷,实现数据的共享和迁移。
    3. 高可用性和容错:网络存储系统通常具有高可用性和容错机制,可以确保数据的可靠性和持久性。
    4. 集中管理:网络数据卷可以通过集中的存储管理系统进行集中管理和监控,简化数据管理的复杂性。

    3.3、 云服务提供商的数据卷(例如:AWS EBS, Google Cloud Persistent Disk等

    除了本地数据卷和网络数据卷之外,Docker数据卷还可以利用云服务提供商提供的存储服务,如AWS Elastic Block Store (EBS)、Google Cloud Persistent Disk等。这些云服务提供商的数据卷类型允许Docker容器直接访问和使用云服务上托管的块存储或磁盘存储。

    使用云服务提供商的数据卷,通常需要通过特定的Docker插件或集成来实现。这些插件允许Docker与云服务提供商的API进行交互,从而动态创建和管理存储资源。一旦配置好相应的插件,你可以像使用本地数据卷一样在Docker中创建和使用这些云服务提供商的数据卷。

     云服务提供商的数据卷具有以下特点与用途:

    1. 高可用性:云服务提供商通常提供高可用性和容错机制,确保数据的持久性和可靠性。
    2. 弹性扩展:可以根据需要动态调整存储资源的大小,实现弹性的存储扩展。
    3. 集中管理:云服务提供商通常提供统一的管理界面和API,方便对数据卷进行集中管理和监控。
    4. 全球覆盖:云服务提供商通常在全球多个地区设有数据中心,可以实现数据的低延迟访问和备份。

    三、Docker本地数据卷的使用

    1、 创建数据卷

    使用docker volume create命令

    docker volume create myvolume

    在上面的命令中,myvolume 是为新数据卷指定的名称。如果不指定名称,Docker会自动生成一个随机名称。

    创建数据卷后,可以使用 docker volume ls 命令来列出所有已创建的数据卷,以确认数据卷是否已成功创建

    [root@node1 ~]# docker volume ls
    DRIVER    VOLUME NAME
    local     myvolume

    查看更详细的信息: 

    [root@node1 ~]# docker volume inspect myvolume
    [
        {
            "CreatedAt": "2024-03-04T14:16:09+08:00",
            "Driver": "local",
            "Labels": null,
            "Mountpoint": "/var/lib/docker/volumes/myvolume/_data",
            "Name": "myvolume",
            "Options": null,
            "Scope": "local"
        }
    ]

    2、 挂载数据卷 

    使用 docker run 命令挂载数据卷

    [root@node1 ~]# docker run --name testv -itd -v myvolume:/data centos:latest

    myvolume 是之前创建的数据卷的名称,/data 是容器内部的挂载点。也就是说,在容器内部,可以通过 /data 路径来访问 myvolume 数据卷中的数据。

    3、 从容器内部访问数据卷

    以刚刚创建的testv容器为例,首先进入到容器内部

    [root@node1 ~]# docker exec -it testv /bin/bash
    1. [root@782f2948f013 /]# cd /data/
    2. #进入到映射目录
    3. [root@782f2948f013 data]# pwd
    4. /data
    5. [root@782f2948f013 data]# touch myvolume.txt
    6. #创建一个测试文件
    7. [root@782f2948f013 data]# exit
    8. #退出容器

    4、 数据备份与恢复

    4.1、 数据备份

    数据备份可以通过多种方式完成,以下是一些常见的方法

    1. 使用 docker cp 命令:

    如果数据卷已经挂载到正在运行的容器内,可以使用 docker cp 命令将数据从容器内复制到宿主机上

    docker cp <container_id>:/path/in/container /path/on/host

     上面的命令会将容器内指定路径的数据复制到宿主机的指定路径。

    2.使用数据卷容器:

    创建一个新的容器,挂载需要备份的数据卷,然后将数据卷中的文件打包成tar文件。

    docker run --volumes-from <source_container> -v $(pwd):/backup centos tar cvf /backup/backup.tar /path/in/volume

     上面的命令会把源容器中的数据卷内容备份到当前目录下的 backup.tar 文件中。

    3.使用第三方工具:

    有些第三方工具如 Portainer 或 Dockerode 提供了图形界面或API来更简单地管理和备份数据卷。

    4.2、 数据恢复

    1. 使用 docker cp 命令:

    如果之前使用 docker cp 备份了数据,可以使用相同的命令将数据从宿主机复制回容器内。

    docker cp /path/on/host <container_id>:/path/in/container

    2.使用数据卷容器:

    创建一个新的容器,挂载需要恢复的数据卷,然后使用 tar 命令解压备份文件到数据卷中。

    docker run --volumes-from <source_container> -v $(pwd):/backup centos tar xvf /backup/backup.tar -C /path/in/volume

    上面的命令会把备份文件中的内容恢复到源容器的数据卷中。

    3.重新创建并挂载数据卷:

    如果数据卷已经被删除,可以创建一个新的数据卷,并将其挂载到需要恢复的容器上。然后,将备份的数据复制到新的数据卷中。

    ※请注意,在执行任何备份或恢复操作之前,都应该确保数据的一致性和完整性。此外,定期测试备份文件的可用性也是一个好习惯,以确保在需要时能够成功恢复数据。

    🎗️🎗️🎗️以上仅是我对Docker数据卷的个人观点与见解,如果您有任何不同的看法或建议,欢迎在评论区与我分享和讨论。

    🚩🚩🚩对于希望深入了解Docker技术的朋友们,我诚挚地邀请您关注我的Docker专栏Docker从零到精通:实战指南。我会定期更新和分享Docker领域的最新知识、技术动态和前沿实践,希望能为您的Docker学习之旅提供有价值的参考和指导。

    ❤️❤️❤️最后,请允许我衷心感谢您的阅读和对本专栏的支持!您的鼓励是我持续创作的最大动力。希望我们能在Docker的学习道路上共同进步,共创辉煌!!!

     

  • 相关阅读:
    Vue3实现刷新页面局部内容
    RORγ 反向激动剂-XY101 小分子化合物
    SPA首屏加载速度慢
    Gitlab在线安装、离线安装、搭建、使用等详细介绍,不能再详细了……
    git的使用规范及技巧总结
    [NAS] QNAP/威联通 常用设置和操作
    振南技术干货集:CPU,你省省心吧!(2)
    【论文阅读 05】图像异常检测研究现状综述
    STM32-通用定时器
    【matlab】随机森林客户流失预测
  • 原文地址:https://blog.csdn.net/weixin_53269650/article/details/136449451