Чтобы ускорить процедуру развёртывания и обновления, Zabbix предоставляет образы Docker для каждого компонента Zabbix в виде переносимых и самодостаточных контейнеров.
Компоненты Zabbix поставляются с поддержкой баз данных MySQL и PostgreSQL, веб-серверов Apache2 и Nginx. Эти образы разделены на несколько отдельных образов.
Начиная с версии Zabbix 6.0, во время инсталяции должны быть созданы детерминированные триггеры. Если для MySQL/MariaDB включено бинарное журналирование, то это требует привилегий суперпользователя либо выставления переменной / параметра конфигурации log_bin_trust_function_creators = 1. Смотрите скрипты создания базы данных для инструкций по установке этой переменной.
       Обратите внимание, что при выполнении из консоли переменная будет выставляться только временно и будет сбрасываться при рестарте Docker-а. В этом случае сохраняйте ваш сервис SQL работающим, остановите лишь сервис zabbix-server командой 'docker compose down zabbix-server' и затем 'docker compose up -d zabbix-server'.
       В качестве альтернативы, вы можете выставить эту переменную в конфигурационном файле.
Компоненты Zabbix поставляются на основе образов Ubuntu, Alpine Linux и CentOS:
Все образы сконфигурированы на пересоздание в случае, если базовые образы были обновлены.
Каждый может следить на изменениями в Docker файлах, используя официальный репозиторий Zabbix на github.com. Вы можете создавать ответвления от проекта или свои собственные образы на основе официальных Docker файлов.
Все компоненты Zabbix доступны в следующих Docker репозиториях:
Дополнительно имеется поддержка SNMP трапов. Поставляется как дополнительный репозиторий (zabbix/zabbix-snmptraps) только на основе Ubuntu Trusty. Его можно привязать к Zabbix серверу и Zabbix прокси.
Каждый репозиторий компонентов Zabbix содержит следующие тэги:
latest — последняя стабильная версия компонента Zabbix на основе образа Alpine Linuxalpine-latest — последняя стабильная версия компонента Zabbix на основе образа Alpine Linuxubuntu-latest — последняя стабильная версия компонента Zabbix на основе образа Ubuntualpine-6.0-latest — последняя минорная версия компонента Zabbix 6.0 на основе образа Alpine Linuxubuntu-6.0-latest — последняя минорная версия компонента Zabbix 6.0 на основе образа Ubuntualpine-6.0.* — различные минорные версии компонента Zabbix 6.0 на основе образа Alpine Linux, где * минорная версия компонента Zabbixubuntu-6.0.* — различные минорные версии компонента Zabbix 6.0 на основе образа Ubuntu, где * минорная версия компонента ZabbixПосле загрузки образов запустите контейнеры, выполнив команду docker run с дополнительными аргументами для указания необходимых переменных окружения и/или точек монтирования. Ниже представлены некоторые примеры конфигурации.
Zabbix не должен запускаться в контейнерах как PID1/процесс init.
Все компоненты Zabbix предусматривают наличие переменных окружения для управления конфигурацией. Эти переменные окружения перечислены в репозиториях каждого из компонентов. Переменные окружения являются параметрами из файлов конфигурации Zabbix, но с другим методом наименования. Например,ZBX_LOGSLOWQUERIES идентичен LogSlowQueries из файлов конфигурации Zabbix сервера и Zabbix прокси.
Некоторые параметры конфигурации недоступны для изменения. Например, PIDFile и LogType.
У некоторых компонентов есть специфические переменные окружения, отсутствующие в официальных файлах конфигурации Zabbix:
| Переменная | Компоненты | Описание | 
|---|---|---|
| DB_SERVER_HOST | Сервер Прокси Веб-интерфейс | Переменная является IP адресом или DNS именем MySQL или PostgreSQL сервера. По умолчанию, значение mysql-serverилиpostgres-serverдля MySQL или PostgreSQL соответственно | 
| DB_SERVER_PORT | Сервер Прокси Веб-интерфейс | Переменная является портом MySQL или PostgreSQL сервера. По умолчанию, значение «3306» или «5432» соответственно. | 
| MYSQL_USER | Сервер Прокси Веб-интерфейс | Имя пользователя базы данных MySQL. По умолчанию, значение «zabbix». | 
| MYSQL_PASSWORD | Сервер Прокси Веб-интерфейс | Пароль пользователя базы данных MySQL. По умолчанию, значение «zabbix». | 
| MYSQL_DATABASE | Сервер Прокси Веб-интерфейс | Имя базы данных Zabbix. По умолчанию, значение «zabbix» для Zabbix сервера и «zabbix_proxy» для Zabbix прокси. | 
| POSTGRES_USER | Сервер Веб-интерфейс | Имя пользователя базы данных PostgreSQL. По умолчанию, значение «zabbix». | 
| POSTGRES_PASSWORD | Сервер Веб-интерфейс | Пароль пользователя базы данных PostgreSQL. По умолчанию, значение «zabbix». | 
| POSTGRES_DB | Сервер Веб-интерфейс | Имя базы данных Zabbix. По умолчанию, значение «zabbix». | 
| PHP_TZ | Веб-интерфейс | Часовой пояс в PHP формате. Полный список поддерживаемых часовых поясов доступен на php.net. По умолчанию, значение «Europe/Riga». | 
| ZBX_SERVER_NAME | Веб-интерфейс | Видимое имя Zabbix инсталляции в правом верхнем углу веб-интерфейса. По умолчанию, значение «Zabbix Docker» | 
| ZBX_JAVAGATEWAY_ENABLE | Сервер Прокси | Включает обмен данными с Zabbix Java gateway для сбора проверок относящихся к Java. По умолчанию, значение «false». | 
| ZBX_ENABLE_SNMP_TRAPS | Сервер Прокси | Включение функции SNMP трапов. Переменной требуется экземпляр zabbix-snmptraps и разделяемый с Zabbix сервером или Zabbix прокси том /var/lib/zabbix/snmptraps. | 
Образы позволяют использовать некоторые точки монтирования. Данные точки монтирования имеют отличия и зависят от типа Zabbix компонента:
| Том | Описание | 
|---|---|
| Zabbix агент | |
| /etc/zabbix/zabbix_agentd.d | Том позволяет включать *.conf файлы и расширять Zabbix агент, используя функционал UserParameter | 
| /var/lib/zabbix/modules | Том позволяет подгружать дополнительные модули и расширять Zabbix агент используя функционал загружаемых модулей | 
| /var/lib/zabbix/enc | Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE,ZBX_TLSCRLFILE,ZBX_TLSKEY_FILEиZBX_TLSPSKFILE | 
| Zabbix сервер | |
| /usr/lib/zabbix/alertscripts | Том используется для пользовательских скриптов оповещения. Яляется параметром AlertScriptsPathв zabbix_server.conf | 
| /usr/lib/zabbix/externalscripts | Том используется для внешних проверок. Является параметром ExternalScriptsв zabbix_server.conf | 
| /var/lib/zabbix/modules | Том позволяет подгружать дополнительные модули и расширять Zabbix сервер используя функционал загружаемых модулей | 
| /var/lib/zabbix/enc | Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE,ZBX_TLSCRLFILE,ZBX_TLSKEY_FILEиZBX_TLSPSKFILE | 
| /var/lib/zabbix/ssl/certs | Том используется для размещения файлов клиентских SSL сертификатов для аутентификации клиентов. Является параметром SSLCertLocationв zabbix_server.conf | 
| /var/lib/zabbix/ssl/keys | Том используется для размещения файлов закрытых SSL ключей (private keys) для аутентификации клиентов. Является параметром SSLKeyLocationв zabbix_server.conf | 
| /var/lib/zabbix/ssl/ssl_ca | Том используется для размещения файлов центра сертификации (CA) для верификации SSL сертификатов сервера. Яляется параметром SSLCALocationв zabbix_server.conf | 
| /var/lib/zabbix/snmptraps | Том используется для размещения snmptraps.log файла. Этот том может быть использован совместно с контейнером zabbix-snmptraps и унаследован, используя Docker опцию volumes_from при создании нового экземпляра Zabbix сервера. Функцию обработки SNMP трапов можно включить, используя совместный том и переключив переменную окружения ZBX_ENABLE_SNMP_TRAPS в 'true' | 
| /var/lib/zabbix/mibs | Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs | 
| Zabbix прокси | |
| /usr/lib/zabbix/externalscripts | Том используется для внешних проверок. Является параметром ExternalScriptsв zabbix_proxy.conf | 
| /var/lib/zabbix/db_data/ | Том позволяет хранить файлы базы данных на внешних устройствах. Поддерживается только для Zabbix proxy с базой SQLite3 | 
| /var/lib/zabbix/modules | Том позволяет подгружать дополнительные модули и расширять Zabbix прокси, используя функционал загружаемых модулей | 
| /var/lib/zabbix/enc | Том используется для хранения файлов, связанных с TLS. Имена данных файлов указываются при помощи переменных окружения ZBX_TLSCAFILE,ZBX_TLSCRLFILE,ZBX_TLSKEY_FILEиZBX_TLSPSKFILE | 
| /var/lib/zabbix/ssl/certs | Том используется для размещения файлов клиентских SSL сертификатов для аутентификации клиентов. Является параметром SSLCertLocationв zabbix_proxy.conf | 
| /var/lib/zabbix/ssl/keys | Том используется для размещения файлов закрытых SSL ключей (private keys) для аутентификации клиентов. Является параметром SSLKeyLocationв zabbix_proxy.conf | 
| /var/lib/zabbix/ssl/ssl_ca | Том используется для размещения файлов центра сертификации (CA) для верификации SSL сертификатов сервера. Является параметром SSLCALocationв zabbix_proxy.conf | 
| /var/lib/zabbix/snmptraps | Том используется для размещения snmptraps.log файла. Этот том может быть использован совместно с контейнером zabbix-snmptraps и унаследован, используя Docker опцию volumes_from при создании нового экземпляра Zabbix прокси. Функцию обработки SNMP трапов можно включить, используя совместный том и переключив переменную окружения ZBX_ENABLE_SNMP_TRAPS в «true» | 
| /var/lib/zabbix/mibs | Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs | 
| веб-интерфейс Zabbix на основе веб-сервера Apache2 | |
| /etc/ssl/apache2 | Том позволяет активировать HTTPS для веб-интерфейса Zabbix. Том должен содержать два файла ssl.crtиssl.key, подготовленные для SSL соединений Apache2 | 
| веб-интерфейс Zabbix на основе веб-сервера Nginx | |
| /etc/ssl/nginx | Том позволяет активировать HTTPS для веб-интерфейса Zabbix. Том должен содержать три файла ssl.crt,ssl.keyиdhparam.pem, подготовленные для SSL соединений Nginx | 
| Zabbix snmptraps | |
| /var/lib/zabbix/snmptraps | Том содержит имя файл журнала snmptraps.logс полученными SNMP трапами | 
| /var/lib/zabbix/mibs | Том позволяет добавлять новые MIB файлы. Не поддерживает подпапки, все MIB файлы должны быть помещены в /var/lib/zabbix/mibs | 
Для получения дополнительной информации обратитесь к официальным репозиториям Zabbix в Docker Hub.
Пример 1
В этом примере продемонстрировано, как запустить Zabbix сервер с поддержкой базы данных MySQL, веб-интерфейсом Zabbix на основе веб-сервера Nginx и Zabbix Java gateway.
1. Создайте выделенную сеть для контейнеров с компонентами Zabbix:
2. Запустите пустой экземпляр MySQL сервера
docker run --name mysql-server -t \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             --network=zabbix-net \
             --restart unless-stopped \
             -d mysql:8.0 \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password3. Запустите экземпляр Zabbix Java gateway
docker run --name zabbix-java-gateway -t \
             --network=zabbix-net \
             --restart unless-stopped \
             -d zabbix/zabbix-java-gateway:alpine-6.0-latest4. Запустите экземпляр Zabbix сервера и слинкуйте этот экземпляр с уже созданным экземпляром MySQL сервера
docker run --name zabbix-server-mysql -t \
             -e DB_SERVER_HOST="mysql-server" \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
             --network=zabbix-net \
             -p 10051:10051 \
             --restart unless-stopped \
             -d zabbix/zabbix-server-mysql:alpine-6.0-latestЭкземпляр Zabbix сервера открывает порт 10051/TCP (Zabbix траппер) на узле.
5. Запустите экземпляр веб-интерфейса Zabbix и слинкуйте этот экземпляр с уже созданными экземплярами MySQL сервера и Zabbix сервера
docker run --name zabbix-web-nginx-mysql -t \
             -e ZBX_SERVER_HOST="zabbix-server-mysql" \
             -e DB_SERVER_HOST="mysql-server" \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             --network=zabbix-net \
             -p 80:8080 \
             --restart unless-stopped \
             -d zabbix/zabbix-web-nginx-mysql:alpine-6.0-latestЭкземпляр веб-интерфейса Zabbix открывает 80/TCP порт (HTTP) на узле.
Пример 2
В этом примере продемонстрировано, как запустить Zabbix сервер с поддержкой базы данных PostgreSQL, веб-интерфейсом Zabbix на основе веб-сервера Nginx и с функцией приёма SNMP трапов.
1. Создайте выделенную сеть для контейнеров с компонентами Zabbix:
2. Запустите пустой экземпляр PostgreSQL сервера
docker run --name postgres-server -t \
             -e POSTGRES_USER="zabbix" \
             -e POSTGRES_PASSWORD="zabbix_pwd" \
             -e POSTGRES_DB="zabbix" \
             --network=zabbix-net \
             --restart unless-stopped \
             -d postgres:latest3. Запустите экземпляр Zabbix snmptraps
docker run --name zabbix-snmptraps -t \
             -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
             -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
             --network=zabbix-net \
             -p 162:1162/udp \
             --restart unless-stopped \
             -d zabbix/zabbix-snmptraps:alpine-6.0-latestЭкземпляр Zabbix snmptrap открывает порт 162/UDP (SNMP трапы) на узле.
4. Запустите экземпляр Zabbix сервера и слинкуйте этот экземпляр с уже созданным экземпляром PostgreSQL сервера
docker run --name zabbix-server-pgsql -t \
             -e DB_SERVER_HOST="postgres-server" \
             -e POSTGRES_USER="zabbix" \
             -e POSTGRES_PASSWORD="zabbix_pwd" \
             -e POSTGRES_DB="zabbix" \
             -e ZBX_ENABLE_SNMP_TRAPS="true" \
             --network=zabbix-net \
             -p 10051:10051 \
             --volumes-from zabbix-snmptraps \
             --restart unless-stopped \
             -d zabbix/zabbix-server-pgsql:alpine-6.0-latestЭкземпляр Zabbix сервера открывает порт 10051/TCP (Zabbix траппер) к узлу.
5. Запустите экземпляр веб-интерфейса Zabbix и слинкуйте этот экземпляр с уже созданными экземплярами PostgreSQL сервера и Zabbix сервера
docker run --name zabbix-web-nginx-pgsql -t \
             -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
             -e DB_SERVER_HOST="postgres-server" \
             -e POSTGRES_USER="zabbix" \
             -e POSTGRES_PASSWORD="zabbix_pwd" \
             -e POSTGRES_DB="zabbix" \
             --network=zabbix-net \
             -p 443:8443 \
             -p 80:8080 \
             -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
             --restart unless-stopped \
             -d zabbix/zabbix-web-nginx-pgsql:alpine-6.0-latestЭкземпляр веб-интерфейса Zabbix открывает порт 443/TCP (HTTPS) на узле.
       Папка /etc/ssl/nginx должна содержать сертификат с требуемым именем.
Пример 3
В этом примере продемонстрировано, как запустить Zabbix сервер с поддержкой базы данных MySQL, веб-интерфейсом Zabbix на основе веб-сервера Nginx и Zabbix Java gateway на Red Hat 8, используя podman.
1. Создайте новую капсулу (pod) с именем zabbix и откройте порты (веб-интерфейс, траппер Zabbix сервера):
2. (опционально) Запустите контейнер Zabbix агента в капсуле (pod) zabbix:
podman run --name zabbix-agent \
           -e ZBX_SERVER_HOST="127.0.0.1,localhost" \
           --restart=always \
           --pod=zabbix \
           -d registry.connect.redhat.com/zabbix/zabbix-agent-60:latest3. Создайте директорию ./mysql/ на узле и запустите Oracle MySQL сервер версии 8.0:
podman run --name mysql-server -t \
             -e MYSQL_DATABASE="zabbix" \
             -e MYSQL_USER="zabbix" \
             -e MYSQL_PASSWORD="zabbix_pwd" \
             -e MYSQL_ROOT_PASSWORD="root_pwd" \
             -v ./mysql/:/var/lib/mysql/:Z \
             --restart=always \
             --pod=zabbix \
             -d mysql:8.0 \
             --character-set-server=utf8 --collation-server=utf8_bin \
             --default-authentication-plugin=mysql_native_password4. Запустите контейнер Zabbix сервера:
podman run --name zabbix-server-mysql -t \
                         -e DB_SERVER_HOST="127.0.0.1" \
                         -e MYSQL_DATABASE="zabbix" \
                         -e MYSQL_USER="zabbix" \
                         -e MYSQL_PASSWORD="zabbix_pwd" \
                         -e MYSQL_ROOT_PASSWORD="root_pwd" \
                         -e ZBX_JAVAGATEWAY="127.0.0.1" \
                         --restart=always \
                         --pod=zabbix \
                         -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-605. Запустите контейнер Zabbix Java Gateway:
podman run --name zabbix-java-gateway -t \
             --restart=always \
             --pod=zabbix \
             -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-606. Запустите контейнер веб-интерфейса Zabbix:
podman run --name zabbix-web-mysql -t \
                         -e ZBX_SERVER_HOST="127.0.0.1" \
                         -e DB_SERVER_HOST="127.0.0.1" \
                         -e MYSQL_DATABASE="zabbix" \
                         -e MYSQL_USER="zabbix" \
                         -e MYSQL_PASSWORD="zabbix_pwd" \
                         -e MYSQL_ROOT_PASSWORD="root_pwd" \
                         --restart=always \
                         --pod=zabbix \
                         -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-60Капсула (pod) zabbix открывает порт 80/TCP (HTTP) на узле через порт 8080/TCP контейнера zabbix-web-mysql.
Zabbix также поставляет файлы конфигурации для определения и запуска нескольких контейнеров с Zabbix компонентами в Docker. Данные файлы конфигурации доступны в официальном Zabbix docker репозитории на github.com: https://github.com/zabbix/zabbix-docker. Эти файлы конфигурации добавлены в качестве примера и перегружены. Например, в них содержится прокси с поддержкой MySQL и SQLite3.
Имеется несколько различных версий файлов конфигурации:
| Имя файла | Описание | 
|---|---|
| docker-compose_v3_alpine_mysql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Alpine Linux с поддержкой базы данных MySQL. | 
| docker-compose_v3_alpine_mysql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Alpine Linux с поддержкой базы данных MySQL. | 
| docker-compose_v3_alpine_pgsql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Alpine Linux с поддержкой базы данных PostgreSQL. | 
| docker-compose_v3_alpine_pgsql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Alpine Linux с поддержкой базы данных PostgreSQL. | 
| docker-compose_v3_centos_mysql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на CentOS 8 с поддержкой базы данных MySQL. | 
| docker-compose_v3_centos_mysql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на CentOS 8 с поддержкой базы данных MySQL. | 
| docker-compose_v3_centos_pgsql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на CentOS 8 с поддержкой базы данных PostgreSQL. | 
| docker-compose_v3_centos_pgsql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на CentOS 8 с поддержкой базы данных PostgreSQL. | 
| docker-compose_v3_ubuntu_mysql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Ubuntu 20.04 с поддержкой базы данных MySQL. | 
| docker-compose_v3_ubuntu_mysql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Ubuntu 20.04 с поддержкой базы данных MySQL. | 
| docker-compose_v3_ubuntu_pgsql_latest.yaml | Файл конфигурации запускает последнюю версию компонентов Zabbix 6.0 на Ubuntu 20.04 с поддержкой базы данных PostgreSQL. | 
| docker-compose_v3_ubuntu_pgsql_local.yaml | Файл конфигурации собирает локально последнюю версию компонентов Zabbix 6.0 и запускает компоненты Zabbix на Ubuntu 20.04 с поддержкой базы данных PostgreSQL. | 
Доступные Docker файлы конфигурации поддерживают версию 3 Docker Compose.
Файлы конфигурации Compose сконфигурированы для поддержки локального хранилища на узле. Docker Compose создаст директорию zbx_env в директории с файлом конфигурации compose, когда вы запустите компоненты Zabbix с его помощью. Директория будет содержать структуру, описанную в разделе Тома выше и директорию для хранения базы данных.
Также в файлах конфигурации compose имеются тома с доступом только на чтение для файлов /etc/localtime и /etc/timezone.
В той же директории с файлами конфигурации compose на github.com вы можете найти файлы с переменными окружения по умолчанию для каждого компонента из файлов конфигурации compose. Эти файлы окружения называются приблизительно так: .env_<тип компоненты>.
Ниже указаны команды для Docker Compose V2. Если вы используете Docker Compose V1, замените docker compose -f строкой docker-compose -f
Пример 1
Эта команда загрузит последние образы Zabbix 6.0 для каждого из компонентов Zabbix и запустит их в detach режиме.
Не забудьте загрузить .env_<тип компонента> файлы с официального репозитория Zabbix на github.com с файлами конфигурации.
Пример 2
Эта команда загрузит образ на основе Ubuntu 20.04 (focal), затем локально соберёт компоненты Zabbix 6.0 и запустит их в detach режиме.