本文讲的是微容器与Docker日志,【编者的话】Travis Reeder,Iron.io的联合创始人和首席技术官,在2016年4月12日的Docker纽约聚会中作了关于微容器的主题演讲。此外,来自Sumo Logic的Hermann Hesse谈了有关Docker日志的话题。
Iron.io是微容器的一大支持者,微容器是指一种能满足完备处理任务的极简化Docker容器。我们已经看到微容器已经在软件架构师和开发人员中获得了一定的吸引力,因为其极小尺寸使它们容易通过Docker镜像仓库被下载和分发。微容器由于代码量,库和依赖都很少,从而降低了攻击面并使得底层操作系统更安全。
作为开发者,微容器需要我们调整创建容器的一些固化思维。与一开始将所有组件塞入容器不同,我们将从一个空容器开始,只添加需要的组件。
对于我们将要演示的小基础镜像来说,使用Scratch太重了-我们将使用Alpine Linux,它带有一个shell和一个包管理器。
现在,让我们建立一个以node为基础的镜像。所有我们要做的是加入node,没有别的了。为了使它更小一点,我们安装node后删除包管理中的包缓存。
我们已经为每种语言准备好了这种小镜像:
- Docker images:https://github.com/iron-io/dockers
- DockerWorker images:https://github.com/iron-io/dockerworker
对大多数的语言生成镜像只需以下4步:
包依赖: npm通常需要安装,除非我们在Docker容器中运行它。
docker run --rm -v "$PWD":/app -w /app iron/node:dev npm install
开发/测试:测试中,我们将使用刚刚创建的镜像运行node程序app.js。请注意,我们甚至不需要在本地安装node。
docker run --rm -v "$PWD":/app -w /app iron/node node app.js
构建镜像:现在,我们将创建一个简单dockerfile:
FROM iron/node
WORKDIR /app ADD . /app
ENTRYPOINT [ "node", "app.js" ]
然后,我们将构建它:
docker build -t USERNAME/myapp
推送镜像: 最后运行docker push:
docker push USERNAME/myapp
现在,你在dockerhub已经有了一个29MB的node容器,而不是644MB。
使用Go镜像会更小。如果你使用以下命令:
docker run treeder/hello
...你就可以看到镜像有多大:大约10MB。
进一步阅读微容器相关内容:
在Docker NYC接下来的演讲来自Hermann Hesse经理 - Sumo Logic的销售工程化。在2013年加入Sumo Logic之前,Hermann在BMC领导大规模自动化和监控解决方案的部署。
Docker日志的历史沿革
在Docker 1.7中,我们看到了引进-log-out参数,在这里我们可以将参数传递给日志驱动程序。你可以直接转发到本地Syslog聚合器,或到云日志服务。在1.8中,我们看到了json-file驱动器的更多选项。 json-file仍是默认的,并且包含一个长期存在的问题:它会填满你的磁盘。现在,json-file可以被配置了。
在1.9,许多容器可以共享一个日志驱动上的下游聚合器。但是,当这种情况发生时,该日志来自哪个容器?日志中不包含元数据 - 但是日志标签允许您使用容器元数据作为每条日志的一部分。
在Docker 1.10中,我们看到Syslog支持TCP+ TLS,但不幸的是有,有一个bug会使其中断工作(这bug尚未解决。)
无耻的做个广告:Sumo Logic即将推出云Syslog端点,这意味着你不需要为Syslog预置收集器。
日志变革的终点在哪?
记录驱动程序已经在去年迈出了很大的一步。该引擎提交协议是次优的,但它意味着更多的审查和驱动程序更稳定。还有一个GitHub上试图减少对第三方库依赖的issue。我们应该怎样记录日志?
事件:您将要列举所有正在运行的容器,开始收听事件流,然后对于每个正在运行且开始产生事件的容器收集事件项。配置:对于每个正在运行且开始产生事件的容器,我们调用inspect API。然后,我们得到一个JSON格式的日志。现在,该日志包含了我们所有的配置!
日志:对于每个正在运行且开始产生事件的容器,调用logs API,并获取该日志。
统计数据:对于每个正在运行且开始产生事件的容器,调用stats API打开一个流,从流中获取的JSON格式的数据作为监控日志。现在我们有监控 - 甚至是内存,CPU和磁盘!
主机和守护进程日志:您可以包括一个收集器作为主机镜像的一部分,或单独作为容器运行收集器。
我们喜欢这些API,但也有很多局限性。logs API与磁盘交互,这存在IO竞争,且很难做扩展。
构建一个包含事件,日志和统计数据的组合流是最终的梦想,无论是作为一个API调用来拉取数据,或作为一个注册API来监听数据。我们可以扩展#18604来实现这点吗?
更加无耻的做个广告 - Sumo Logic公布一个统一的日志和度量的平台。目前正处于初期阶段 - 没有全面上市。
原文链接:iron-io-cto-speaks-docker-nyc (翻译:高洪涛)
===========================================
译者介绍
高洪涛,当当网架构师,开源数据库分库分表中间件Sharding-JDBC作者。目前从事Docker相关调研工作。
原文发布时间为:2016-04-20
本文作者:gaohongtao
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:微容器与Docker日志