微容器与Docker日志

本文讲的是微容器与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后删除包管理中的包缓存。

我们已经为每种语言准备好了这种小镜像:

对大多数的语言生成镜像只需以下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日志

时间: 2024-08-01 02:38:57

微容器与Docker日志的相关文章

微容器:更小的,更轻便的Docker容器

本文讲的是微容器:更小的,更轻便的Docker容器,[编者的话]本文介绍了微容器的概念和好处,并用一些例子介绍了如何构建微镜像,从scratch到Alpine Linux,并推荐了一些已有的基础微镜像,方便为几乎所有主流语言的应用构建微镜像.本文也指出了构建微镜像的基本原理:将构建时依赖和运行时依赖分开,构建时所用的镜像包含所有构建所用的工具,它可以比较大,但运行时的基础镜像应该仅包含运行时依赖.使用微容器,no going back! Docker 使你能把你的应用和应用的依赖打包到一个良好的

基于微服务和Docker容器技术的PaaS云平台架构设计

本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.

Spring Boot与Docker(四):额外的微服务、更新容器、Docker Compose和负载均衡

本文讲的是Spring Boot与Docker(四):额外的微服务.更新容器.Docker Compose和负载均衡,[编者的话]本篇是<使用Spring Boot和Docker构建微服务架构>系列的第四篇,本篇我们我们将添加一些额外的服务/容器,并且更新容器,采用Docker Compose以及使用HAProxy容器进行负载均衡.原文作者为3Pillar环球旗下美国Adbanced技术集团的总监Dan Greene,Dan有十八年的软件设计和开发经验,包括在电子商务.B2B集成.空间分析.S

中间件和微服务,Docker以及原生云架构的关系

微服务和Docker的发展势头 微服务和容器的主要目标是缩短软件开发时间,以及实现开发.部署以及运维的更大灵活性.为什么它过去几个月的发展势头这么猛?因为几乎所有科技巨头企业如亚马逊,谷歌,Facebook,Netflix都在这里激烈竞争. 微服务就像是一个面向服务的架构(SOA):这是一种架构和供应商技术分别独立的设计理念.因此,目前并没有明确的界定标准或规范.你永远需要在和其他人讨论之前定义你所理解的微服务术语.每个人都有不同的定义.在这篇文章中微服务是被开发,部署和独立缩放的服务.它们可以

Docker 日志的5个最佳实践

本文讲的是Docker 日志的5个最佳实践[编者的话]微服务和容器之间契合得很好,但日志记录却成了个问题.设置监控时必须要考虑到这个问题. [烧脑式Kubernetes实战训练营]本次培训理论结合实践,主要包括:Kubernetes架构和资源调度原理.Kubernetes DNS与服务发现.基于Kubernetes和Jenkins的持续部署方案 .Kubernetes网络部署实践.监控.日志.Kubernetes与云原生应用.在CentOS中部署Kubernetes集群.Kubernetes中的

微服务和 Docker 为什么变得如此重要呢?

[原文编者的话] 本文主要讲述Docker和微服务的发展,以及Cisco对于Docker和微服务的看法.最后还提到了Docker的libnetwork,以及Cisco的开源项目Contiv,Contiv是一种通用型网络插件,用来处理多主机系统容器集群网络的使用. 在过去的18个月里,我们见证了应用程序构建.打包.传送.部署和实例化方式的快速转变.这种变化的驱动力来源于开发人员对于简化开放方式的需求以 及着眼于以应用为中心的IT视角的转变.通过飞速发展的Docker以及基于体系结构来运行应用程序的

Docker日志自动化: ElasticSearch、Logstash、Kibana以及Logspout

本文讲的是Docker日志自动化: ElasticSearch.Logstash.Kibana以及Logspout,[编者的话]本文主要介绍了如何使用ElasticSearch.Logstash.Kibana和Logspout技术栈来部署自动化的日志系统. You, too, could Logstash. 快速念五遍这个题目!不过说实话,我其实并不确定该给这篇文章起个什么样的名字才能确保人们可以找到它. 这篇文章是基于Evan Hazlett's article on running the

Docker日志收集最佳实践

云栖TechDay31期,阿里云容器服务技术专家戒空给大家带来Docker日志收集最佳实践的演讲.本文主要从传统日志处理开始谈起,接下来着重分析Docker日志处理,包括stdout和文件日志,其中还有fluentd-pilot,接着分享了日志存储方案Elasticsearch.graylog2和SLS,最后对正确写日志给出了建议.   以下是精彩内容整理: 传统日志处理 说到日志,我们以前处理日志的方式如下: 日志写到本机磁盘上 通常仅用于排查线上问题,很少用于数据分析 需要时登录到机器上,用

《ELK Stack权威指南(第2版)》一3.8 Docker日志

3.8 Docker日志 Docker是目前大规模互联网基础架构解决方案中最热门的技术.它带给运维工程师一个截然不同的思考角度和工作方式. 就日志层面看,Docker最大的影响在于:其最佳实践要求一个容器内部只有一个生命周期随时可以消亡的服务进程.这也就意味着:传统的写入磁盘,固定采集方式的日志系统,无法正常发挥作用.所以,在容器服务中,记录日志需要采用另外的方式.本节将介绍其中最常见的两种:记录到主机磁盘,或通过logspout收集. 3.8.1 记录到主机磁盘 默认情况下,Docker会将容