微容器与Docker日志

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本文讲的是微容器与Docker日志,【编者的话】Travis Reeder,Iron.io的联合创始人和首席技术官,在2016年4月12日的Docker纽约聚会中作了关于微容器的主题演讲。此外,来自Sumo Logic的Hermann Hesse谈了有关Docker日志的话题。
本文讲的是微容器与Docker日志 【编者的话】Travis Reeder,Iron.io的联合创始人和首席技术官,在2016年4月12日的Docker纽约聚会中作了关于 微容器 的主题演讲。此外,来自Sumo Logic的Hermann Hesse谈了有关Docker日志的话题。

microcontainers-banner-1024x419.png

Slack-for-iOS-Upload-1024x641.jpg

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日志
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
11天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
158 93
|
1月前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
264 77
|
13天前
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
86 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
25天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
112 35
|
1月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
12天前
|
数据库 Docker 容器
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
40 17
|
24天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
12天前
|
运维 Java 虚拟化
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
《docker基础篇:1.Docker简介》,包括Docker是什么、容器与虚拟机比较、能干嘛、去哪下
76 12
|
13天前
|
Kubernetes Linux 虚拟化
入门级容器技术解析:Docker和K8s的区别与关系
本文介绍了容器技术的发展历程及其重要组成部分Docker和Kubernetes。从传统物理机到虚拟机,再到容器化,每一步都旨在更高效地利用服务器资源并简化应用部署。容器技术通过隔离环境、减少依赖冲突和提高可移植性,解决了传统部署方式中的诸多问题。Docker作为容器化平台,专注于创建和管理容器;而Kubernetes则是一个强大的容器编排系统,用于自动化部署、扩展和管理容器化应用。两者相辅相成,共同推动了现代云原生应用的快速发展。
77 11
|
30天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
140 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档