Docker応用チュートリアル：Zabbix Server

## 概要

Docker Compose を使い、Zabbix Server を実行します。

## 前提知識

Docker Compose の基本操作（[応用チュートリアル：WordPress](Docker応用チュートリアル：)）の理解が必要です。

## チュートリアル内容について

Zabbix SIA から公式 Docker イメージや docker-compose.yml が配布されています。しかし、標準のイメージでは Zabbix Server の UI を日本語にすると画像のフォントが文字化けする問題があります。また、エージェントは自分自身を監視できません。

これらの問題を解決すべく、`Dockerfile` と `docker-compose.yml` を書き直し、すぐに日本語で Zabbix Server を使えることを目的とします。

## 1. ディレクトリの作成と移動

作業用ディレクトリを作成し、移動します。

```console
$ mkdir zabbix
$ cd zabbix
```

## 2. 関連ファイルの作成

Dockerfile を作成します。

```console
$ vi Dockerfile
```

中身は次の通りです。

```docker
FROM zabbix/zabbix-web-apache-mysql:ubuntu-3.2-latest
RUN apt-get update && \
        apt-get -y install fonts-ipafont && \
        update-alternatives --install /usr/share/zabbix/fonts/graphfont.ttf zabbix-frontend-font /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf 50 && \
        update-alternatives --set zabbix-frontend-font /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf
```

- IPA フォントをインストール
- zabbix-frontend-font のフォント指定を IPA フォントに切り替え

それから docker-compose.yml を作成します。

```console
$ vi docker-compose.yml
```

中身は次の通りです。

```yaml
version: '2'
services:
  zabbix-server:
    image: zabbix/zabbix-server-mysql:ubuntu-3.2-latest
    ports:
      - "10051:10051"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env_db_mysql
      - .env_srv
    user: root
    networks:
      - zbx_net

  zabbix-web-apache-mysql:
    image: zabbix/zabbix-web-apache-mysql:ubuntu-3.2-latest
    build: .
    ports:
      - "80:80"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env_db_mysql
      - .env_web
    user: root
    networks:
      - zbx_net

  zabbix-agent:
    image: zabbix/zabbix-agent:ubuntu-3.2-latest
    ports:
      - "10050:10050"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    env_file:
      - .env_agent
    user: root
    privileged: true
    pid: "host"
    networks:
      zbx_net:
        ipv4_address: 172.16.238.5

  mysql-server:
    image: mysql:5.7
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./zbx_env/var/lib/mysql:/var/lib/mysql
    env_file:
      - .env_db_mysql
    user: root
    networks:
      - zbx_net

networks:
  zbx_net:
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "false"
    ipam:
      driver: default
      config:
        - subnet: 172.16.238.0/24
          gateway: 172.16.238.1
```

また、いくつかの関連ファイルを作成します。

```ini:.env_web
# ZBX_SERVER_HOST=zabbix-server
# ZBX_SERVER_PORT=10051
ZBX_SERVER_NAME=Composed installation
# ZBX_MAXEXECUTIONTIME=600
# ZBX_MEMORYLIMIT=128M
# ZBX_POSTMAXSIZE=16M
# ZBX_UPLOADMAXFILESIZE=2M
# ZBX_MAXINPUTTIME=300
# Timezone one of: http://php.net/manual/en/timezones.php
TZ=Asia/Tokyo
```

```console
$ touch .env_srv
```

```ini:.env_db_mysql
# DB_SERVER_HOST=mysql-server
# DB_SERVER_PORT=3306
# MYSQL_USER=zabbix
MYSQL_USER=zabbix
# MYSQL_PASSWORD=zabbix
MYSQL_PASSWORD=zabbix
# MYSQL_ROOT_PASSWORD=
MYSQL_ROOT_PASSWORD=root_pwd
# MYSQL_ALLOW_EMPTY_PASSWORD=false
# MYSQL_DATABASE=zabbix
MYSQL_DATABASE=zabbix
```

```ini:.env_agent
ZBX_SERVER_HOST=zabbix-server,zabbix-agent
```

## 3. ビルドと実行

Dockerfile でイメージを作成するため、`docker-compose build` コマンドを実行します。また、必要なイメージを取得します。

```console
$ docker-compose build
$ docker-compose pull
```

最後に起動します。

```console
$ docker-compose up -d
```

ブラウザから `http://<IP>/` にアクセスします。id: admin , Pass: zabbix です。ログイン直後にパスワードを変更しておきます。