docker部署zabbix
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等,而是直接与宿主机的共享IP和端口。
如果启动容器的时候使用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范围)
##指定网关以及IP范围
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 zabbix-network
##指定子网以及IP范围
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-network
##也可不指定IP:
docker network create zabbix-network
##参数
`--subnet`参数用于指定网络的子网
`--ip-range`参数用于指定IP地址范围
`--gateway`参数指定了网络的网关
# 查看的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:8.0 \
-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
#8.0
docker pull mysql:8.0
3. 创建一个网络,用于连接Zabbix容器和MySQL容器
##指定网关以及IP范围
docker network create --subnet=192.168.1.0/24 --gateway=192.168.1.1 zabbix-network
##指定子网以及IP范围
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-network
##也可不指定IP:
docker network create zabbix-network
##参数
`--subnet`参数用于指定网络的子网
`--ip-range`参数用于指定IP地址范围
`--gateway`参数指定了网络的网关
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:8.0 --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password
##指定IP:
--ip=192.168.1.160
将`/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
##指定IP:
--ip=192.168.1.161
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
##指定IP:
--ip=192.168.1.162
将`/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
指定IP:
--ip=192.168.1.163
将`/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:8.0
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-8.0.tar zabbix-mysql:8.0
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容器中成功运行。确保在迁移过程中遵循适当的操作和配置,并根据具体环境和要求进行调整。