使用docker-compose快速部署zabbix监控系统

比普通docker部署更快捷,更方便的部署方式,还方便后续管理哟!
前情提要

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

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

1.   Docker-compose介绍

l  Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排, 并且提供了 scale (服务扩容) 的功能。

l  Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.ymlextends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。

l  Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。

l  使用一个Dockerfile模板文件,可以让用户很方便的定义一个单独的应用容器。在工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个Web项目,除了Web服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。

l  Compose允许用户通过一个单独的docker-compose.yml模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。

l  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:
    container_name: mysql-test
    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:
    container_name: mysql-test
    image: mysql:8.0

2.4.       environment

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

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

version: '3'
services:
  mysql:
    container_name: mysql-test
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 123456

2.5.       ports

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

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

version: '3'
services:
  mysql:
    container_name: mysql-test
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "33060:3306"

2.6.       volumes

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

version: '3'
services:
  mysql:
    container_name: mysql-test
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    ports:
      - "33060:3306"
    volumes:
      - ./data:/var/lib/mysql
      - /var/log/mysql:/var/log/mysql

3.   安装docker-compose

选择对应版本下载安装包

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

Aib7QMQe6360ec3f3a023.png

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

mv docker-compose-x86 docker-compose
chmod +x docker-compose

安装

mv docker-compose /usr/bin

 Tl1Lb6cl6360ec6aaaf09.png

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

vim 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:
      - "13306:3306"
    volumes:
      - ./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.3.141
      DB_SERVER_PORT: 13306
    ports:
      - "11051:10051"
    volumes:
      - ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts
      - ./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.3.141
      DB_SERVER_PORT: 13306
      ZBX_SERVER_HOST: 192.168.3.141
      ZBX_SERVER_PORT: 11051
    ports:
      - "18080:8080"
  zabbix-agent:
    container_name: zabbix_agent
    image: zabbix/zabbix-agent:latest
    restart: always
    depends_on:
      - mysql
      - zabbix_server
    environment:
      ZBX_HOSTNAME: 192.168.3.141
      ZBX_SERVER_HOST: 172.18.0.1
      ZBX_SERVER_PORT: 11051
    ports:
      - "11050:10050"

RCauL7CQ6360ed26d1e7d.png

5.   启动zabbix监控系统

别忘了安装docker

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

docker-compose up -d

HJo7piCy6360ecef7e22d.png

6.   验证监控系统

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

默认的账号密码:

Admin

zabbix

UboNotmf6360edb0a19cb.png

如图,成功访问。

若是大家对本文有何疑问和建议,请大家评论留言,小菜鸡会随时关注,谢谢!

1 条评论

请先 登录 后评论
我是一只小菜鸡
我是一只小菜鸡

小菜鸡

12 篇文章

作家榜 »

  1. 乐维君 381 文章
  2. YOHOHO 14 文章
  3. 机灵小和尚 13 文章
  4. 我是一只小菜鸡 12 文章
  5. 细雨闲花 11 文章
  6. 。。。 9 文章
  7. 御前侍卫张五哥 9 文章
  8. 小黄人 8 文章