阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

对容器中应用程序的配置和日志的认知

209次阅读
没有评论

共计 2074 个字符,预计需要花费 6 分钟才能阅读完成。

近日在迁移应用到 Docker 的过程中,纠结于配置和日志处理,通过查阅网友们的对此的讨论、官方镜像的处理手法,结合实践,对此有所认知,欢迎斧正。以下内容,均是基于测试 / 生产环境,不涉及开发环境。

关于配置

通过几个开源项目(Wordpress,MySQL)的官方镜像处理方式,来窥探一下关于配置参数的处理手法。

  • 通过“环境”传递配置参数到容器。
  • 容器内通过 ENTRYPOINT 指令配置的脚本接收环境变量,并按格式写入配置文件。
  • ENTRYPOINT 脚本通过 exec 指令启动 CMD 指令。

观点

  • “环境”是传递数据到容器内应用程序的常规手法,但数据项太多时,会给维护造成困扰。
  • 通过“ENTRYPOINT”指令配置的脚本,完成配置的初始化是一个合理的选择。
  • 配 置初始化。实践中,配置项往往规模较大,被集中管理(zookeeper/etcd),需要区分部署的环境(测试 / 生产)。在此场景下,将“部署环境标 识”通过“环境变量”传递到容器,在容器启动时,通过 entrypoint 脚本根据“环境标识”和“应用程序配置项需求”(应用程序一般会有关于配置的 schema 文件,描述了需要哪些配置项),从配置管理设施中获取配置数据,完成配置的初始化后,启动应用程序。
  • 配置项变更。配置项的变更一般涉及两项:如何捕获这些更新(watch 配置管理设施,由谁来 watch?),以及如何让新配置生效(一般意味着进程轮换,如 nginx;或者 php 项目中清理 apc 缓存)。在 Docker 场景下,应当使用能与编排工具通信的设施负责捕获变更,并将变更转换为与镜像相关,提交给编排工具,由编排工具启动新容器轮换掉老容器,完成 配置生效。那些企图在容器内部捕获配置变更,然后使配置生效的处理手法,不符合 Docker 的设计精神,而且往往复杂度高

 

关于日志

《使用 Fluentd 管理 Docker 日志》一文对 Docker 日志的讨论,受益匪浅。

观点:

  • 从当前实际来看,通过挂载 volume 到容器,应用程序将日志写入 volume,然后通过宿主机上的 agent 实现收集,更具可操作性,与主机模型的日志处理几乎一致。当然,正如作者所言,这需要应用程序将日志写入 volume。如果我们将日志视作业务数据,将 Volume 作为存储的话,那这也合乎情理

 

对于 web 服务器来说,访问日志是其生产的内容,对于日志分析系统来说,访问日志就是业务数据。

  • Docker 收集容器内应用程序的 stdout、stderr,并存储为日志,只是一种实现。但它并不是(至少现在不是)为大规模日志(如 web 服务器)而设计,如果这种机制不满足需求,我们就需要辩证的使用它。
  • 如 果仍坚持使用 Docker 的日志机制(通过 stdout,stderr 收集应用程序日志),在制定 rotate 机制时,可考虑容器的生命周期,或许以日志 的轮转周期,启动新容器替换旧容器更符合 docker 场景。但这对于会产生大量日志的应用来说,也会带来问题:以什么样的频率轮换?
  • 如果使用 Docker 的日志机制,在收集时可考虑动态的方案。以 Flume 机制为例:主机上监听 Docker 事件,以容器 label 区分业务类型,当监听到 start 事件时,动态生成配置文件,并启动 agent。日志数据通过 docker logs -f 容器 ID 获取。当监听到 stop 事件,在日志采集完后,清理掉 agent 及相关配置。这里有几个问题:由于日志采集是异步的,如何认定日志已经采集完?另外编排系统在何时删除掉被停止的容器,当容器停止被删除后,该容器的所有数据会被清理,如何协调它们?这引入了复杂度。

 

小结

容器的启用和销毁的成本低,在生命周期管理上,往往通过容器的轮换来处理一些原来需要精细化控制的细节,如果照搬主机的处理模式,会很难受,且格格不入。

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm 

Ubuntu 使用 VNC 运行基于 Docker 的桌面系统  http://www.linuxidc.com/Linux/2015-08/121170.htm

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm 

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm 

在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-09/122633.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计2074字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中