在 Docker 容器中,数据通常是临时性的。当容器被销毁时,它包含的所有数据都会丢失。这对于某些场景来说是可以接受的,例如运行一次性任务的容器。但是,对于需要存储持久数据的应用程序,我们需要一种方法来使数据在容器被销毁后仍然存在。
Docker 数据卷提供了持久化数据的一种解决方案。数据卷是一个存储在 Docker 主机上的特殊目录,可以由一个或多个容器挂载。当容器挂载数据卷时,它可以访问和修改卷中的数据。即使容器被销毁,卷中的数据也会保留,可以在以后的容器中使用。
可以使用以下命令创建数据卷:
```docker volume create要将数据卷挂载到容器中,可以使用 -v 标记:
```docker run -vDocker 支持两种类型的数据卷:
使用 Docker 数据卷有以下优点:
在使用 Docker 数据卷时,需要考虑一些注意事项:
Docker 数据卷提供了在容器和主机之间持久化数据的有效方法。通过使用数据卷,我们可以创建持久数据存储,该存储可以在多个容器之间共享、移植和保护。
Docker Volume 即数据卷,用于保持数据持久化,例如MySQL运行在Docker容器中时,一般将数据通过 Docker Volume 保存在主机上,这样即使删除MySQL容器,数据依然保存在主机上,有效保证了数据的安全性。
Docker Volume 就是一个目录或者文件,通俗得理解就是宿主机或者网络存储系统中的一个目录或者文件挂载在容器中用于保持数据持久化
我们先了解一下什么是联合文件系统
联合文件系统( UnionFS )是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。
联合文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父 镜像),可以制作各种具体的应用镜像。
如果运行中的容器修改了现有的一个已经存在的文件,那该文件会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是被读写层中该文件的副本所隐藏,这是“写时复制(COW)”机制 “
但对对于磁盘io要求比较高的redis MySQL 等应用,不适合这种分层叠加写时复制文件系统
这个设计虽然使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。
为了解决这些问题docker引入了数据卷机制(docker volume,volume是存在一个或多个容器中的特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下便利。
数据卷容器也是一个容器 它的目的是专门提供数据卷给其他容器挂载
什么时候需要用的数据卷容器
注意:
使用 --volume-from 参数所挂载的数据的容器自身并不需要保持运行状态
如果删除了挂载的容器(volume_docker,dbdat1,dbdata2),数据卷并不会被删除,如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v 命令指定同时删除关联的容器
在Dockerfile 中通过VOLUME 指令添加 数据卷
Docker容器默认设计为无状态应用,因此每次重启容器时,之前的更改和数据会被销毁。 容器的文件系统由只读层和可写层组成,可写层是唯一可变的部分,当容器停止或重启时,可写层会被丢弃,只读层则保持不变。 不过,Docker提供了多种方法来持久化数据,避免在容器重启时丢失数据。 这些方法包括使用数据卷容器、命名卷、和bind mount。 使用数据卷容器是一种常见的持久化数据方式。 创建一个数据卷容器后,可以将其挂载到容器的特定目录,这样,任何写入到该目录的数据都会保存在数据卷容器中。 在容器重启时,数据卷容器会保留其内容。 通过这种方式,即使容器被删除或重建,数据也会保持不变。 在MySQL的场景中,通过以下步骤实现持久化数据:1. 创建数据卷容器:此步骤创建了一个名为mysql-data-container的容器,并在其中挂载了一个数据卷,该数据卷与MySQL的默认数据存储路径相对应。 2. 启动MySQL容器并挂载数据卷容器:在启动新MySQL容器时,挂载已创建的数据卷容器,确保数据存储在容器中的持久性。 3. 连接并初始化MySQL:通过工具如Navicat连接到本地主机的MySQL实例,创建数据库和表结构等。 4. 保持数据持久性:重启或删除mysql-container后,重新启动容器并挂载mysql-data-container时,MySQL数据仍完整存在。 数据卷容器提供了一个独立的存储单元,使得数据在容器停止或重建时保持不变,提高了灵活性和可移植性。 数据卷容器的挂载目录路径可以通过Docker Desktop找到,具体方法是查看创建数据卷容器时的输出信息,或使用docker inspect命令获取容器详细信息。 路径通常位于宿主机上的某个目录,与数据卷容器相关联。 指定数据卷在宿主机的挂载点可通过docker create或docker run命令时使用-v或--mount标志实现。 示例命令展示了如何将宿主机的目录映射到容器内的目录,以实现数据卷的创建和挂载。
Docker容器的临时性和无状态特性导致数据易丢失,因此数据持久化是许多应用程序的需求。 通过数据卷、绑定挂载和命名卷,Docker提供了多种数据持久化方法。
对于数据备份和还原,虽然具体方法取决于选择的数据持久化策略,一般可以通过docker save命令将容器的镜像保存为tar文件,然后在需要时使用docker load命令恢复。对于数据卷,可以通过docker export命令导出卷内容,或使用docker cp命令直接复制到备份位置,需要还原时再通过相应命令导入。本文地址:http://www.hyyidc.com/article/35568.html