利用docker生成多个版本的Linux操作系统的zabbix代理

背景

  • 在部署实施zabbix代理的时候,最怕遇到客户有多个版本的Linux操作系统,比如有Redhat,Centos,Ubuntu或者Suse。不同的发行版本又有不同的版本,如redhat 6,redhat7,Suse11,Suse12等等,针对不同发行版的不同版本,我们需要根据源代码,在该操作系统版本进行编译后,生成可执行程序,然后分发到各自的大版本相同的操作系统上面去,进行实施监控。
  • 方法步骤其实不难,无非就是准备一个同操作系统环境,安装gcc和相应的库文件,然后开始编译安装生成可执行程序。这种太枯燥了,不符合SRE理念,再者,如果哪天zabbix代理出现严重漏洞或者大功能升级,我们又需要将这些繁琐的工作再进行一遍,实在是费时费力,同时还得维护多个操作系统模版,非常低效率。

解决思路

  • Docker是一项非常好玩的技术,他可以在一台机器上面虚拟出多个Linux操作系统环境,目前支持Centos,Ubuntu以及Suse这些操作系统,其他的可以移步到docker的镜像官网进行查看

https://hub.docker.com/search?q=&type=image&category=os

  • 我们可以在docker下面,利用Dockerfile来生成我们的代理程序,具体实现思路如下:
    1. 选取镜像
    2. 将zabbix源代码添加到镜像中
    3. 准备编译环境
    4. 编译并清理环境
    5. 将编译后的程序打包
    6. 执行容器时将打包好的代理放到宿主机指定目录

实战

  • 按照思路,我们编写Dockerfile文件内容如下:
FROM centos:7
MAINTAINER xiaojinran@foxmail.com
ADD *.tar.gz /zabbix
RUN yum install -y gcc pcre-devel make && cd /zabbix/* && ./configure --enable-agent --prefix /zabbix_agent && make && make install  && tar -cvzf /tmp/zbx_agent_$(cat ChangeLog|grep "Changes for"|head -n 1|awk  '{print $3}')_$(cat /etc/redhat-release |sed 's/ /_/g').tar.gz /zabbix_agent && rm -rf /zabbix_agent && rm -rf /zabbix/zabbix-*
VOLUME /zabbix_agents
CMD cp /tmp/*.tar.gz /zabbix_agents 
  • 文件内容说明如下:
    • FROM 指定选取哪个镜像
    • MAINTAINER 指定生成后的镜像的维护信息
    • RUN 在镜像中执行相应的指令,这里为准备编译环境,并且进行编译,打包,这里建议将在镜像中执行的指令都在一个RUN里面执行,这样可以减小镜像层数,从而是最终镜像体积会小点。
    • VOLUME 指定挂载目录,可以用于启动后容器内容的持久化
    • CMD 指定启动容器时需要执行的指令,这里将打包好的代理程序拷贝到挂载目录,从而可以在宿主机上面进行保存
  • 准备好zabbix源代码程序,将其放在Dockerfile所在的目录下
[docker@docker zabbix]$ ls
Dockerfile  zabbix-4.4.4.tar.gz
  • 执行docker image build .
[docker@docker zabbix]$ docker image build .
...
....
Successfully built 52ec17ef539c
  • 顺利的话可以生成一个镜像,里面包含了我们的所需要的代理程序压缩包,我们用这个镜像生成一个容器,并立即销毁掉
[docker@docker zabbix]$ docker container run -d  -v /zabbix_agents:/zabbix_agents 52ec17ef539c |xargs docker rm 
e18e4709c7a201254138fc5adaf97407cde4bf088eab17f311ed5b1ef13ac49e
  • 可以看到在我们的宿主机的目录上有个这个代理程序了。
[docker@docker zabbix]$ ll /zabbix_agents/
total 1056
-rw-r--r-- 1 root root 1079698 Jan  8 00:29 zbx_agent_4.4.4_CentOS_Linux_release_7.7.1908_(Core).tar.gz
  • 为了节省资源,此刻可以将容器和镜像删除掉了。

引申

  • 如果我们需要centos的其他版本,只需要在FROM中,加载不同版本的镜像即可,或者zabbix代理源码更新后,我们只需要将新的源代码进行拷贝,重新执行生成镜像和容器即可,非常方便,同样的,Suse也是可以使用该方法,由于Ubuntu,Suse包管理方式不同,但实际原理和思路是一致,只需要修改RUN里面的命令即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值