介绍以下安装环境:
- 操作系统:CentOS 7.6
- docker版本:18.09.0
- zabbix版本:4.0.3
- mysql版本:8.
首先我已经在有外网的环境下下载了zabbix和MySQL的镜像并且打包传递到离线服务器上。由于之前的文章已经有介绍过如何离线获取镜像,并且大家下载软件版本很可能都一样,所以这里不在详述该操作。下面操作我们将在内网机器完成:
1.建立一个docker的虚拟网络:
[root@localhost docker_evn_file]# docker network create zabbix_app_net
50ed468f8b6374e28cfce95341cad2129f09363148ed380ca82a8376cf5026dc
1.安装MySQL8.0容器。
先加载打包好的镜像:
[root@localhost ~]# docker load -i mysql8.tar
0a07e81f5da3: Loading layer [==================================================>] 58.47MB/58.47MB
3d33930b279a: Loading layer [==================================================>] 338.4kB/338.4kB
7412b239e6a1: Loading layer [==================================================>] 10.44MB/10.44MB
7756685f09e9: Loading layer [==================================================>] 4.472MB/4.472MB
7d390c8db6fd: Loading layer [==================================================>] 1.536kB/1.536kB
73ea790d3afa: Loading layer [==================================================>] 46.15MB/46.15MB
5d6846033b0c: Loading layer [==================================================>] 31.74kB/31.74kB
506f749581f6: Loading layer [==================================================>] 3.584kB/3.584kB
a1cb89945ac3: Loading layer [==================================================>] 362.1MB/362.1MB
8103990ddb33: Loading layer [==================================================>] 5.632kB/5.632kB
3aa676232fff: Loading layer [==================================================>] 9.728kB/9.728kB
6e4a6c599b1d: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: mysql:8.0.15
[root@localhost ~]# docker images|grep mysql
mysql 8.0.15 81f094a7e4cc Less than a second ago 477MB
编辑MySQL启动需要的一些环境变量并形成参数文件,这里我新建了一个zabbix_mysql_8.list 的文件
(注意这里变量值不要加“”否则参数会认不出来):
[root@localhost docker_env_file]# cat zabbix_mysql_8.list
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=zabbix
MYSQL_USER=zabbix
MYSQL_PASSWORD=zabbix
执行docker run 生成MySQL容器:
[root@localhost mysqldata]# docker run --name zabbix-mysql-8 \
> --net=zabbix_app_net \
> -p 3306 \
> -v /root/mysql_etc_file/conf.d:/etc/mysql/conf.d \
> -v /mysqldata:/var/lib/mysql \
> --env-file /root/docker_env_file/zabbix_mysql_8.list \
> -d mysql:8.0.15 \
> --character-set-server=utf8mb4 \
> --collation-server=utf8mb4_unicode_ci \
>
f364359d69379ca0aa08913a45acf1d9d1fa4a09f032d91d02c160ee4e98150d
[root@localhost mysqldata]# ls
auto.cnf ca-key.pem client-key.pem ib_logfile0 #innodb_temp performance_schema server-cert.pem undo_001
binlog.000001 ca.pem ib_buffer_pool ib_logfile1 mysql private_key.pem server-key.pem undo_002
binlog.index client-cert.pem ibdata1 ibtmp1 mysql.ibd public_key.pem sys zabbix
[root@localhost mysqldata]#
这里简单介绍一下docker run 时候带的参数含义:
- --name 容器的名称
- --net 容器加入zabbix_app_net网络
- --env-file 加载容器启动时需要的参数文件,由于参数过多所以这里使用文件将参数全部写入,也可以使用-e将参数一一列出
- --d 镜像名称
- --v 宿主机和容器文件之间进行映射,这样可以不用进入容器修改MySQL的配置文件,MySQL的数据文件也得到持久保存,不随容器而消亡。注意:只有dockerfile中设置VOLUME的目录容器中的内容才能映射到宿主机,否则只能从宿主机映射到容器。例如如果上述命令中加入 -v /root/mysql_etc_file/conf.d:/etc/mysql/conf.d 因为dockerfile中没有对/etc/mysql/conf.d 进行VOLUME说明,容器启动时候不能写入该目录,但会读取该目录中的配置文件(mysql.cnf)。
- 其他两个参数是mysql的参数设置字符集,这里可能有的同学可能会问mysql参数容器怎么会识别,这个就要看dockerfile最后执行命令可以接收的参数。
这里使用的是MySQL8,由于MySQL登录认证机制有所改变,需要在数据库中执行以下命令否则zabbix-server将无法连接数据库。
[root@localhost zabbix_etc_file]# docker exec -it zabbix-mysql-8 mysql -uroot -proot
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 41
Server version: 8.0.15 MySQL Community Server - GPL
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> mysql>
mysql> ALTER USER 'zabbix'@'%' IDENTIFIED WITH mysql_native_password BY 'zabbix';
Query OK, 0 rows affected (0.01 sec)
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
Query OK, 0 rows affected (0.01 sec)
mysql>
2.安装zabbix-server容器:
先加载打包好的镜像:
[root@localhost ~]# docker load -i zabbix-server-mysql.tar
编辑zabbix-server启动需要的一些环境变量并形成参数文件,这里我新建了一个zabbix_server_8.list的文件
[root@localhost docker_env_file]# cat zabbix_server_8.list
MYSQL_DATABASE=zabbix
MYSQL_USER=zabbix
MYSQL_PASSWORD=zabbix
ZBX_JAVAGATEWAY=zabbix-java-gateway
DB_SERVER_HOST=zabbix-mysql-8
执行docker run 生成zabbix-server容器:
[root@localhost docker_env_file]# docker run --name zabbix-server-mysql-8 -t \
> --net=zabbix_app_net \
> --env-file /root/docker_env_file/zabbix_server_8.list \
> -v /root/zabbix_etc_file/alertscripts:/usr/lib/zabbix/alertscripts \
> -p 10051 \
> -d zabbix/zabbix-server-mysql:centos-4.0.3
11aca8faffb4a83dadc840c78de03e5e36925e1a28a3a26149035a7c84933213
[root@localhost docker_env_file]#
使用docker logs 查看日志:
[root@localhost zabbix_etc_file]# docker logs zabbix-server-mysql-8
** Deploying Zabbix server with mysql database
** Preparing the system
** Preparing Zabbix server
********************
* DB_SERVER_HOST: zabbix-mysql-8
* DB_SERVER_PORT: 3306
* DB_SERVER_DBNAME: zabbix
* DB_SERVER_ZBX_USER: zabbix
* DB_SERVER_ZBX_PASS: zabbix
********************
3.安装zabbix-web容器
先加载打包好的镜像:
[root@localhost ~]# docker load -i zabbix-web-nginx-mysql.tar
87feb0ffa19d: Loading layer [==================================================>] 39.12MB/39.12MB
ad445717a861: Loading layer [==================================================>] 151.8MB/151.8MB
846df8ae3852: Loading layer [==================================================>] 6.144kB/6.144kB
38f6d8cf0be4: Loading layer [==================================================>] 4.608kB/4.608kB
7d7b3799a372: Loading layer [==================================================>] 5.632kB/5.632kB
f3420e4e6577: Loading layer [==================================================>] 4.096kB/4.096kB
f2a44f32a642: Loading layer [==================================================>] 4.608kB/4.608kB
0f64cc432ff7: Loading layer [==================================================>] 25.09kB/25.09kB
a332aa3aec7f: Loading layer [==================================================>] 3.072kB/3.072kB
f4f6763090ac: Loading layer [==================================================>] 45.06kB/45.06kB
Loaded image: zabbix/zabbix-web-nginx-mysql:centos-4.0.3
编辑zabbix-web启动需要的一些环境变量并形成参数文件,这里我新建了一个zabbix_web_8.list的文件
[root@localhost docker_env_file]# cat zabbix_web_8.list
DB_SERVER_HOST=zabbix-mysql-8
MYSQL_USER=zabbix
MYSQL_PASSWORD=zabbix
ZBX_SERVER_HOST=zabbix-server-mysql-8
执行docker run 生成zabbix-web容器:
[root@localhost docker_env_file]# docker run --name zabbix-web-nginx-mysql-8 \
> --net=zabbix_app_net \
> -p80 \
> --env-file /root/docker_env_file/zabbix_web_8.list \
> -d zabbix/zabbix-web-nginx-mysql:centos-4.0.3
\2328085d277e3763fc36e3202bead2168f67c54adc75298a08732d0d9800d737
[root@localhost docker_env_file]#
查看在宿主机的映射端口:
[root@localhost docker_env_file]# docker port zabbix-web-nginx-mysql-8
80/tcp -> 0.0.0.0:32777
浏览器打开页面:
登录zabbix使用默认用户Admin密码zabbix
本次安装参考的相关文档:
https://hub.docker.com/_/mysql
https://dev.mysql.com/doc/refman/8.0/en/linux-installation-docker.html