Docker数据持久化教程:数据卷、绑定挂载、命名卷与备份技巧详解

近期文章:

为什么需要数据持久化?

Docker 中的容器是临时的,并且通常设计为无状态的,这意味着容器在删除或重新创建后,其中的数据会被清除。然而,许多应用程序需要持久化存储数据,以便数据不会丢失,并且在容器重新创建后仍然可用。数据持久化还有助于在多个容器之间共享数据,或者将数据备份到宿主机或远程存储中

常见的 Docker 数据持久化方法

以下是 Docker 中常见的数据持久化方法:

  1. 数据卷(Volumes):数据卷是一种特殊的目录,可以绕过容器文件系统并将数据存储在宿主机上。数据卷可以被一个或多个容器共享,并且在容器之间持久存在。使用数据卷可以方便地备份、恢复和迁移数据。
  2. 绑定挂载(Bind Mounts):绑定挂载允许将宿主机上的文件或目录直接挂载到容器中。这样,容器可以访问宿主机文件系统中的数据,并且对数据的修改也会反映到宿主机上。
  3. 命名卷(Named Volumes):命名卷是一种具有名称的数据卷,可以在多个容器之间共享,并且可以方便地管理和使用。通过为卷指定名称,可以在创建容器时直接引用该名称,并且 Docker 会自动创建和管理卷。
  4. 数据卷容器(Data Volume Containers):数据卷容器是一种特殊类型的容器,用于存储和管理数据卷。其他容器可以通过 --volumes-from 选项挂载这些数据卷容器,从而实现数据的共享和持久化。

使用数据卷进行数据持久化

数据卷是 Docker 中实现数据持久化的一种常见方法,它允许容器将数据存储在宿主机上的特定目录中可以绕过容器文件系统并将数据存储在宿主机上。数据卷可以被一个或多个容器共享,并且在容器之间持久存在。使用数据卷可以方便地备份、恢复和迁移数据。可以通过在Dockerfile或者命令行中使用 -v 选项来创建和使用数据卷

创建数据卷

docker volume create my_data_volume

查看数据卷

docker volume ls 

使用数据卷

在运行容器时,可以使用 -v--mount 参数来将数据卷挂载到容器内的指定路径

docker run -v my_data_volume:/app/data <image>

数据卷的特性

  • 数据卷可以在容器之间共享数据。
  • 数据卷可以在容器运行时进行备份、恢复和迁移。
  • 数据卷的生命周期独立于容器的生命周期。即使删除容器,数据卷仍然存在

删除容器重新创建

再次创建tomcat容器,创建的666文件依然存在

使用绑定挂载进行数据持久化

绑定挂载允许将宿主机上的文件或目录直接挂载到容器中。这样,容器可以访问宿主机文件系统中的数据,并且对数据的修改也会同步到宿主机上。

使用绑定挂载

在运行容器时,使用 -v--mount 参数指定要挂载的宿主机路径和容器路径。

docker run -v /var/data:/app/data <image>

将宿主机上的 /var/data 目录挂载到容器内的 /app/data 目录

绑定挂载的特性

  • 绑定挂载允许容器与宿主机之间共享数据。
  • 对绑定挂载路径的更改会直接反映到宿主机上。
  • 宿主机上的文件和目录权限和属性会直接应用到容器中

使用命名卷进行数据持久化

命名卷是一种具有名称的数据卷,可以在多个容器之间共享,并且可以方便地管理和使用。以下是使用命名卷进行数据持久化的步骤:

第一步:创建命名卷

命令创建一个命名卷:

docker volume create --name my_named_volume

上面命令创建了一个 my_named_volume 的命名卷。可以使用 docker volume ls 命令查看所有数据卷列表

第二步:挂载命名卷到容器

运行容器时,使用 -v 选项将命名卷挂载到容器中的特定路径:

docker run -d -v my_named_volume:/path/in/container <image>

这将把 my_named_volume 命名卷挂载到容器的 /path/in/container 目录。容器中的数据将被持久化存储在命名卷中

使用数据卷容器进行数据持久化

数据卷容器是一种特殊类型的容器,用于存储和管理数据卷。其他容器可以通过 --volumes-from 选项挂载这些数据卷容器,从而实现数据的共享和持久化。以下是使用数据卷容器进行数据持久化的步骤:

第一步:创建数据卷容器

首先,创建一个专门用于存储数据的数据卷容器:

docker create -v /data --name data_container <image>

上述命令将创建一个名为 data_container 的数据卷容器,并将 /data 目录指定为数据卷的挂载点。

第二步:将数据卷容器挂载到其他容器

然后,在需要持久化数据的容器中,通过 --volumes-from 选项将数据卷容器挂载进来:

docker run -d --volumes-from data_container <image>

通过这样的方式,容器将共享数据卷容器中的 /data 目录,从而实现数据的持久化

docker 数据卷的备份和还原

数据备份方法

docker run  --volumes-from [container name] -v $(pwd):/backup centos tar czvf /backup/backup.tar [container data volume]

数据还原方法

docker run --volumes-from [container name] -v $(pwd):/backup centos tar xzvf /backup/backup.tar.gz [container data volume]