zabbix-appliance Docker应用笔记

    容器化的一项优势是,无需配置硬件和花费时间安装操作系统和软件来托管部署。 容器之间彼此隔离,并且多个容器可以在相同硬件上运行。 此配置可帮助我们更加高效地使用硬件,并且可以帮助提升应用程序的安全性。

1、概念:

容器:是一种松散隔离的环境,可用于生成和运行软件包。 这些软件包包括在任何计算环境中快速可靠地运行应用程序所需的代码和所有依赖项。 我们将这些包称为容器映像。容器映像是我们用于分发应用程序的单位( 容器映像是不可变的。 生成映像后,无法更改该映像。 更改映像的唯一方法是创建新映像。)。

软件容器化:是一种操作系统虚拟化方法,用于在不使用虚拟机 (VM) 的情况下部署和运行容器。 容器可在物理硬件上、云和 VM 中运行,还可以在多个操作系统上运行。

Docker :是一个用于开发、交付和运行容器的 容器化平台。 Docker 不使用虚拟机监控程序,如果要开发和测试应用程序,可以在台式机或笔记本电脑上运行 Docker。 桌面版 Docker 支持 Linux、Windows 和 macOS。 对于生产系统,Docker 适用于服务器环境,包括 Linux 的多种变体和 Microsoft Windows Server 2016 及更高版本。 许多云(包括 Azure)都支持 Docker。

Docker 体系结构: Docker 平台包含多个用于生成、运行和管理容器化应用程序的组件。

Docker 引擎:包含配置为客户端-服务器实现的多个组件,其中,客户端和服务器在同一主机上同时运行。 客户端使用 REST API 与服务器通信,该 API 还让客户端能够与远程服务器实例通信。

Docker 客户端

Docker 客户端是一个 名为 docker 的命令行应用程序,它为我们提供了一个命令行接口 (CLI),用于与 Docker 服务器进行交互。 docker 命令使用 Docker REST API 将指令发送到本地或远程服务器,并作为用于管理容器的主要接口。

Docker 服务器

Docker 服务器是一个名为 dockerd 的守护程序。 dockerd 守护程序通过 Docker REST API 响应来自客户端的请求,并且可以与其他守护程序进行交互。 此外,Docker 服务器还负责跟踪容器的生命周期。

Docker 对象

你将创建并配置多个对象以支持容器部署。 这些对象包括网络、存储卷、插件和其他服务对象。 我们不会在这里介绍所有这些对象,但请记住,我们可以根据需要创建和部署这些对象。

Docker Hub

Docker Hub 是一个软件即服务 (SaaS) Docker 容器注册表。 Docker 注册表是用于存储和分发创建的容器映像的存储库。 Docker Hub 是 Docker 用于映像管理的默认公共注册表。请记住,可以创建和使用专用 Docker 注册表,也可以使用可用的多个云提供商选项之一。 例如,可以使用 Azure 容器注册表来存储 Docker 容器,以便在多个启用了 Azure 容器的服务中使用。

    每个Pod里运行着一个特殊的被称之为 Pause的容器,其他容器则为业务容器,这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效。在设计时可以充分利用这一特性,将一组密切相关的服务进程放入同一个Pod中;同一个Pod里的容器之间仅需通过localhost就能互相通信。kubernetes中的pause容器主要为每个业务容器提供以下功能:

  • PID命名空间:Pod中的不同应用程序可以看到其他应用程序的进程ID。

  • 网络命名空间:Pod中的多个容器能够访问同一个IP和端口范围。

  • IPC命名空间:Pod中的多个容器能够使用System V IPC或POSIX消息队列进行通信。

  • UTS命名空间:Pod中的多个容器共享一个主机名;Volumes(共享存储卷)。

  • Pod中的各个容器可以访问在Pod级别定义的Volumes。

2、从dockerHub获取zabbix-appliance:docker pull zabbix/zabbix-appliance

hub.docker.com/r/zabbix/zabbix-appliance

Zabbix appliance包括MySQL数据库服务器、Zabbix服务器、Zabbix Java网关和基于nginx web服务器的Zabbix前端。The image with latest tag is based on Alpine Linux.The image uses MySQL database

重要信息:Zabbix Docker Appliance image已停用,将不适用于3.0.31、4.0.19、4.4.7、5.0.0及更新版本。 请为每个组件使用单独的Docker映像,而不是一体式解决方案。

3、Start a Zabbix server container as follows:

docker run --name  -p 80:80 -p 10051:10051 -d zabbix/zabbix-appliance:tag

Where some-zabbix-appliance is the name you want to assign to your container. See the list above for relevant tags, or look at the  . 这里tag使用latest

docker exec -ti mi-zabbix-appliance /bin/bash  //开启一个交互模式的BASH终端
docker logs mi-zabbix-appliance    //获取容器的日志

4、在浏览器输入:localhost:80,显示登录界面,

https://www.zabbix.com/documentation/4.4/manual/appliance

CREDENTIALS (LOGIN:PASSWORD)

System:

  • root:zabbix

Zabbix frontend:

  • Admin:zabbix

Database:

  • root:
  • zabbix:

5、启动 Zabbix agent container 

docker run --name one-zabbix-agent -e ZBX_HOSTNAME="one-hostname" -e ZBX_SERVER_HOST="mi-zabbix-appliance" -d zabbix/zabbix-agent:tag

    some-hostname is the hostname, it is Hostname parameter in Zabbix agent configuration file,some-zabbix-server is IP or DNS name of Zabbix server or proxy 。

Passive checks:

Zabbix服务器 image 公开标准Zabbix  agent端口(10050)以执行被动检查,因此container linking使Zabbix agent实例可用于Zabbix服务器和Zabbix代理容器。按以下方式启动应用程序容器,以便将其链接到Zabbix代理容器:

$ docker run --name mi-zabbix-server --link some-zabbix-agent:zabbix-agent -d zabbix/zabbix-server:latest

Active checks:

$ docker run --name some-zabbix-agent --link some-zabbix-server:zabbix-server -d zabbix/zabbix-agent:latest

Privileged mode:

默认情况下,Docker容器是"unprivileged" 的,不能访问大多数主机资源。Zabbix代理被设计用来监视系统资源,要做到这一点,Zabbix代理容器必须具有特权:

$ docker run --name priv-zabbix-agent --link zabbix-appliance:server-alias --privileged -d zabbix/zabbix-agent:latest

创建并启动名为pri-zabbix-agent 的容器,并把该容器和名为zabbix-appliance(别名server-alias)的容器(之前已启动的源容器)链接起来,站在 pri-zabbix-agent容器的角度, zabbix-applianceserver-alias都是“1cbbf6f07804”容器的名字,并且作为容器的hostname, pri-zabbix-agent用这2个名字中的哪一个都可以访问到“1cbbf6f07804”容器并与之通信(docker通过DNS自动解析),通过link的方式创建容器,我们可以 使用被Link容器的别名进行访问,而不是通过IP,解除了对IP的依赖

-link :alias   其中,name和id是源容器的name和id,alias是源容器在link下的别名。

使用这个选项在你运行一个容器时, 可以使新生成的容器链接到已在运行的容器,在此容器的/etc/hosts文件中增加一个额外的name主机名,这个名字为container_name的容器的IP地址的别名。这使得新容器的内部进程可以访问主机名为name的容器而不用知道它的Ip。内网是走docker0的网桥,互相之间是Ping的通的,但是 docker run 建立容器的时候,它的Ip地址是不可控制的,所以docker 用link的方式使web能够访问到db中的数据



请使用浏览器的分享功能分享到微信等