2017年2月1日水曜日

docker で zabbix3.2 のテスト環境を作る


DockerHUB の zabbix イメージを使用して、テスト環境を作ってみます。

環境は以下のとおり。
  • Dockerホスト(CentOS7.3)
    • docker1.10.3
    • docker-compose1.10.0
  • Dockerコンテナ(AlpineLinux)
    • zabbix server 3.2
    • mariadb
    • zabbix agent
    • nginx
Dockerコンテナは4つ作成します。
zabbix ディレクトリに下記内容の docker-compose.yml を格納します。
[root@centos0702 zabbix]# cat docker-compose.yml
version: '2'
services:
  db:
    image: mariadb
    command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
    volumes:
      - ./data/mysql:/var/lib/mysql
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: docker
      MYSQL_DATABASE: zabbix
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix

  server:
    image: zabbix/zabbix-server-mysql:alpine-3.2-latest
    volumes:
      - ./data/zabbix:/var/lib/zabbix
      - /etc/localtime:/etc/localtime:ro
    environment:
      DB_SERVER_HOST: zabbix_db_1
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix
    ports:
      - "10051:10051"
    depends_on:
      - db

  web:
    image: zabbix/zabbix-web-nginx-mysql:alpine-3.2-latest
    volumes:
      - /usr/share/fonts/ipa-pgothic/ipagp.ttf:/usr/share/zabbix/fonts/graphfont.ttf:ro
    environment:
      DB_SERVER_HOST: zabbix_db_1
      MYSQL_USER: zabbix
      MYSQL_PASSWORD: zabbix
      ZBX_SERVER_HOST: zabbix_server_1
      TZ: Asia/Tokyo
    ports:
      - "80:80"
    depends_on:
      - db
      - server

  agent:
    image: zabbix/zabbix-agent:alpine-latest
    volumes:
      - /etc/localtime:/etc/localtime:ro
    environment:
      ZBX_SERVER_HOST: zabbix_server_1
    ports:
      - "10050:10050"
    depends_on:
      - server
    privileged: true

zabbixのグラフで日本語表示したいのでDockerホストに日本語フォントをインストールしてDockerコンテナにマウントします。
Dockerコンテナで以下のようにしてIPAフォントをインストールしておきます。
[root@centos0702 zabbix]# yum install ipa-pgothic-fonts

コンテナのイメージをDockerHUBから取得します。
[root@centos0702 zabbix]# docker-compose pull
Pulling db (mariadb:latest)...
Trying to pull repository docker.io/library/mariadb ...
latest: Pulling from docker.io/library/mariadb
~省略~
Digest: sha256:53c987d54e0ce4abae97894ea960f6ba889a19a574a00a77c295ac33d1bd3bd4
Status: Downloaded newer image for docker.io/zabbix/zabbix-agent:alpine-latest
Pulling web (zabbix/zabbix-web-nginx-mysql:alpine-3.2-latest)...
Trying to pull repository docker.io/zabbix/zabbix-web-nginx-mysql ...
alpine-3.2-latest: Pulling from docker.io/zabbix/zabbix-web-nginx-mysql
3690ec4760f9: Already exists
4f869513b27c: Pull complete
392eaccdd003: Pull complete
fc10ef29bc10: Pull complete
fbc02d3e2931: Pull complete
ee440b489bcc: Pull complete
51e71efce406: Pull complete
ad903346923a: Pull complete
e81f8c02dbab: Pull complete
2930a57f9526: Pull complete
104265cc9514: Pull complete
2a7d5d79e121: Pull complete
Digest: sha256:bdea5baf5441d60b0df30e826a50a2275d2e1209cbf31e5aa341e26e3a633051
Status: Downloaded newer image for docker.io/zabbix/zabbix-web-nginx-mysql:alpine-3.2-latest

コンテナを起動します。
[root@centos0702 zabbix]# docker-compose up -d
Creating network "zabbix_default" with the default driver
Creating zabbix_db_1
Creating zabbix_server_1
Creating zabbix_web_1
Creating zabbix_agent_1

コンテナの状態を確認します。
[root@centos0702 zabbix]# docker-compose ps
     Name                    Command               State                 Ports
--------------------------------------------------------------------------------------------
zabbix_agent_1    /bin/bash /run_zabbix_comp ...   Up      0.0.0.0:10050->10050/tcp
zabbix_db_1       docker-entrypoint.sh mysql ...   Up      0.0.0.0:3306->3306/tcp
zabbix_server_1   /bin/bash /run_zabbix_comp ...   Up      0.0.0.0:10051->10051/tcp, 162/udp
zabbix_web_1      /bin/bash /run_zabbix_comp ...   Up      443/tcp, 0.0.0.0:80->80/tcp

zabbix ディレクトリの data ディレクトリが自動的に作成され、mariadb と zabbix-server の一部がマウントされます。
[root@centos0702 zabbix]# tree -F .
.
├── data/
│   ├── mysql/
│   │   ├── aria_log.00000001
│   │   ├── aria_log_control
│   │   ├── ib_logfile0
│   │   ├── ib_logfile1
│   │   ├── ibdata1
│   │   ├── multi-master.info
│   │   ├── mysql/
│   │   │   ├── column_stats.MYD
│   │   │   ├── column_stats.MYI
│   │   │   ├── column_stats.frm
│   │   │   ├── columns_priv.MYD
│   │   │   ├── columns_priv.MYI
│   │   │   ├── columns_priv.frm
│   │   │   ├── db.MYD
│   │   │   ├── db.MYI
│   │   │   ├── db.frm
│   │   │   ├── event.MYD
│   │   │   ├── event.MYI
│   │   │   ├── event.frm
│   │   │   ├── func.MYD
│   │   │   ├── func.MYI
│   │   │   ├── func.frm
│   │   │   ├── general_log.CSM
│   │   │   ├── general_log.CSV
│   │   │   ├── general_log.frm
│   │   │   ├── gtid_slave_pos.frm
│   │   │   ├── gtid_slave_pos.ibd
│   │   │   ├── help_category.MYD
│   │   │   ├── help_category.MYI
│   │   │   ├── help_category.frm
│   │   │   ├── help_keyword.MYD
│   │   │   ├── help_keyword.MYI
│   │   │   ├── help_keyword.frm
│   │   │   ├── help_relation.MYD
│   │   │   ├── help_relation.MYI
│   │   │   ├── help_relation.frm
│   │   │   ├── help_topic.MYD
│   │   │   ├── help_topic.MYI
│   │   │   ├── help_topic.frm
│   │   │   ├── host.MYD
│   │   │   ├── host.MYI
│   │   │   ├── host.frm
│   │   │   ├── index_stats.MYD
│   │   │   ├── index_stats.MYI
│   │   │   ├── index_stats.frm
│   │   │   ├── innodb_index_stats.frm
│   │   │   ├── innodb_index_stats.ibd
│   │   │   ├── innodb_table_stats.frm
│   │   │   ├── innodb_table_stats.ibd
│   │   │   ├── plugin.MYD
│   │   │   ├── plugin.MYI
│   │   │   ├── plugin.frm
│   │   │   ├── proc.MYD
│   │   │   ├── proc.MYI
│   │   │   ├── proc.frm
│   │   │   ├── procs_priv.MYD
│   │   │   ├── procs_priv.MYI
│   │   │   ├── procs_priv.frm
│   │   │   ├── proxies_priv.MYD
│   │   │   ├── proxies_priv.MYI
│   │   │   ├── proxies_priv.frm
│   │   │   ├── roles_mapping.MYD
│   │   │   ├── roles_mapping.MYI
│   │   │   ├── roles_mapping.frm
│   │   │   ├── servers.MYD
│   │   │   ├── servers.MYI
│   │   │   ├── servers.frm
│   │   │   ├── slow_log.CSM
│   │   │   ├── slow_log.CSV
│   │   │   ├── slow_log.frm
│   │   │   ├── table_stats.MYD
│   │   │   ├── table_stats.MYI
│   │   │   ├── table_stats.frm
│   │   │   ├── tables_priv.MYD
│   │   │   ├── tables_priv.MYI
│   │   │   ├── tables_priv.frm
│   │   │   ├── time_zone.MYD
│   │   │   ├── time_zone.MYI
│   │   │   ├── time_zone.frm
│   │   │   ├── time_zone_leap_second.MYD
│   │   │   ├── time_zone_leap_second.MYI
│   │   │   ├── time_zone_leap_second.frm
│   │   │   ├── time_zone_name.MYD
│   │   │   ├── time_zone_name.MYI
│   │   │   ├── time_zone_name.frm
│   │   │   ├── time_zone_transition.MYD
│   │   │   ├── time_zone_transition.MYI
│   │   │   ├── time_zone_transition.frm
│   │   │   ├── time_zone_transition_type.MYD
│   │   │   ├── time_zone_transition_type.MYI
│   │   │   ├── time_zone_transition_type.frm
│   │   │   ├── user.MYD
│   │   │   ├── user.MYI
│   │   │   └── user.frm
│   │   ├── performance_schema/
│   │   │   └── db.opt
│   │   ├── tc.log
│   │   └── zabbix/
│   │       ├── db.opt
│   │       ├── group_discovery.frm
│   │       ├── group_discovery.ibd
│   │       ├── group_prototype.frm
│   │       ├── group_prototype.ibd
│   │       ├── groups.frm
│   │       ├── groups.ibd
│   │       ├── hosts.frm
│   │       ├── hosts.ibd
│   │       ├── maintenances.frm
│   │       ├── maintenances.ibd
│   │       ├── screens.frm
│   │       ├── screens.ibd
│   │       ├── screens_items.frm
│   │       ├── screens_items.ibd
│   │       ├── users.frm
│   │       └── users.ibd
│   └── zabbix/
│       ├── enc/
│       ├── mibs/
│       ├── modules/
│       ├── snmptraps/
│       ├── ssh_keys/
│       └── ssl/
│           ├── certs/
│           ├── keys/
│           └── ssl_ca/
└── docker-compose.yml

15 directories, 115 files

下記URLで zabbix のログイン画面が表示されるので、ユーザ:admin、パスワード:zabbix でログインできます。
http://<DockerホストのIPアドレス>