> 技术文档 > rtpengine的docker化

rtpengine的docker化


概述

原本希望使用kamailio+rtpproxy来转发媒体,但是rtpproxy对于多网卡服务器的支持不好,无法正常转发多网卡之间的媒体流。

rtpengine没有官方的docker镜像可以直接使用,只能使用源码自己编一个。

环境

CentOS 7.9

rtpengine 13.1.1.6

下载

目录结构如下。

├── docker-compose.yml

├── Dockerfile

├── rtpengine.mr13.1.1.6

├── sources.list.bookworm

└── sources.list.bullseye

下载源代码,指定版本为13.1.1.6。

git clone https://github.com/sipwise/rtpengine.git rtpengine.mr13.1.1.6 -b mr13.1.1.6

sources.list.bookworm文件内容如下。

deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free

deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free

deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free

dockerfile

dockerfile文件内容如下。

FROM debian:bookwormCOPY ./sources.list.bookworm /etc/apt/sources.listCOPY ./rtpengine.mr13.1.1.6 /usr/local/src/rtpengineRUN apt-get update \\ && apt-get -y --quiet upgrade curl iproute2 \\ && apt-get install -y --no-install-recommends ca-certificates gcc g++ make \\ build-essential git libopus-dev libiptc-dev libavfilter-dev \\ libevent-dev libpcap-dev libxmlrpc-core-c3-dev markdown libmnl-dev libnftnl-dev \\ libjson-glib-dev default-libmysqlclient-dev libhiredis-dev libssl-dev pandoc \\ libcurl4-openssl-dev libavcodec-extra gperf libspandsp-dev libwebsockets-dev \\ && cd /usr/local/src \\ && chmod -R 777 /usr/local/src/rtpengine \\ && cd rtpengine/daemon \\ && make && make install \\ && cp /usr/local/src/rtpengine/daemon/rtpengine /usr/local/bin/rtpengine \\ && rm -Rf /usr/local/src/rtpengine \\ && apt-get purge -y --quiet --force-yes --auto-remove ca-certificates gcc g++ make build-essential git markdown \\ && rm -rf /var/lib/apt/* \\ && rm -rf /var/lib/dpkg/* \\ && rm -rf /var/lib/cache/* \\ && rm -Rf /var/log/* \\ && rm -Rf /usr/local/src/* \\ && rm -Rf /var/lib/apt/lists/* CMD [\"rtpengine\"]

运行命令,创建docker镜像。

sudo docker build --no-cache -t 10.55.55.136:5000/zr/rtpengine:mr13.1.1.6-4 .

配置

kamailio和rtpengine的配置文件都映射到宿主机的/usr/local/kamailio/etc目录。

目录下的配置文件包括dispatcher.list kamailio.cfg rtpengine.conf。

配置内容略过。

启动

编写docker-compose.yml,启动docker容器。

docker-compose.yml内容如下。注意rtpengine启动的时候需要加-f参数,前台运行,否则docker容器会一直重启。

services: rtpengine: image: 10.55.55.136:5000/zr/rtpengine:mr13.1.1.6-4 container_name: rtpengine volumes: - /usr/local/kamailio/etc:/etc/rtpengine command: > /usr/local/bin/rtpengine -f restart: unless-stopped environment: - TZ=Asia/Shanghai network_mode: \"host\" privileged: true logging: driver: json-file options: max-size: \"100m\" max-file: \"10\" ulimits: nproc: 65535 nofile: soft: 40000 hard: 40000 # Kamailio Service kamailio: image: 10.55.55.136:5000/zr/kamailio:5.8.3-bullseye container_name: kamailio volumes: - /usr/local/kamailio/etc:/etc/kamailio environment: - TZ=Asia/Shanghai command: > -m64 -M8 restart: unless-stopped network_mode: \"host\" logging: driver: json-file options: max-size: \"100m\" max-file: \"10\" ulimits: nproc: 65535 nofile: soft: 40000 hard: 40000 depends_on: - rtpengine

启动命令。

sudo docker-compose up -d

查看进程和端口,运行正常。

总结

rtpproxy相对rtpengine更容易上手,但是功能也更简单。

kamailio+rtpengine的组合还有很多配置方案,需要慢慢熟悉。

空空如常

求真得真