活动介绍

容器的持续部署、交付与日志监控

发布时间: 2025-08-15 00:20:09 订阅数: 1
PDF

Docker容器技术与实践指南

# 容器的持续部署、交付与日志监控 ## 1. 持续部署与交付 ### 1.1 持续交付与持续部署的概念 持续交付是持续集成向生产环境的延伸。工程师在开发环境做出更改后,经过测试,只需点击按钮即可将更改部署到生产环境。而持续部署更进一步,它会自动将通过测试的更改推送到生产环境进行部署。 ### 1.2 从持续集成到持续部署的实现 可以通过将镜像推送到生产镜像仓库,并将运行中的容器迁移到新镜像来实现从持续集成到持续部署的扩展。在不中断服务的情况下迁移镜像,需要先启动新容器,重新路由流量,再停止旧容器。安全实现这一过程的方法有蓝绿部署和渐进式部署等。实现这些技术通常会使用内部工具,不过像 Kubernetes 这样的框架也提供了内置解决方案,未来市场上可能还会出现专业工具。 ### 1.3 容器生产部署的选择 容器托管有多种生产级别的选择,最佳选择取决于系统的规模、复杂性以及在部署和维护上愿意投入的精力和资金。小型部署可以简单地在云虚拟机上运行 Docker 引擎,但大规模部署时维护负担较大。可以使用 Kubernetes 和 Mesos 等系统,或者选择 Giant Swarm、Triton 或 ECS 等专业托管服务来减轻负担。 ## 2. 日志与监控 ### 2.1 日志与监控的重要性 对于任何非平凡系统的正常运行和有效调试,对运行中的容器进行有效的监控和日志记录至关重要。在微服务架构中,由于机器数量增加,日志和监控变得更加重要。考虑到容器的短暂性,调试问题时容器可能已不存在,因此集中式日志是不可或缺的工具。 ### 2.2 代码获取 相关代码可在 GitHub 上获取。可以使用 v0 标签检出本章开始时的代码: ```bash $ git clone -b v0 \ https://github.com/using-docker/logging/ ``` 后续标签代表代码在本章中的进展,也可以从 GitHub 项目的 Releases 页面下载任何标签的代码。 ### 2.3 Docker 默认日志记录 如果不指定任何参数或安装任何日志记录软件,Docker 会记录发送到 STDOUT 和 STDERR 的所有内容。可以使用 `docker logs` 命令检索日志,例如: ```bash $ docker run --name logtest debian sh -c 'echo "stdout"; echo "stderr" >>2' stderr stdout $ docker logs logtest stderr stdout ``` 使用 `-t` 参数可以获取时间戳: ```bash $ docker logs -t logtest 2015-04-27T10:30:54.002057314Z stderr 2015-04-27T10:30:54.005335068Z stdout ``` 使用 `-f` 参数可以流式传输运行中容器的日志: ```bash $ docker run -d --name streamtest debian \ sh -c 'while true; do echo "tick"; sleep 1; done;' 13aa6ee6406a998350781f994b23ce69ed6c38daa69c2c83263c863337a38ef9 $ docker logs -f streamtest tick tick tick tick tick tick ... ``` 还可以通过 Docker 远程 API 实现相同功能。如果使用 Docker Machine,可以执行以下操作: ```bash $ curl -i --cacert ~/.docker/machine/certs/ca.pem \ --cert ~/.docker/machine/certs/ca.pem \ --key ~/.docker/machine/certs/key.pem \ "https://$(docker-machine ip default):2376/containers/\ $(docker ps -lq)/logs?stderr=1&stdout=1" tick tick tick ... ``` 需要注意的是,Mac OS 上 `curl` 的使用略有不同,可能需要创建包含 `ca.pem` 和 `key.pem` 信息的单个证书。 ### 2.4 Docker 默认日志记录的缺点 默认日志记录只能处理 STDOUT 和 STDERR,如果应用程序只记录到文件,就会出现问题。而且没有日志轮转功能,如果使用像 `yes` 这样的应用程序让容器持续运行,容器会很快耗尽磁盘空间,例如: ```bash $ docker run -d debian yes ba054389b7266da0aa4e42300d46e9ce529e05fc4146fea2dff92cf6027ed0c7 ``` ### 2.5 其他日志记录方法 可以使用 `docker run` 的 `--log-driver` 参数启动其他日志记录方法,启动 Docker 守护进程时传递 `--log-driver` 参数可以更改默认日志记录器。日志记录器的可能值如下表所示: | 日志记录器 | 说明 | | --- | --- | | json-file | 前面介绍的默认日志记录方式 | | syslog | syslog 驱动,稍后会详细介绍 | | journald | systemd 日志的驱动 | | gelf | Graylog 扩展日志格式(GELF)驱动 | | fluentd | 将日志消息转发到 fluentd | | none | 关闭日志记录 | 关闭日志记录在某些情况下很有用,例如上述 `yes` 命令的示例。 ### 2.6 聚合日志 无论使用哪种日志记录驱动,都只能提供部分解决方案,尤其是在多主机系统中。我们希望将所有日志(可能跨主机)聚合到一个位置,以便运行分析和监控工具。有两种基本方法: 1. 在所有容器内运行一个辅助进程作为代理,将日志转发到聚合服务。 2. 在主机上或单独的独立容器中收集日志,并转发到聚合服务。 第一种方法虽然可行,但会使镜像变大,不必要地增加运行进程的数量,因此这里只考虑第二种方法。从主机访问容器日志有以下几种方式: 1. 使用 Docker API 以编程方式访问日志,这种方法的优点是官方支持,但使用 HTTP 连接会有一些开销。下一节将介绍使用 Logspout 实现的示例。 2. 如果使用 syslog 驱动,可以使用 syslog 功能自动转发日志。 3. 直接从 Docker 目录访问日志文件。 如果应用程序坚持将日志记录到文件而不是 STDOUT 或 STDERR,可以参考“处理记录到文件的应用程序”部分的解决方法。 ### 2.7 使用 ELK 进行日志记录 为 identidock 应用程序添加日志记录功能,将使用 ELK 栈,即 Elasticsearch、Logstash 和 Kibana: - **Elasticsearch**:一个具有近实时搜索功能的文本搜索引擎,设计用于轻松跨节点扩展以处理大量数据,非常适合搜索大量日志数据。 - **Logstash**:用于读取原始日志,进行解析和过滤,然后将其发送到其他服务(如索引或存储,这里将转发到 Elasticsearch)。它支持多种输入和输出类型,以及各种应用程序日志的预定义解析器。 - **Kibana**:基于 JavaScript 的 Elasticsearch 图形界面,可用于运行 Elasticsearch 查询并以各种图表形式可视化结果,还可以设置仪表盘以快速了解系统状态。 #### 2.7.1 搭建 ELK 栈 基于上一章的 `prod.yml` 在本地运行 ELK 栈。理想情况下,应将 ELK 容器移动到单独的主机以保持关注点分离,但为了简单起见,本章将所有内容放在一个主机上。 首先创建一个新文件 `prod-with-logging.yml`,内容如下: ```yaml proxy: image: amouat/proxy:1.0 links: - identidock ports: - "80:80" environment: - NGINX_HOST=45.55.251.164 - NGINX_PROXY=http://identidock:9090 identidock: image: amouat/identidock:1.0 links: - dnmonster - redis environment: ENV: PROD dnmonster: image: amouat/dnmonster redis: image: redis logspout: image: amouat/logspout-logstash volumes: - /var/run/docker.sock:/tmp/docker.sock ports: - "8000:80" ``` 需要将 IP 地址替换为自己主机的 IP,也可以将
corwn 最低0.47元/天 解锁专栏
赠100次下载
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
赠100次下载
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

工作流版本控制:管理Coze工作流变更的最佳实践与策略

![工作流版本控制:管理Coze工作流变更的最佳实践与策略](https://www.mssqltips.com/tipimages2/6683_resolve-git-merge-conflict-ssis-projects.001.png) # 1. 工作流版本控制概述 在IT项目管理和软件开发的实践中,工作流版本控制是确保项目质量、提高团队协作效率的关键环节。工作流版本控制涉及到文档、代码、配置文件等多种工作产品的版本管理,它通过记录每一次变更,实现了在多变的开发环境中维护项目的稳定性和可追溯性。 版本控制不仅仅是一个简单的“保存”功能,它还涉及到变更的记录、分支的管理、合并策略的选

【MATLAB并行计算速成】:如何加速数学模型构建,提升计算效率

![《MATLAB教程》数学建模可学](https://img-blog.csdnimg.cn/direct/8652af2d537643edbb7c0dd964458672.png) # 1. MATLAB并行计算基础 MATLAB是一种高性能的数值计算环境和编程语言,其并行计算功能允许用户执行复杂的运算并显著提高运算效率。在本章中,我们将介绍并行计算的基础知识,并探讨如何在MATLAB中实施并行策略。 ## 1.1 MATLAB并行计算的优势 MATLAB的并行计算能力为工程师和科学家提供了一个强大的工具,使其能够处理大型数据集和复杂计算任务。与传统的串行计算相比,MATLAB的并行

从理论到实践:遗传算法的MATLAB实现与应用深度解析

![遗传算法GA_MATLAB代码复现](https://d3i71xaburhd42.cloudfront.net/1273cf7f009c0d6ea87a4453a2709f8466e21435/4-Table1-1.png) # 1. 遗传算法基础理论介绍 遗传算法(Genetic Algorithms, GA)是进化计算的一种,受到达尔文生物进化理论的启发,通过自然选择、遗传、突变等操作模拟生物进化过程。它被广泛应用于优化和搜索问题中。本章将介绍遗传算法的核心概念和基础理论,为理解后续内容打下坚实的基础。 ## 1.1 遗传算法的基本原理 遗传算法的基本原理借鉴了生物的遗传和自然

【coze工作流的性能优化】:确保流畅的编辑体验

![【coze工作流的性能优化】:确保流畅的编辑体验](https://docs.toonboom.com/es/help/harmony-22/essentials/Resources/Images/HAR/Stage/Interface/default-workspace-essentials.png) # 1. Coze工作流性能优化概述 ## 1.1 性能优化的必要性 在现代的IT环境中,性能优化是确保企业级应用流畅运行的关键。Coze工作流作为核心的业务处理工具,其性能直接影响到业务的响应速度和用户体验。随着业务量的增长和数据量的扩大,性能问题愈发凸显,因此对Coze工作流进行性能

教育领域应用AI心理咨询师:预防青少年心理健康问题的策略

![教育领域应用AI心理咨询师:预防青少年心理健康问题的策略](https://www.sigs.tsinghua.edu.cn/_upload/article/images/64/c7/197dfee6471ea164aba92e1b8313/caa7a1c8-373b-4708-9509-45fbd6429932.png) # 1. AI心理咨询师的教育应用概述 随着人工智能技术的不断进步,AI心理咨询师作为一种新型的教育应用正在逐步走进人们的视野。本章将对AI心理咨询师在教育领域的应用进行概述,为读者提供一个关于这一技术应用的基本认识框架。 首先,AI心理咨询师依托强大的数据处理能力

Coze扣子数据同步与复制:保持一致性与高效复制的秘籍

# 1. Coze扣子数据同步与复制基础 ## 数据同步与复制的基本概念 在探讨Coze扣子数据同步与复制技术之前,我们首先要了解这两个基础概念的含义。数据同步是指在多个数据存储系统之间保持数据状态一致的过程,确保数据的一致性、完整性和可用性。而数据复制则是一种数据同步的实现方式,它通过创建数据的副本,将数据从一个源点复制到一个或多个目的地,保证数据能够被快速访问和使用。 ## 数据同步与复制的必要性 随着业务的全球化和数据量的爆炸性增长,数据同步与复制技术变得愈发重要。它们可以提高数据的可靠性,确保当一个系统发生故障时,其他系统能够接管工作负载,保证业务的连续性。此外,数据同步与复制

【Matlab控制系统设计】:从理论到实践的工程实践

# 1. Matlab控制系统设计概述 在现代工程领域,控制系统的设计与分析是实现自动化和精确控制的关键技术。Matlab作为一款强大的数学计算软件,提供了专门的工具箱来支持控制系统的设计与仿真,成为了工程师和研究人员的首选工具。 ## 1.1 控制系统设计的重要性 控制系统设计的目标是确保系统的性能满足特定的技术要求,比如稳定性、响应速度、准确性等。在设计过程中,工程师需要考虑系统的各种动态特性,并通过数学建模和仿真来优化控制策略。 ## 1.2 Matlab在控制系统设计中的角色 Matlab的控制系统工具箱(Control System Toolbox)提供了丰富功能,从基础的系统

【光伏电池与储能系统仿真】:新能源背景下的应用,深度分析与策略

![【光伏电池与储能系统仿真】:新能源背景下的应用,深度分析与策略](https://media.springernature.com/lw1200/springer-static/image/art%3A10.1038%2Fs41560-018-0318-6/MediaObjects/41560_2018_318_Fig1_HTML.png) # 1. 光伏电池与储能系统仿真概述 在能源领域中,光伏电池和储能系统作为绿色能源的重要组成部分,近年来在技术革新和环境保护方面发挥了巨大作用。随着新能源需求的激增,仿真技术作为预测和优化这些系统性能的关键手段,越来越受到重视。本章首先为读者提供光伏

【Coze工作流复制挑战攻略】:复杂场景下的复制问题,一次性解决!

![【Coze工作流复制挑战攻略】:复杂场景下的复制问题,一次性解决!](http://www.filez.com/cms/api/image/3929) # 1. Coze工作流复制概念精讲 ## 1.1 复制技术概述 在信息科技领域,复制(Replication)是一种保障数据可用性、一致性和容错性的核心技术。复制技术广泛应用于数据库系统、分布式存储、消息队列和各种中间件中。通过数据的副本来提高系统的可靠性和性能,尤其在数据量大、访问量高的场景下,复制技术是不可或缺的一部分。 ## 1.2 Coze工作流复制的特点 Coze工作流是一种先进的数据复制解决方案,它支持高可用性、高一致性的

【Matlab代码重用秘诀】:编写高效可复用函数与模块

![30天内精通Matlab](https://didatica.tech/wp-content/uploads/2019/10/Script_R-1-1024x327.png) # 1. Matlab代码重用的基础 ## 简介 在Matlab开发中,代码重用是提高开发效率、保证代码质量的重要手段。本章将介绍Matlab代码重用的基础知识,为后续章节的深入探讨打下基础。 ## 代码重用的重要性 代码重用意味着在不同的项目中使用已经开发和验证过的代码片段,这样可以减少重复工作,提升开发效率,并且有助于维护代码的稳定性和一致性。在Matlab中,良好的代码重用习惯可以让用户更好地组织代码、提高