浅析Docker Compose

引言

Docker Compose是一个强大的工具,用于定义和管理多个Docker容器的应用程序。它简化了容器化应用程序的部署和管理过程,提供了一种简单而强大的方式来定义多个容器之间的关系和依赖关系。本文将深入探讨Docker Compose的概念、优缺点、应用场景和实践,帮助读者更好地理解和应用这一工具。

介绍

Docker Compose是一个基于YAML文件的工具,用于定义和运行多个Docker容器的应用程序。它允许用户通过一个文件来定义容器之间的关系、网络配置、卷挂载等,并提供了一组命令来管理这些容器。Docker Compose的核心概念包括服务(services)、网络(networks)和卷(volumes)。服务定义了一个容器的配置和运行参数,网络定义了容器之间的通信方式,卷定义了容器的数据存储方式。

安装

安装Docker Compose之前一定要先安装Docker哟,并且要注意Docker版本和DockerCompose版本兼容问题,安装Docker文章可以参照我的这篇文章https://sssd.top/archives/1691833967856
docker版本对应.png
下面介绍如何安装Docker Compose,因为国内github网速较慢,这里推荐使用代理节点安装Docker Compose

#下载
curl -SL https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
#添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
#验证
docker-compose --version

优点

  • 简化部署:Docker Compose提供了一种简单的方式来定义和部署多个容器,使得应用程序的部署过程更加简洁和可重复。
  • 管理容器关系:通过定义服务之间的依赖关系和网络配置,Docker Compose可以自动管理容器之间的通信和协作,提高了应用程序的可靠性和可维护性。
  • 灵活性:Docker Compose支持灵活的配置选项,可以根据应用程序的需求进行定制,满足不同场景下的需求。
  • 可移植性:Docker Compose的配置文件可以在不同的环境中使用,使得应用程序能够在开发、测试和生产环境中无缝切换。

缺点

  • 学习曲线:对于初学者来说,Docker Compose的学习曲线可能较陡峭,需要一定的时间和精力来理解和掌握其概念和用法。
  • 依赖管理:在使用Docker Compose时,需要确保所使用的镜像和版本与配置文件中的要求一致,否则可能会导致应用程序无法正常工作。

应用场景

Docker Compose适用于各种场景,特别是多容器应用程序的部署和管理。以下是几个常见的应用场景:

  • 开发环境搭建:使用Docker Compose可以快速搭建开发环境,定义和管理多个容器,例如数据库、消息队列、缓存等,以支持开发人员的工作。
  • 协作开发:多人协作开发时,可以使用Docker Compose来定义和管理共享的开发环境,确保每个开发人员都在相同的环境中工作。
  • 测试环境部署:使用Docker Compose可以方便地在测试环境中部署应用程序,并进行集成测试和性能测试。
  • 生产环境部署:Docker Compose可以用于在生产环境中部署和管理应用程序,提供了一种可靠和可扩展的方式来运行容器化应用。

这里推荐Docker Compose常用命令学习可以通过: https://www.runoob.com/docker/docker-compose.html

实践

这里就来使用Docker Compose实践一个简单的容器监控邮件告警工具,使用使用cAdvisor和Prometheus来监控Docker容器的内存和CPU使用情况,并结合Alertmanager发送邮件告警。当然你也可以集成企业微信,钉钉或飞书这样的办公应用进行告警

  • 安装cAdvisor:cAdvisor是一个用于监控容器资源使用情况的开源工具。您可以通过以下命令安装cAdvisor。
  • 安装Prometheus:Prometheus是一个用于监控和报警的开源系统。您可以按照官方文档安装Prometheus,并配置其收集cAdvisor的指标数据。
  • 配置Alertmanager:Alertmanager是Prometheus的报警管理器,用于发送告警通知。您可以按照官方文档配置Alertmanager,设置邮件通知的相关参数。
  • 编写 docker-compose.yml 文件,并确保已经在同一目录下创建了 prometheus 和 alertmanager 两个文件夹
version: '3'
services:
  cadvisor:
    image: google/cadvisor:latest
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - 8080:8080

  prometheus:
    image: prom/prometheus:latest
    volumes:
      - ./prometheus:/etc/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
    ports:
      - 9090:9090
    depends_on:
      - cadvisor

  alertmanager:
    image: prom/alertmanager:latest
    volumes:
      - ./alertmanager:/etc/alertmanager
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
    ports:
      - 9093:9093
    depends_on:
      - prometheus

prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'cadvisor'
    static_configs:
      - targets: ['cadvisor:8080']
groups: 
  - name: example
    rules:
      - alert: HighCpuUsage
        expr: 100 - (avg by (container_name) (irate(container_cpu_usage_seconds_total{container_label_com_docker_compose_service=~"cadvisor.*"}[5m])) * 100) > 80
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: High CPU Usage

      - alert: HighMemoryUsage
        expr: (avg by (container_name) (container_memory_usage_bytes{container_label_com_docker_compose_service=~"cadvisor.*"}) / (container_memory_limit_bytes{container_label_com_docker_compose_service=~"cadvisor.*"})) * 100 > 80
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: High Memory Usage


上述示例配置中,CPU和内存的阈值分别设置为80%,当达到阈值时将触发告警。您可以根据实际需求调整阈值和告警规则。

alertmanager.yml

global:
  smtp_smarthost: 'your-smtp-server:port'
  smtp_from: 'your-email@example.com'
  smtp_auth_username: 'your-username'
  smtp_auth_password: 'your-password'

route:
  receiver: 'email-alert'

receivers:
- name: 'email-alert'
  email_configs:
  - to: 'recipient@example.com'

运行

docker-compose up -d

访问监控界面:打开浏览器,并通过以下链接访问各个服务的界面:
cAdvisor监控界面:http://localhost:8080
Prometheus界面:http://localhost:9090
Alertmanager界面:http://localhost:9093
确保能够通过相应的端口访问,并检查界面是否可用,这样一个简单监控工具就搭建完成啦!

我们可以来创建一个容器来测试,如果当cpu占用超过80%时,我们就可以收到邮件啦

docker run -d --name test-container -m 500M busybox sh -c "while true; do :; done"

docker警告邮件.png

作者:傻傻三多

出处:https://www.sssd.top/archives/1692253787965

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。