gpt4 book ai didi

用于数据库、日志和指标的 Docker 卷容器

转载 作者:行者123 更新时间:2023-12-02 18:15:48 25 4
gpt4 key购买 nike

我有一个使用嵌入式数据库的应用程序,它还会为以下目录结构生成日志和原始指标:

/opt/myapp/data/
database/
logs/
raw_metrics/

我正在学习 Docker 并尝试“Dockerize”这个应用程序,并试图找到一个安装/卷解决方案来为我实现以下目标:

  • 无论我运行了多少个 myapp 容器实例,嵌入式数据库都存储在相同的装载卷中。换句话说,所有容器实例都将它们的数据写入共享的 database/ 卷;和
  • 我也更喜欢我的日志和原始指标(即:所有容器实例将日志/指标写入同一个共享卷),除了在这里我需要能够区分每个容器的日志和指标数据.换句话说,我需要知道容器 X 生成了特定的日志消息,或者容器 Y 在 7 秒内响应了请求,等等。

我想知道 Docker 领域的标准程序是什么。在阅读官方 Docker 文档以及 this article on Docker Volumes 之后我的暂定方法是:

  1. 创建一个数据卷容器并将其挂载到主机上的/opt/myapp
  2. 然后我可以配置我的嵌入式数据库以从 /opt/myapp/database 读取数据库内容/将它们写入到 /opt/myapp/database,并且我相信(如果我明白我的意思)没看错),所有容器实例将共享同一个数据库
  3. 以某种方式将容器 ID 或其他一些唯一标识符注入(inject)每个容器实例,并重构我的日志记录和指标代码以在生成日志或原始指标时包含注入(inject)的 ID,这样我就可以拥有一个 /opt/myapp/logs/containerX.log 文件,/opt/myapp/logs/containerY.log 文件等。但我对标准是什么很感兴趣Docker 容器之间的日志聚合实践在这里!

此外,可以说更重要的是,我不确定这个解决方案是否适用于多主机场景,在这种情况下,我有一个运行数十个 myapp 容器的 Swarm/集群在多个主机上。我的数据卷容器会神奇地同步所有主机上的 /opt/myapp 卷吗?如果不是,那么无论它们运行在什么主机上,为容器安装共享卷的解决方案是什么?提前致谢!

最佳答案

有很多好问题。以下是我的一些回答。

  1. Docker 使用的默认日志记录驱动程序是 json-file。这将以 json 格式捕获 stdout 和 stderr。还有其他日志记录驱动程序(如 syslog、fluentd、LogEntries 等)可以发送到中央日志服务器。使用中央日志也避免了我们自己维护卷的问题。此处捕获所有 Docker 日志记录驱动程序(https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers)
  2. 如果您将 Swarm 模式与服务一起使用,则存在服务日志记录的概念,其中服务日志包含与该服务关联的所有容器相关联的日志。 ( https://docs.docker.com/engine/reference/commandline/service_logs/ )
  3. Docker 日志默认包含由日志驱动程序添加的容器 ID。我们可以使用日志选项自定义它(https://docs.docker.com/engine/admin/logging/log_tags/)
  4. 为了跨容器共享数据,比如数据库,如果容器在同一个主机上,我们可以使用基于主机的卷。这不会跨节点工作,因为没有自动同步。为了跨节点共享容器数据,我们可以使用共享文件系统(如 nfs、ceph、gluster)或 Docker 卷插件(ebs、gce)

关于用于数据库、日志和指标的 Docker 卷容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44518131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com