docker部署zabbix

发布时间 2023-08-04 22:32:51作者: O波V步

Zabbix基础监控架构图:

Zabbix的架构信息:

1. zabbix-server

zabbix 的server 端,负责接收agent发送过来的监控数据,并且提供zabbix的所有核心功能。

2. database

用于存储监控数据和配置信息的数据库,目前常用的有mysql和postgresql两种数据库。

3. zabbix-web

zabbix的UI端,提供操作控制台和监控展示等功能。

4. zabbix-java-gateway

用于监控Java程序的JVM状态,zabbix本身无法直接从jvm获取监控指标,需使用该网关来实现。

5. zabbbix-agent

zabbix的代理端,部署在目标主机上,用于收集主机的监控数据,并提供给到zabbix server。

 

一、Linux系统中docker部署zaabix

`docker run`命令是Docker中用于创建并运行容器的主要命令之一,它支持多种参数来定义容器的不同行为。

下面是一些常用的`docker run`参数:

`-d`:以后台模式(detached mode)运行容器,即容器在后台运行,不占据当前终端。可以通过`docker logs`命令查看容器日志。
`-p host_port:container_port`:将容器内部的端口映射到主机上的某个端口。例如,`-p 8080:80`将容器内部的80端口映射到主机的8080端口。
`-v host_path:container_path`:将主机上的某个路径挂载到容器内部的某个路径。这样可以在容器和主机之间共享文件或目录。例如,`-v /host/path:/container/path`将主机的`/host/path`挂载到容器的`/container/path`。
`--name container_name`:为容器指定一个名称。
`-e key=value`:设置环境变量。
`-i`:保持容器的标准输入(stdin)打开,即使没有连接到终端。
`-t`:为容器分配一个伪终端(pseudo-TTY),以便进行交互。
`--network network_name`:指定容器使用的网络。
`--restart restart_policy`:设置容器在退出时的自动重启策略。可用的选项有`no`(默认,不重启)、`always`(总是重启)、`on-failure`(只在非0退出码时重启)和`unless-stopped`(除非手动停止容器,否则一直重启)。
`--rm`:容器停止后自动删除容器。适用于一次性任务。
`--cpu-shares value`:设置容器的CPU共享权重。值越高,容器获得的CPU资源越多。默认值为0,表示无限制。
`--memory value`:设置容器的内存限制。可以指定单位如`--memory 512m`(512MB)或`--memory 2g`(2GB)。
`--user username`:设置容器运行的用户。
`--privileged`:以特权模式(privileged mode)运行容器,即容器内的进程拥有所有的主机的特权。请谨慎使用。
  
这些只是一些常用的`docker run`参数,还有更多可以用于更精细控制容器行为的参数。你可以通过`docker run --help`命令或查看官方文档来获取更详细的信息。

1. 更改数据默认存储位置

docker默认存储路径:/var/lib/docker

cat /etc/docker/daemon.json

{
"registry-mirrors": ["http://hub-mirror.c.163.com"],
"data-root": "/usr/local/docker"
}

data-root /graph:取决于具体的系统版本或者kernel版本决定要用data-root还是graph

# 停止docker
$ systemctl stop docker
# 设置docker新存储路径
$ mv /var/lib/docker /usr/local/docker

# 修改docker路径
$ vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
    "graph": "/usr/local/docker"
}
# 启动docker
$ systemctl start docker

# 查看docker进程信息
$ docker info

2.部署docker-zabbix

2.0创建专用于 Zabbix 组件容器的网络

# 1.bridge模式
docker默认网络模式。此模式将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。开启的容器会自动分配和IP在一个网段的ip地址,并且开启的容器的ip以IP为基础递增关闭容器之后,ip会自动释放。bridge模式只有宿主机才能与运行在其上面的容器进行通信。
# 2.host模式
容器将不会虚拟出自己的网卡,配置自己的IP等,而是直接与宿主机的共享P和端口。
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好,网络的安全性变差。
# 3.none模式
该模式关闭了容器的网络功能。
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过–network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。

创建专用于 Zabbix 组件容器的网络(指定IP范围)

$ docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-network
也可以:
docker network create zabbix-network # 查看的docker network $ docker network ls NETWORK ID NAME DRIVER SCOPE 14c25119dd06 bridge bridge local 4e2782140647 host host local b25888b8c26a none
null local cfc3bf2124af zabbix-net bridge local # 查看新增的网络 $ ip a 5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:31:ce:6a:ce brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever 6: br-cfc3bf2124af: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:cd:35:b7:4c brd ff:ff:ff:ff:ff:ff inet 172.20.240.0/16 scope global br-cfc3bf2124af valid_lft forever preferred_lft forever

2.1 拉取镜像

  #查看所有版本:docker search *    如:docker search mysql

  docker pull zabbix/zabbix-web-nginx-mysql:alpine-6.4-latest

  docker pull zabbix/zabbix-server-mysql:alpine-6.4-latest

  docker pull mysql:8.0

  #拉取最新版

  docker pull zabbix/zabbix-web-nginx-mysql:latest

  docker pull zabbix/zabbix-server-mysql:latest

  docker pull mysql:latest

查看下载的内容

docker images

2.2 启动容器

1.运行mysql 镜像,创建mysql容器

启动一个单独的数据库mysql用于保存zabbix数据,定义了数据库名zabbix,数据库用户zabbix,密码zabbix,在本地目录/usr/local/zabbix/data中持久化保存mysql容器运行中的数据,确保容器退出运行后,数据不会丢失,最后两条是定义了数据库的字符集为utf8,解决了mysql数据库保存中文的问题。

docker run -dit --name zabbix-mysql --restart always \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e TZ=Asia/Shanghai \

--network=zabbix-network \
-p 3306:3306 \
-d mysql:5.7 \
-v /usr/local/zabbix/data:/var/lib/mysql \
-v /usr/local/zabbix/data/conf:/etc/mysql/my.cnf \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
--character-set-server=utf8 \
--collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password

##也可指定IP
--ip=172.20.240.1 \
##最高权限
--privileged=true

防火墙规则

firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

无法启动问题

# mysql容器重启策略
问题描述:
如果创建mysql容器时指定--restart参数,则无法启动容器
--restart unless-stopped \
解决办法:
需要创建后,手工更新容器重启策略:
$ docker update --restart=unless-stopped zabbix-mysql

  其他的重启策略选项,例如:

  - `always` 是用于 Docker 容器的重启策略选项,表示无论何时 Docker 守护进程启动或重新启动,都尝试自动重启该容器。
  - `no`:不自动重启容器(默认选项)。
  - `on-failure[:max-retries]`:只在容器非正常退出时重启,可以指定最大重试次数。
  - `unless-stopped`:除非显式停止容器,否则始终尝试自动重启。

连接测试

# 连接mysql
$ docker exec -it zabbix-mysql /bin/bash
root@28c91f44918a:
/# whereis mysql mysql: /usr/bin/mysql /usr/lib/mysql /etc/mysql root@28c91f44958a:/# mysql -u root -p Enter password:
2.zabbix-java-gateway镜像

Zabbix Java gateway 的守护进程是用 Java 编写。为了在特定主机上找到 JMX 计数器的值,Zabbix server 向 Zabbix Java gateway 发送请求,后者使用 JMX 管理 API 来远程查询相关的应用。该应用不需要安装额外的软件。只需要在启动时,命令行添加-Dcom.sun.management.jmxremote选项即可。

创建zabbix-java-gateway容器

docker run -dit -p 10052:10052 --restart=always --name=zabbix-java-gateway \
-e TZ=Asia/Shanghai \
--network=zabbix-network \
-d zabbix/zabbix-java-gateway:latest

##也可指定IP
--ip=172.20.240.2 \
3.运行zabbix-server-mysql镜像(zabbix-server)

创建zabbix-server-mysql容器

启动zabbix server服务,并关联这个服务到上面已经启动的mysql数据库实例上,确保zabbix的数据可以保存到mysql数据库中。

docker run -dit --name=zabbix-server-mysql --restart=always \
-e DB_SERVER_HOST="zabbix-mysql" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \

-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
-e TZ=Asia/Shanghai \
--network=zabbix-network \
-p 10051:10051 \
-v /usr/local/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-v /usr/local/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
-v /usr/local/zabbix/modules:/var/lib/zabbix/modules \
-v /usr/local/zabbix/enc:/var/lib/zabbix/enc \
-v /usr/local/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys \
-v /usr/local/zabbix/ssl/certs:/var/lib/zabbix/ssl/certs \
-v /usr/local/zabbix/ssl/keys:/var/lib/zabbix/ssl/keys \
-v /usr/local/zabbix/ssl/ssl_ca:/var/lib/zabbix/ssl/ssl_ca \
-v /usr/local/zabbix/snmptraps:/var/lib/zabbix/snmptraps \
-v /usr/local/zabbix/mibs:/var/lib/zabbix/mibs \
-d zabbix/zabbix-server-mysql:latest

##也可指定IP --ip=172.20.240.3 \ 

防火墙规则

# 开启防火墙
$ systemctl enable firewalld
$ systemctl start firewalld

# 添加防火墙端口
firewall-cmd --zone=public --add-port=10051/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

挂在说明:

# 不需要的参数
--link zabbix-mysql:mysql \
--link--link zabbix-java-gateway:zabbix-java-gateway

/usr/lib/zabbix/alertscripts该卷用于保存自定义警报脚本,它是AlertScriptsPath参数conf
/usr/lib/zabbix/externalscripts外部检查(项目类型)使用该卷,它是ExternalScripts参数conf
/var/lib/zabbix/modules该卷允许加载其他模块并使用LoadModule功能扩展Zabbix服务器。
/var/lib/zabbix/enc该卷用于存储TLS相关文件。这些文件的名称使用规定ZBX_TLSCAFILE,ZBX_TLSCRLFILE,ZBX_TLSKEY_FILE和ZBX_TLSPSKFILE变量。
/var/lib/zabbix/ssh_keys该卷用作SSH检查和操作的公钥和私钥的位置。它是SSHKeyLocation参数zabbix_server.conf。
/var/lib/zabbix/ssl/certs该卷用作客户端身份验证的SSL客户端证书文件的位置。它是SSLCertLocation参数zabbix_server.conf。
/var/lib/zabbix/ssl/keys该卷用作客户端身份验证的SSL私钥文件的位置。它是SSLKeyLocation参数zabbix_server.conf。
/var/lib/zabbix/ssl/ssl_ca该卷用作SSL服务器证书验证的证书颁发机构(CA)文件的位置。它是SSLCALocation参数zabbix_server.conf。
/var/lib/zabbix/snmptraps该卷用作snmptraps.log文件的位置。它可以由zabbix-snmptraps容器共享,并volumes_from在创建Zabbix服务器的新实例时使用Docker选项继承。可以使用共享卷和交换ZBX_ENABLE_SNMP_TRAPS环境变量来启用SNMP陷阱处理功能true。
/var/lib/zabbix/mibs该卷允许添加新的MIB文件。它不支持子目录,必须放置所有MIB /var/lib/zabbix/mibs
4.运行zabbix-web-nginx-mysql镜像

创建zabbix-web-nginx-mysql容器,启动zabbix前端web界面实例,将web界面实例与前面的mysql数据库服务实例

docker run -dit --name zabbix-web-nginx-mysql --restart=always \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="zabbix-mysql" \

-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix" \
-e MYSQL_ROOT_PASSWORD="zabbix" \
-e PHP_TZ=Asia/Shanghai \
-e TZ=Asia/Shanghai \
--network=zabbix-net \
-p 8081:8080 \
-v /etc/timezone:/etc/timezone \
-v /etc/localtime:/etc/localtime \
-d zabbix/zabbix-web-nginx-mysql:latest


##也可指定IP
--ip=172.20.240.4 \

挂载说明:

# 取消以下参数
--link zabbix-mysql:mysql \
--link zabbix-server-mysql:zabbix-server \

--link zabbix-mysql:mysql 连接数据库实例,zabbix-mysql必须要与第一步的--name zabbix-mysql完全一致 --link zabbix-server-mysql:zabbix-server 连接zabbix服务器实例,zabbix-server-mysql必须要与第二步的--name zabbix-server-mysql完全一致 DB_SERVER_HOST变量的值要与第二步指定的-e DB_SERVER_HOST="zabbix-mysql"一致

添加防火墙端口

firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

启动

# Zabbix 前端已准备就绪,默认用户名是Admin,密码zabbix。
http://localhost:8081
# 访问zabbix-web服务时,发现监控首页提示错误:
Zabbix agent is not available (for 3m)
需要安装zabbix-agent,并配置zabbix-agent的ip,看后续

查看安装情况

docker ps

2.3 查看2.4 访问

  • IP+8081

  • 默认用户名/密码是:Admin/zabbix

二、windows系统中docker部署zaabix

1.安装部署

1. 首先,确保您已经安装了Docker

可以通过运行`docker --version`命令来验证。

2.拉取镜像

打开命令行界面,运行以下命令拉取Zabbix官方提供的Docker镜像:

#查看所有版本:docker search *    如:docker search mysql
docker pull mysql:latest
docker pull zabbix/zabbix-server-mysql:latest
docker pull zabbix/zabbix-web-nginx-mysql:latest
docker pull zabbix/zabbix-java-gateway:latest

#5.7
docker pull mysql:5.7

3. 创建一个网络,用于连接Zabbix容器和MySQL容器

docker network create zabbix-network

4.创建数据存储目录

要在Windows系统上使用Docker部署Zabbix并确保在Docker重启后服务和数据不丢失,可以按照以下步骤进行操作:

1. 创建一个用于持久化数据的目录,用于保存Zabbix相关数据。例如,可以创建一个名为`zabbix-data`的目录。

2. 在创建的`zabbix-data`目录中创建三个子目录`mysql-data`、`zabbix-server-data`和`zabbix-web-data`,分别用于持久化存储MySQL、Zabbix Server和Zabbix Web的数据。

 

5. 运行MySQL容器

挂载`mysql-data`目录并设置MySQL的数据库名称、用户和密码:

docker run -dit -p 3306:3306 --name zabbix-mysql --restart always -e MYSQL_DATABASE=zabbix -e MYSQL_USER=zabbix -e MYSQL_PASSWORD=zabbix -e MYSQL_ROOT_PASSWORD=zabbix -e TZ=Asia/Shanghai --network=zabbix-network -v F:\zabbix-data\mysql-data:/var/lib/mysql mysql:5.7 --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password

将`/path/to/zabbix-data/mysql-data`替换为实际的本地目录路径,用于挂载`mysql-data`目录。

6.运行zabbix-java-gateway镜像

Zabbix Java gateway 的守护进程是用 Java 编写。为了在特定主机上找到 JMX 计数器的值,Zabbix server 向 Zabbix Java gateway 发送请求,后者使用 JMX 管理 API 来远程查询相关的应用。该应用不需要安装额外的软件。只需要在启动时,命令行添加-Dcom.sun.management.jmxremote选项即可。

创建zabbix-java-gateway容器

docker run -dit -p 10052:10052 --restart=always --name=zabbix-java-gateway -e TZ=Asia/Shanghai --network=zabbix-network -d zabbix/zabbix-java-gateway:latest

7. 运行Zabbix Server容器

连接到MySQL容器

挂载`zabbix-server-data`目录:

docker run -dit -p 10051:10051 --name zabbix-server --restart=always -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER=zabbix -e MYSQL_PASSWORD=zabbix -e MYSQL_ROOT_PASSWORD=zabbix -e ZBX_JAVAGATEWAY="zabbix-java-gateway" -e TZ=Asia/Shanghai --network=zabbix-network -v F:\zabbix-data\zabbix-server-data:/var/lib/zabbix -d zabbix/zabbix-server-mysql:latest

将`/path/to/zabbix-data/zabbix-server-data`替换为实际的本地目录路径,用于挂载`zabbix-server-data`目录。

8. 运行Zabbix Web容器

连接到Zabbix Server容器,挂载`zabbix-web-data`目录:

docker run -dit -p 8081:8080 --name zabbix-web --restart=always -e ZBX_SERVER_HOST=zabbix-server -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbix" -e MYSQL_ROOT_PASSWORD="zabbix" -e PHP_TZ=Asia/Shanghai -e TZ=Asia/Shanghai --network=zabbix-network -e ZBX_SERVER_PORT=10051 -v F:\zabbix-data\zabbix-web-data:/var/lib/zabbix -d zabbix/zabbix-web-nginx-mysql:latest

将`/path/to/zabbix-data/zabbix-web-data`替换为实际的目录路径,用于挂载`zabbix-web-data`目录。

现在,通过以上步骤,您可以在Windows系统上使用Docker部署Zabbix,并确保在Docker重启后服务和数据不会丢失。重启Docker后,只需重新启动之前创建的容器即可重新启动Zabbix服务,数据会保留在相应的挂载目录中。请根据实际情况进行调整,并确保目录路径和挂载配置正确。

9.访问

现在您可以通过浏览器访问http://localhost:8081来打开Zabbix的Web界面。

重启三个服务

docker restart zabbix-server zabbix-web zabbix-mysql
docker start zabbix-server zabbix-web zabbix-mysql
docker stop zabbix-server zabbix-web zabbix-mysql

进入三个服务部署的路径:

docker exec -it <container-name> bash
将`<container-name>`替换为相应容器的名称,
例如`zabbix-server`、`zabbix-web`或`zabbix-mysql-server`

docker exec -it zabbix-server bash
docker exec -it zabbix-web bash
docker exec -it zabbix-mysql bash

退出Ctrl+D或exit

10.删除重新部署方法

如果想要删除现有的Zabbix服务并重新部署它,您可以按照以下步骤进行操作:

1. 停止并删除所有运行中的容器

可以使用以下命令停止并删除所有容器:

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

删除制定服务
docker stop <service-name>
docker rm <service-name>

这将停止并删除所有正在运行的容器,以便您可以重新部署Zabbix服务。

2. 删除现有的Zabbix相关数据目录

根据您之前使用的目录结构,您可以删除`zabbix-data`目录以及其子目录,用于持久化保存Zabbix的数据。

rm -rf /path/to/zabbix-data

替换`/path/to/zabbix-data`为实际的目录路径。

注意:此步骤将删除与Zabbix相关的数据。请确保在执行之前备份重要数据。

3. 查看日志
使用Docker命令 `docker logs <container-name>` 
或者`docker-compose logs <service-name>`

三、zabbix-agent(yum安装)

zabbix-agent用于监控服务器状态,直接安装在被监控的服务器上,不要使用docker安装。

$ yum install -y zabbix-agent

# 配置agent,设置服务端地址
$ vim /etc/zabbix/zabbix_agentd.conf
# 如果在zabbix-server上安装agent,需要配置zabbix-server的docker地址:
Server=172.20.240.3
ServerActive=172.20.240.3
# 如果在被监控服务器上安装agent,需要配置zabbix-server的宿主机地址:
Server=192.168.1.1
ServerActive=192.168.1.1

# 注释掉Hostname配置,让agent自动解析
# Hostname=****
# 如果操作系统不允许创建zabbix用户,需要使用root运行agent,修改配置:
AllowRoot=1

启动 Zabbix agent

设置开机zabbix-agent开机启动

$ systemctl enable zabbix-agent
$ systemctl restart zabbix-agent
$ systemctl status zabbix-agent

防火墙规则

firewall-cmd --zone=public --add-port=10050/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

 

四、移植

1.将服务存为镜像包并导出

要将已部署好的Zabbix服务(包括数据库)移植到其他Windows或Linux系统上的Docker容器中,可以按照以下步骤进行操作:

1. 导出Zabbix服务器的Docker镜像

- 确保源系统上已经存在一个部署好Zabbix服务的Docker容器。

停止正在运行的Zabbix容器:

docker-compose down 或 docker stop [CONTAINER_ID]

确保所有相关的容器都已停止。

2.查找Zabbix容器的名称或ID

docker ps -a

3.导出容器为镜像

在PowerShell或命令提示符中运行以下命令:

docker commit <容器ID> zabbix-image:tag

##例如
docker commit 3f6eaa14c2d7 zabbix-mysql:5.7
docker commit 69dc19bc3c2f zabbix-server
docker commit 37ee3a304dcc zabbix-web
docker commit 32dbe2db3fe3 zabbix-java-gateway

`<容器ID>` 是Zabbix服务器容器的ID,`zabbix-image` 是要创建的Docker镜像名称,`tag`为版本号,也可以不写。您可以根据需要指定适当的镜像名称。

4. 验证镜像

查找刚刚创建的Zabbix镜像,它应该显示在列表中。

docker images

5. 将镜像保存为文件

运行以下命令将镜像保存为.tar文件:

现在,您已成功将部署的Zabbix服务导出为镜像,并将其保存为.tar文件(zabbix-image.tar)。

docker save -o zabbix-image.tag.tar zabbix-image:tag

请注意,在导出的镜像中,仅包含了在Zabbix容器中所做的更改,而不包含任何敏感数据或配置文件。

使用以下命令将镜像导出到本地文件夹(此处示例导出到当前目录):
- 对于Windows系统(PowerShell):

docker save -o .\zabbix-image.tar zabbix-image
##导出到指定文件夹
docker save -o C:\export\zabbix-image.tar zabbix-image

##例如
docker save -o F:\backup\zabbix-mysql-5.7.tar zabbix-mysql:5.7
docker save -o F:\backup\zabbix-server.tar zabbix-server
docker save -o F:\backup\zabbix-web.tar zabbix-web
docker save -o F:\backup\zabbix-java-gateway.tar zabbix-java-gateway

- 对于Linux系统(命令行):

docker save -o ./zabbix-image.tar zabbix-image
##导出到指定文件夹
docker save -o /home/user/export/zabbix-image.tar zabbix-image

将`zabbix-image`替换为要导出的镜像的名称或ID。

6. 确认导出的镜像文件已保存到指定的本地文件夹中

现在,您已成功将下载的镜像或部署后的Zabbix服务镜像导出到Windows或Linux系统的本地文件夹中。

可以在需要的时候将此镜像导入到其他Docker环境中,或备份、共享该镜像文件。

7. 导出Zabbix数据库

 

要将Docker容器中部署的数据库的数据导出备份到Windows或Linux系统的本地文件夹中,您可以按照以下步骤操作:

1. 确定您需要导出数据库数据的Docker容器的名称或ID。使用以下命令列出所有正在运行或已停止的容器:

docker ps -a

2. 创建一个本地文件夹,用于存储导出的数据库数据。

3. 使用以下命令从正在运行的或已停止的Docker容器中导出数据库数据:
- 对于MySQL容器,使用以下命令:

docker exec <container_name_or_id> sh -c 'exec mysqldump --all-databases -uroot -p"password"' > <host_directory>/backup.sql

- 对于PostgreSQL容器,使用以下命令:

docker exec <container_name_or_id> pg_dumpall -U <username> -f <host_directory>/backup.sql

参数

将`<container_name_or_id>`替换为数据库容器的名称或ID,
`<host_directory>`替换为要导出数据的本地文件夹路径。
对于MySQL,确保将`"password"`替换为实际的数据库密码。

对于PostgreSQL,将`<username>`替换为实际的用户名。
- `-U postgres`:指定要连接的 PostgreSQL 数据库的用户名(这里使用默认用户名 "postgres")。
- `-d mydb`:指定要导出备份的数据库名称(这里的 "mydb" 应替换为实际的数据库名)。
- `-f /backup/backup.sql`:指定要导出的备份文件的路径和名称。

例如,要将具有名称`mysql-container`的正在运行的MySQL数据库容器中的所有数据库导出到Windows系统的`C:\backup`文件夹中,

可以使用以下命令:

docker exec mysql-container sh -c 'exec mysqldump --all-databases -uroot -p"password"' > C:\backup\backup.sql

##例如:导出指定的数据库zabbix
docker exec zabbix-mysql sh -c 'exec mysqldump -uzabbix -pzabbix zabbix' > F:\backup\zabbix.sql

如果要将具有名称`postgresql-container`的正在运行的PostgreSQL数据库容器中的所有数据库导出到Linux系统的`/home/user/backup`文件夹中,

可以使用以下命令:

docker exec postgresql-container pg_dumpall -U postgres -f /home/user/backup/backup.sql

##例如:导出指定的数据库zabbix
docker exec postgresql-container pg_dump -U postgres -d mydb -f /backup/backup.sql

4. 在指定的本地文件夹中,您将找到从Docker容器中导出的数据库备份文件(backup.sql)。

备份数据库可以用第三方数据,如Navicat。

 

2.将服务导入docker

1. 在目标系统上导入镜像和数据库备份

- 在目标系统上导入之前导出的Zabbix镜像文件。

docker load -i zabbix-image.tar

在Windows系统中,使用以下命令:

docker load -i C:\path\to\image.tar

如果是在Linux系统中,使用以下命令:

docker load -i /path/to/image.tar

将`C:\path\to\image.tar`或`/path/to/image.tar`替换为镜像包文件的路径和名称。

2.还原数据库

- 在目标系统上安装并配置正确的数据库服务器,例如MySQL如上,

- 将之前导出的Zabbix数据库备份文件导入到目标系统的数据库中。

示例命令:

mysql -u [数据库用户名] -p [数据库名] < zabbix_backup.sql

3. 在目标系统上启动Zabbix容器

- 使用Docker命令在目标系统的容器中启动之前导入的Zabbix镜像。
- 映射容器端口,指定正确的环境变量和挂载数据卷等参数。

示例命令:

docker run -d -p 80:80 -p 443:443 --name zabbix-container 
-v /path/to/zabbix/data:/var/lib/zabbix
-v /path/to/zabbix/logs:/var/log/zabbix
-e DB_SERVER_HOST=<数据库服务器主机>
-e MYSQL_USER=<数据库用户名>
-e MYSQL_PASSWORD=<数据库密码>
-e MYSQL_DATABASE=<数据库名> zabbix-image:latest

注意:如果是Windows系统,要将命令放到同一行!!!

这将在目标系统的Docker容器中启动Zabbix服务,并将数据卷和环境变量与容器进行关联。

完成上述步骤后,Zabbix服务器应在目标系统的Docker容器中成功运行。确保在迁移过程中遵循适当的操作和配置,并根据具体环境和要求进行调整。