告别虚拟机!在Windows本地用Docker一键部署ZLMediaKit和wvp-GB28181-pro
Windows下Docker极简部署ZLMediaKit与wvp-GB28181-pro全指南传统Windows环境部署流媒体服务往往需要手动安装Java、Maven、Node.js、Redis等十余种依赖光是解决环境冲突就可能耗费半天时间。而Docker容器化方案能将部署时间压缩到10分钟以内——这正是本文要分享的零依赖、可移植、一键式的现代部署实践。1. 环境准备与Docker配置1.1 Windows Docker环境优化确保系统版本为Windows 10 2004及以上或Windows 11并开启WSL2后端性能比Hyper-V提升20%以上。安装Docker Desktop后需进行关键配置# 验证安装成功 docker --version docker-compose --version必须调整的配置项设置内存≥4GB流媒体服务内存需求较高启用Kubernetes会导致资源占用建议关闭在Settings → Resources → WSL Integration中启用Ubuntu集成提示Windows版Docker默认使用NAT网络模式需特别注意端口映射规则1.2 镜像加速与资源准备为避免拉取镜像过慢建议配置国内镜像源。新建C:\Users\用户名\.docker\daemon.json{ registry-mirrors: [ https://docker.mirrors.ustc.edu.cn, https://hub-mirror.c.163.com ] }所需镜像清单组件官方镜像替代镜像ZLMediaKit无官方镜像zlmediakit/zlmwvp-GB28181-pro无官方镜像需自行构建Redisredis:6-alpine-MySQL可选mysql:5.7-2. ZLMediaKit容器化部署2.1 快速启动ZLM容器使用社区维护的镜像可跳过编译过程docker run -d --name zlm \ -p 1935:1935 -p 8080:8080 -p 554:554 \ -p 10000:10000/udp \ -v D:/docker/zlm/config:/opt/zlm/config \ zlmediakit/zlm:latest关键端口说明1935: RTMP推拉流端口8080: HTTP API/WebRTC端口554: RTSP服务端口10000/udp: RTP传输端口2.2 自定义配置调整挂载的配置文件config.ini需要修改以下核心参数[general] mediaServerIdyour_server_id # 需与wvp配置一致 rtp_proxy.port_range30000-30500 hook.admin_paramssecretyour_secret_key验证服务是否正常curl http://localhost:8080/index/api/getServerConfig3. wvp-GB28181-pro容器化构建3.1 自定义镜像构建由于没有官方镜像需要编写Dockerfile构建FROM maven:3.6.3-jdk-8 AS build RUN git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git \ cd wvp-GB28181-pro \ mvn package -DskipTests FROM openjdk:8-jre COPY --frombuild /wvp-GB28181-pro/target/*.jar /app.jar EXPOSE 18080 ENTRYPOINT [java,-jar,/app.jar]构建命令docker build -t wvp-pro:2.0 .3.2 关键配置详解通过volume挂载的application.yml需重点配置media: id: your_server_id # 与ZLM配置一致 ip: host.docker.internal # 特殊域名指向宿主机 http-port: 8080 secret: your_secret_key sip: ip: 192.168.x.x # 本机局域网IP port: 5060注意Windows宿主机与容器通信需使用host.docker.internal而非127.0.0.14. Docker Compose一体化编排4.1 完整编排文件创建docker-compose.yml实现一键启动version: 3 services: zlm: image: zlmediakit/zlm ports: - 1935:1935 - 8080:8080 - 554:554 - 10000:10000/udp volumes: - ./zlm/config:/opt/zlm/config restart: unless-stopped redis: image: redis:6-alpine command: redis-server --requirepass yourpassword ports: - 6379:6379 volumes: - ./redis/data:/data restart: unless-stopped wvp: build: . depends_on: - zlm - redis ports: - 18080:18080 - 5060:5060/udp environment: - TZAsia/Shanghai volumes: - ./wvp/config:/config restart: unless-stopped启动命令docker-compose up -d4.2 网络拓扑解析默认创建的bridge网络结构Windows Host ←→ Docker NAT ←→ wvp容器 ↑ └── ZLM容器端口映射要点SIP协议需要UDP协议支持RTP端口范围需与ZLM配置一致避免使用Windows已占用的80/443等端口5. 运维实践与问题排查5.1 常见问题解决方案摄像头注册失败检查SIP配置中的IP是否为局域网可达地址验证ZLM的hook地址是否可访问curl -X POST http://zlm:8080/index/hook/on_server_keepalive确认防火墙放行了5060/UDP端口WebRTC无法播放检查ZLM的config.ini中WebRTC配置验证STUN服务器可达性telnet stun.stunprotocol.org 34785.2 性能监控方案推荐使用cAdvisorPrometheus监控容器资源monitor: image: gcr.io/cadvisor/cadvisor ports: - 8088:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro关键指标监控项ZLM容器CPU使用率超过70%需扩容RTP丢包率应1%Redis内存占用建议设置maxmemory6. 进阶配置与优化6.1 生产环境改造建议数据库持久化db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: yourpassword volumes: - ./mysql:/var/lib/mysql日志收集方案docker logs -f wvp wvp.log 21 HTTPS配置server { listen 443 ssl; proxy_pass http://wvp:18080; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; }6.2 负载均衡方案当单节点性能不足时可扩展为集群架构[Nginx] | ------------------------------- | | | [ZLM Node1] [ZLM Node2] [WVP Cluster]ZLM集群需要共享媒体文件存储建议采用docker volume create --driver local \ --opt typecifs \ --opt device//nas/share \ --opt ousernameuser,passwordpass