docker卷容器策略
假设您正在尝试停靠一个数据库(例如couchdb)。 那么至少有两个你认为体积很大的资产:docker卷容器策略,docker,docker-volume,data-containers,Docker,Docker Volume,Data Containers,假设您正在尝试停靠一个数据库(例如couchdb)。 那么至少有两个你认为体积很大的资产: 数据库文件 日志文件 让我们进一步假设您希望保持数据库文件的私有性,但希望公开日志文件以供以后处理 据我所知,您有两种选择: 第一选择 为db映像中的日志文件和db文件定义托管卷 将这些导入第二个容器(您将同时获得这两个容器)并处理日志 第二种选择 为日志创建具有托管卷的数据容器 仅为db文件创建具有托管卷的db映像 运行db映像时从数据容器导入日志卷 两个问题: 这两个选项真的有效/可能吗
- 数据库文件
- 日志文件
- 为db映像中的日志文件和db文件定义托管卷
- 将这些导入第二个容器(您将同时获得这两个容器)并处理日志
- 为日志创建具有托管卷的数据容器
- 仅为db文件创建具有托管卷的db映像
- 运行db映像时从数据容器导入日志卷
br volker问题1的答案是,是的,两者都是有效和可能的 我对问题2的回答是,我将完全考虑一种不同的方法,选择哪一种方法取决于这是否是一项关键任务系统,并且必须避免数据丢失。 关键任务 如果您绝对不能丢失数据,那么我建议您将可靠的磁盘绑定到数据库容器中。绑定装载实际上是将Docker主机文件系统的一部分装载到容器中 因此,以数据库文件为例,您可以想象以下步骤:
/reliable/disk
。要将其用于我的数据库,我将运行以下Docker命令:
docker run-d-v/reliable/disk:/data/db我的数据库映像
通过这种方式,我知道数据库文件被写入可靠的存储。即使我丢失了Docker主机,我仍然拥有数据库文件,并且可以通过在另一台可以访问NFS共享的主机上运行我的数据库容器来轻松恢复
您可以对数据库日志执行完全相同的操作:
docker run-d-v/reliable/disk/data/db:/data/db-v/reliable/disk/logs/db:/logs/db我的数据库映像
此外,您可以轻松地将这些卷绑定到其他容器中,以执行单独的任务。您可能想考虑将绑定安装为只读到其他容器中,以保护数据:
docker run-d-v/reliable/disk/logs/db:/logs/db:ro我的日志处理器
如果这是一个任务关键型系统,这将是我推荐的方法
非关键任务
如果系统不是任务关键型的,并且您可以容忍更高的数据丢失可能性,那么我将看看API,它正是用于您想要做的事情:管理和创建超出容器生命周期的数据卷
docker volume
命令的好处在于,它可以让您创建命名卷,如果您能很好地命名这些卷,人们就可以很明显地知道它们的用途:
docker卷创建数据库数据
docker卷创建数据库日志
然后,可以从命令行将这些卷装载到容器中:
docker run-d-v db data:/db/data-v db logs:/logs/db我的数据库映像
这些卷将在容器的生命周期之外继续存在,并存储在文件系统中(如果Docker主机可用)。您可以使用:
docker卷检查数据库数据
找出数据存储的位置,并在需要时备份该位置
您可能还想看看这样的东西,它允许您在一个文件中声明所有这些内容,然后通过一个命令创建整个环境