码头工人集装箱策略

时间:2017-01-12 09:07:53

标签: docker docker-volume data-containers

假设您正在尝试将数据库停靠(例如,couchdb)。 然后,您认为至少有两个资产用于:

  • 数据库文件
  • 日志文件

让我们进一步说你想保持db-files的私有性,但希望公开日志文件以供以后处理。

就我的文档而言,你有两个选择:

  1. 第一个选项

    • 为db-image
    • 中的log-和db-文件定义托管卷
    • 将这些导入到第二个容器中(您将获得这两个容器)并使用日志
  2. 第二个选项

    • 使用日志的托管卷创建数据容器
    • 仅为db-files创建具有托管卷的db-image
    • 在运行db-image
    • 时从数据容器导入日志卷
  3. 两个问题:

    1. 两个选项是否真的有效/可能?
    2. 有什么更好的方法呢?
    3. br volker

1 个答案:

答案 0 :(得分:1)

问题1的答案是,是的,两者都是有效的。

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

关键任务

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

以数据库文件为例,您可以对这些步骤进行成像:

  1. 创建可靠的磁盘,例如定期备份的NFS
  2. 将此磁盘附加到Docker主机
  3. 将此磁盘绑定到我的数据库容器中,然后将数据库文件写入此磁盘。
  4. 因此,按照上面的示例,假设我创建了一个可靠的磁盘,该磁盘通过NFS共享并安装在/reliable/disk的Docker主机上。要在我的数据库中使用它,我将运行以下Docker命令:

    docker run -d -v /reliable/disk:/data/db my-database-image

    这样我知道数据库文件被写入可靠的存储。即使我丢失了我的Docker主机,我仍然会拥有数据库文件,并且可以通过在可以访问NFS共享的另一台主机上运行我的数据库容器来轻松恢复。

    您可以对数据库日志执行完全相同的操作:

    docker run -d -v /reliable/disk/data/db:/data/db -v /reliable/disk/logs/db:/logs/db my-database-image

    此外,您可以轻松地将这些卷绑定到其他容器中以执行单独的任务。您可能需要考虑将它们作为只读方式绑定到其他容器中以保护您的数据:

    docker run -d -v /reliable/disk/logs/db:/logs/db:ro my-log-processor

    如果这是一个关键任务系统,这将是我推荐的方法。

    不是关键任务

    如果系统不是关键任务且您可以容忍更高的数据丢失潜力,那么我会查看Docker Volume API,它精确地用于您想要做的事情:管理和创建数据卷应该活在容器的生命周期之外。

    docker volume命令的优点在于它可以让你创建命名卷,如果你把它们命名得好,那么人们可以很清楚它们的用途:

    docker volume create db-data docker volume create db-logs

    然后,您可以从命令行将这些卷安装到容器中:

    docker run -d -v db-data:/db/data -v db-logs:/logs/db my-database-image

    这些卷将在容器的生命周期之后存活,并且如果您的Docker主机存储在文件系统中。您可以使用:

    docker volume inspect db-data

    查找数据的存储位置,并根据需要备份该位置。

    您可能还希望查看类似Docker Compose的内容,这样您就可以在一个文件中声明所有内容,然后通过一个命令创建整个环境。