docker 卷容器策略

标签 docker docker-volume data-containers

假设您正在尝试 dockerise 数据库(例如 couchdb)。
然后,您至少考虑了两种 Assets 的交易量:

  • 数据库文件
  • 日志文件

  • 让我们进一步假设您希望将 db-files 保持为私有(private),但希望公开日志文件以供以后处理。

    据我不了解文档,您有两种选择:
  • 第一个选项
  • 在 db-image
  • 中为日志文件和数据库文件定义托管卷
  • 将它们导入第二个容器(您将同时获得)并使用日志
  • 第二种选择
  • 为日志创建带有托管卷的数据容器
  • 仅为 db-files 创建带有托管卷的 db-image
  • 运行 db-image
  • 时从数据容器导入日志卷

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

  • 沃尔克

    最佳答案

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

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

    关键任务

    如果您绝对不能丢失数据,那么我建议您将可靠的磁盘绑定(bind)到数据库容器中。绑定(bind)挂载本质上是将 Docker Host 文件系统的一部分挂载到容器中。

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

  • 创建一个可靠的磁盘,例如定期备份的 NFS
  • 将此磁盘附加到您的 Docker 主机
  • 将此磁盘绑定(bind)到我的数据库容器中,然后将数据库文件写入此磁盘。

  • 所以按照上面的例子,假设我创建了一个可靠的磁盘,它通过 NFS 共享并安装在我的 Docker 主机上 /reliable/disk .要将它与我的数据库一起使用,我将运行以下 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
    此外,您可以轻松地将这些卷绑定(bind)到其他容器中以执行单独的任务。您可能需要考虑将它们以只读方式绑定(bind)到其他容器中以保护您的数据:
    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 之类的内容。这将允许您在一个文件中声明所有这些,然后通过一个命令创建整个环境。

    关于docker 卷容器策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608999/

    相关文章:

    java - jetty worker 。 Spring 申请。设置和获取环境变量

    docker - 如何在GKE Pod中设置时区

    docker - GitLab管道未在脚本部分中为Docker镜像执行命令

    python-2.7 - 使用 docker-py 从容器运行和共享主机文件夹

    docker - 在 docker 数据容器与卷中部署 Web 应用程序

    C#:通常首选哪种类型的数据容器?

    docker - 在docker集群中运行多个身份服务器实例

    docker - Docker卷还原

    Docker Compose - 如何存储数据库数据?