前面文章有提到过使用docker来快速拉起一个zabbix监控系统(详见:如何使用docker快速部署一个zabbix监控系统),但是要一个个执行docker启动命令去将对应的容器启动。如果要配置参数多,那敲启动命令就是一件让人心累的事情。而且敲完后若没有保存启动命令,后面的管理也是比较麻烦,并且如果容器数量较多,还要一个个手敲启动命令,这就非常的不方便。

所以为了解决这个问题,并且更加高效的启动一个zabbix监控系统。现在使用docker-compose这个容器编排工具来高效的启动zabbix监控系统。

1.  Docker-compose介绍

  • Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排, 并且提供了 scale (服务扩容) 的功能。
  • Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。
  • Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。
  • 使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
  • Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
  • Docker-Compose项目由Python编写,调用Docker服务提供的API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用Compose来进行编排管理。

2.  基础语法

Docker-compose就是通过docker-compose.yaml文件所定义的容器作为一个项目,从而进行docker容器的管理。下面就对docker-compose.yaml模板文件的常用基础语法进行一个简单的解释

2.1 container_name

Compose 的容器默认名称格式是:<项目名称><服务名称><序号>

虽然可以自定义项目名称、服务名称,但是如果你想完全控制容器的命名,可以使用这个标签指定:

比如我要制定一个mysql容器的名为“mysql-test”,那么

version: '3'

services:

mysql:

container_name: mysql-test

2.2 image

指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。

比如我要制定一个mysql容器,使用的镜像名为“mysql:8.0”,那么

version: '3'

services:

mysql:

image: mysql:8.0

2.3 depends_on

在使用 Compose 时,最大的好处就是少打启动命令,但是一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,必然会因为容器依赖问题而启动失败。

例如在没启动数据库容器的时候启动了应用容器,这时候应用容器会因为找不到数据库而退出,为了避免这种情况我们需要加入一个标签,就是 depends_on,这个标签解决了容器的依赖、启动先后的问题。

比如我要先启动一个MySQL,后启动nginx,那么

version: '3'

services:

nginx:

image: nginx:1.16.1

depends_on:

- mysql

mysql:

image: mysql:8.0

2.4 environment

这是设置镜像的环境变量,直接将变量定义到镜像里面,这样启动容器时会自动读取该环境变量

如启动一个MySQL容器,要设置它的root初始化密码为“123456”,那

version: '3'

services:

mysql:

image: mysql:8.0

environment:

MYSQL_ROOT_PASSWORD: 123456

2.5 ports

该参数是将宿主机的端口映射到容器端口,从而在宿主机访问对应的端口能访问到容器内。

如要讲MySQL容器的3306端口映射到宿主机的33060端口,那

version: '3'

services:

mysql:

image: mysql:8.0

ports:

-          “33060:3306”

2.6 volumes

挂载一个目录或者一个已存在的数据卷容器,可以直接使用 [HOST:CONTAINER] 这样的格式,或者使用 [HOST:CONTAINER:ro] 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统。

Compose的数据卷指定路径可以是相对路径,使用 . 或者
.. 来指定相对目录。

version: '3'

services:

mysql:

image: mysql:8.0

volumes:

-         
./data:/var/lib/mysql

-         
/var/log/mysql:/var/log/mysql

3.  安装docker-compose

选择对应版本下载安装包

https://github.com/docker/compose/releases?after=1.28.0

上传到服务器修改名称并授权

mv docker-compose-x86 docker-compose

chmod +x docker-compose

测试

./docker-compose –v

安装

mv docker-compose /usr/bin

4.  编写zabbix监控系统的docker-compose.yaml文件

version: '3.7'

services:

mysql:

container_name: mysql

image: mysql:latest

restart: always

environment:

MYSQL_DATABASE: zabbix

MYSQL_ROOT_PASSWORD: zabbix@2022

ports:

- "3306:3306"

volumes:

- /data/mysql:/var/lib/mysql

zabbix-server:

container_name: zabbix_server

image: zabbix/zabbix-server-mysql:latest

restart: always

depends_on:

- mysql

environment:

MYSQL_DATABASE: zabbix

MYSQL_PASSWORD: zabbix@2022

MYSQL_USER: root

DB_SERVER_HOST: 192.168.75.31

DB_SERVER_PORT: 3306

ports:

- "10051:10051"

volumes:

- /data/zabbix/alertscripts:/usr/lib/zabbix/alertscripts

- /data/zabbix/externalscripts:/usr/lib/zabbix/externalscripts

zabbix-web:

container_name: zabbix_web

image: zabbix/zabbix-web-nginx-mysql:latest

restart: always

depends_on:

- mysql

- zabbix_server

environment:

MYSQL_DATABASE: zabbix

MYSQL_PASSWORD: zabbix@2022

MYSQL_USER: root

DB_SERVER_HOST: 192.168.75.31

DB_SERVER_PORT: 3306

ZBX_SERVER_HOST: 192.168.75.31

ZBX_SERVER_PORT: 10051

ports:

- "8080:8080"

zabbix-agent:

container_name: zabbix_agent

image: zabbix/zabbix-agent:latest

restart: always

depends_on:

- mysql

- zabbix_server

environment:

ZBX_HOSTNAME: 192.168.75.31

ZBX_SERVER_HOST: 172.18.0.1

ports:

- "10050:10050"

5.  启动zabbix监控系统

别忘了安装docker!

编写好zabbix监控系统的docker-compose.yaml文件后,就可以启动系统了

Docker-compose up –d

如图所示,已成功启动

6.  验证监控系统

我这边web端口映射为宿主机的18080,所以访问zabbix界面,那就是IP+18080

默认的账号密码:

Admin

zabbix

如图,成功访问。

这一期的Zabbix技术内容到这就结束了。我是乐维IT君,专注运维技术分享,更多Zabbix技术及其他运维内容,还可以查看我的往期内容,zabbix服务,zabbix配置,zabbix部署等zabbix服务解决方案

Zabbix技术分享——使用docker-compose快速部署zabbix监控系统的更多相关文章

  1. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  2. Docker Compose 一键部署LNMP

    Docker Compose 一键部署LNMP 目录结构 [root@localhost ~]# tree compose_lnmp/ compose_lnmp/ ├── docker-compose ...

  3. Docker Compose 一键部署Nginx代理Tomcat集群

    Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...

  4. Docker Compose 一键部署多节点爬虫程序

    Docker Compose 一键部署多节点爬虫程序 目录结构 [root@localhost ~]# tree compose_crawler/ compose_crawler/ ├── cento ...

  5. 用Docker swarm快速部署Nebula Graph集群

    用Docker swarm快速部署Nebula Graph集群 一.前言 本文介绍如何使用 Docker Swarm 来部署 Nebula Graph 集群. 二.nebula集群搭建 2.1 环境准 ...

  6. 微信团队原创分享:iOS版微信的内存监控系统技术实践

    本文来自微信开发团队yangyang的技术分享. 一.前言 FOOM(Foreground Out Of Memory),是指App在前台因消耗内存过多引起系统强杀.对用户而言,表现跟crash一样. ...

  7. CentOS 7.4 下安装部署Nagios监控系统详细攻略(三)

    Nagios是一个流行的电脑系统和网络监控程序,它检测主机和服务,当异常发生和解除时能提醒用户.它是基于GPLv2开发的开源软件,可免费获得及使用. nagios工作原理 nagios的功能是监控服务 ...

  8. Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql

    Telegraf+InfluxDB+Grafana快速搭建实时监控系统  监控postgresql

  9. Docker Compose安装部署Jenkins

    流水线可以让项目发布流程更加清晰,docker可以大大减少Jenkins配置. 1.前言 数据卷挂载到 /var 磁盘目录下,因为该磁盘空间较大,后面需要挂载容器数据卷,以防内存吃紧. 为了可以留存启 ...

  10. docker swarm快速部署redis分布式集群

    环境准备 四台虚拟机 192.168.2.38(管理节点) 192.168.2.81(工作节点) 192.168.2.100(工作节点) 192.168.2.102(工作节点) 时间同步 每台机器都执 ...

随机推荐

  1. Prometheus高可用部署

    Prometheus的本地存储给Prometheus带来了简单高效的使用体验,可以让Promthues在单节点的情况下满足大部分用户的监控需求.但是本地存储也同时限制了Prometheus的可扩展性, ...

  2. Centos7安装redash

    一.更改yum国内源: (1)cd /etc/yum.repos.d/ sudo yum install wget (2)备份:sudo mv /etc/yum.repos.d/CentOS-Base ...

  3. nsis制作新版迅雷安装界面

    终于搞出来一点名堂,不借用皮肤插件,圆角,无标题栏拖动,渐隐渐显,纯nsis代码编写,相似度大概也有95%以上了. 演示程序下载

  4. Java问题之超过数值表示范围(例如64位)结果是什么 (阶乘)

    关于老师在课上所提及的这个问题 我做了验证 截图如下 只是一个简单的计算阶乘的代码 在运行时得到了如下结果 可以看到,对于部分数字如果超出范围会从64位处自动截断,而这时由于是二进制表示,首位默认是符 ...

  5. P1706 全排列问题 方法记录

    原题链接 全排列问题 题目描述 按照字典序输出自然数 \(1\) 到 \(n\) 所有不重复的排列,即 \(n\) 的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 一个整数 \( ...

  6. activeMq不能被主机访问的问题

    环境说明 主机:mac 虚拟机:VirtualBox 虚拟系统:Centos6.5 问题:虚拟机启动了 activemq. 也关闭了防火墙,但是在主机访问web界面,http://192.168.1. ...

  7. 重写 hashcode()真有那么简单嘛?

    万万没想到一个 hashcode() 方法,既然会引出一堆的知识盲区,简直了. 起因: 老八股:为什么重写Equals方法要重写HashCode方法. 大声告诉我为什么,闭着眼睛先把答案背出来,啥?这 ...

  8. 3.ElasticSearch系列之Docker本地部署

    对于之前的部署方式一般用于生产环境,而对于学习而言Docker方式快速部署就好了,本示例在window10环境下进行. 1. Docker使用Elasticsearch 需要对vm.max_map_c ...

  9. Tomcat 调优之从 Linux 内核源码层面看 Tcp backlog

    前两天看到一群里在讨论 Tomcat 参数调优,看到不止一个人说通过 accept-count 来配置线程池大小,我笑了笑,看来其实很多人并不太了解我们用的最多的 WebServer Tomcat,这 ...

  10. 在mybatis中#{}和${}的区别

    文章目录 1.第一个#{} 2.第二个${} 3.区别 1.第一个#{} 解释: 使用#{}格式的语法在mybatis中使用preparement语句来安全的设置值 PreparedStatement ...