微容器与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日志并进行多维度分析。
目录
相关文章
|
26天前
|
存储 Kubernetes 监控
提升日志管理效率:掌握CKA认证中的边车容器技巧
提升日志管理效率:掌握CKA认证中的边车容器技巧
35 0
|
1天前
|
Cloud Native Linux 开发者
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
【Docker】Docker:解析容器化技术的利器与在Linux中的关键作用
|
3天前
|
存储 Kubernetes Docker
Kubernetes(K8S)集群管理Docker容器(概念篇)
Kubernetes(K8S)集群管理Docker容器(概念篇)
|
4天前
|
存储 Ubuntu 安全
Docker容器常用命令
Docker容器常用命令
18 1
|
4天前
|
监控 Docker 容器
Docker从入门到精通:Docker log 命令学习
了解 Docker 日志管理对容器监控至关重要。`docker logs` 命令用于查看和管理容器日志,例如,`docker logs <container_name>` 显示容器日志,`-f` 或 `--follow` 实时跟踪日志,`--tail` 显示指定行数,`--timestamps` 添加时间戳,`--since` 按日期筛选。Docker 支持多种日志驱动,如 `syslog`,可通过 `--log-driver` 配置。有效管理日志能提升应用程序的稳定性和可维护性。
8 0
|
9天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
|
18天前
|
Linux Docker 容器
docker 容器常用命令
docker 容器常用命令
14 0
|
18天前
|
Linux Shell 虚拟化
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
linux 部署docker容器虚拟化平台(二)--------docker 镜像制作方法
28 0
|
18天前
|
存储 Linux Shell
centos 部署docker容器 安装 、基本使用方法(一)
centos 部署docker容器 安装 、基本使用方法(一)
33 0
|
27天前
|
Kubernetes 网络协议 Docker
Docker 容器的DNS
Docker 容器的DNS
28 1