freeswitch的docker构建过程
概述
Docker是一个开源的应用容器引擎,可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,并在任何安装有Docker的机器上运行。
Docker 使你能够将应用程序与基础架构分开,从而可以快速交付软件。
借助 Docker,你可以与管理应用程序相同的方式来管理基础架构。
通过利用 Docker 的方法来快速交付,测试和部署代码,你可以大大减少编写代码和在生产环境中运行代码之间的延迟。
本文的目的是了解最基本的docker构建过程,以便掌握的docker基本知识和原理,暂不涉及dockerfile、compose、集群等信息。
开发环境
centos:CentOS release 7.0 (Final)或以上版本
freeswitch:v1.8.7
GCC:4.8.5
安装docker
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum makecache fast yum -y install docker-ce systemctl start docker
docker常用命令
docker version
docker images
docker ps
docker container ls
构建freeswitch的docker镜像
拉取最新的centos镜像
docker pull centos:centos7
查看
docker images
运行容器
docker run -itd --name centos7-test centos:centos7
通过exec命令进入centos容器
docker exec -it centos7-test /bin/bash
以下命令在dockers容器中运行
yum刷新
yum makecache
yum update
下载freeswitch1.8.7开发库源码
yum install git git clone -b v1.8 https://github.com/signalwire/freeswitch.git freeswitch-1.8.7 cd freeswitch-1.8.7 chmod 777 * -R sh support-d/prereq.sh ./bootstrap.sh -j ./configure --enable-portable-binary --with-gnu-ld --with-python --with-erlang --with-openssl --enable-core-odbc-support --enable-zrtp make make install
修改 /usr/local/freeswitch/conf/autoload_configs/switch.conf.xml
<!-- RTP port range --> <param name="rtp-start-port" value="10000"/> <param name="rtp-end-port" value="12000"/>
退出容器
exit
以下命令在docker宿主机运行
更新镜像文件
docker commit -m="fs1.8.7 register" -a="zr" centos7-test zr/centos7-freeswitch1.8.7
启动注册容器
docker run -itd -p 192.168.0.152:5060:5060/udp -p 192.168.0.152:10000-12000:10000-12000/udp --name centos7-reg zr/centos7-freeswitch1.8.7 /usr/local/freeswitch/bin/freeswitch -nonat
测试
使用eyebean注册测试。
分别注册1001和1002用户。
使用1001拨打1002,可以呼通,1002可以正常接听。
遗留问题
媒体流有问题,双方没有声音。
挂机信令也有问题,无法送达对方。
初步判断是fs的local地址未设置造成。
另外,构建完成的docker镜像比较大,在网络上传输会比较慢,后期可以通过一些镜像瘦身的技术降低文件大小,使得发布包更加好用。
空空如常
求真得真