Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker卷容器策略_Docker_Docker Volume_Data Containers - Fatal编程技术网

docker卷容器策略

docker卷容器策略,docker,docker-volume,data-containers,Docker,Docker Volume,Data Containers,假设您正在尝试停靠一个数据库(例如couchdb)。 那么至少有两个你认为体积很大的资产: 数据库文件 日志文件 让我们进一步假设您希望保持数据库文件的私有性,但希望公开日志文件以供以后处理 据我所知,您有两种选择: 第一选择 为db映像中的日志文件和db文件定义托管卷 将这些导入第二个容器(您将同时获得这两个容器)并处理日志 第二种选择 为日志创建具有托管卷的数据容器 仅为db文件创建具有托管卷的db映像 运行db映像时从数据容器导入日志卷 两个问题: 这两个选项真的有效/可能吗

假设您正在尝试停靠一个数据库(例如couchdb)。 那么至少有两个你认为体积很大的资产:

  • 数据库文件
  • 日志文件
让我们进一步假设您希望保持数据库文件的私有性,但希望公开日志文件以供以后处理

据我所知,您有两种选择:

  • 第一选择

    • 为db映像中的日志文件和db文件定义托管卷
    • 将这些导入第二个容器(您将同时获得这两个容器)并处理日志
  • 第二种选择

    • 为日志创建具有托管卷的数据容器
    • 仅为db文件创建具有托管卷的db映像
    • 运行db映像时从数据容器导入日志卷
  • 两个问题:

  • 这两个选项真的有效/可能吗
  • 更好的方法是什么

  • br volker

    问题1的答案是,是的,两者都是有效和可能的

    我对问题2的回答是,我将完全考虑一种不同的方法,选择哪一种方法取决于这是否是一项关键任务系统,并且必须避免数据丢失。 关键任务

    如果您绝对不能丢失数据,那么我建议您将可靠的磁盘绑定到数据库容器中。绑定装载实际上是将Docker主机文件系统的一部分装载到容器中

    因此,以数据库文件为例,您可以想象以下步骤:

  • 创建一个可靠的磁盘,例如定期备份的NFS
  • 将此磁盘连接到Docker主机
  • 绑定将此磁盘装入我的数据库容器,然后将数据库文件写入此磁盘
  • 因此,按照上面的示例,假设我创建了一个可靠的磁盘,该磁盘通过NFS共享,并安装在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卷检查数据库数据
    

    找出数据存储的位置,并在需要时备份该位置

    您可能还想看看这样的东西,它允许您在一个文件中声明所有这些内容,然后通过一个命令创建整个环境