1. clone配置文件到本地服务器

git clone https://github.com/BetterVoice/freeswitch-container.git

相关Dockerfile如下:

# Jenkins.

FROM ubuntu:16.04
MAINTAINER Thomas Quintana <thomas@bettervoice.com> # Enable the Ubuntu multiverse repository.
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/source.list
RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse">> /etc/apt/source.list
RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/source.list
RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/source.list
# Enable videolan stable repository.
RUN apt-get update && apt-get install -y software-properties-common
RUN add-apt-repository ppa:videolan/stable-daily # Install Dependencies.
# missing in 16.04 libmyodbc
RUN apt-get update && apt-get install -y autoconf automake bison build-essential fail2ban gawk git-core groff groff-base erlang-dev libasound2-dev libavcodec-dev libavutil-dev libavformat-dev libav-tools libavresample-dev libswscale-dev liba52-0.7.4-dev libssl-dev libdb-dev libexpat1-dev libcurl4-openssl-dev libgdbm-dev libgnutls-dev libjpeg-dev libmp3lame-dev libncurses5 libncurses5-dev libperl-dev libogg-dev libsnmp-dev libtiff5-dev libtool libvorbis-dev libx11-dev libzrtpcpp-dev make portaudio19-dev python-dev snmp snmpd subversion unixodbc-dev uuid-dev zlib1g-dev libsqlite3-dev libpcre3-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libladspa-ocaml-dev libmemcached-dev libmp4v2-dev libpq-dev libvlc-dev libv8-dev liblua5.2-dev libyaml-dev libpython-dev odbc-postgresql sendmail unixodbc wget yasm libldap2-dev # Use Gawk.
RUN update-alternatives --set awk /usr/bin/gawk # Install source code dependencies.
ADD build/install-deps.sh /root/install-deps.sh
WORKDIR /root
RUN chmod +x install-deps.sh
RUN ./install-deps.sh
RUN rm install-deps.sh # Configure Fail2ban
ADD conf/freeswitch.conf /etc/fail2ban/filter.d/freeswitch.conf
ADD conf/freeswitch-dos.conf /etc/fail2ban/filter.d/freeswitch-dos.conf
ADD conf/jail.local /etc/fail2ban/jail.local
RUN touch /var/log/auth.log # Download FreeSWITCH.
WORKDIR /usr/src
ENV GIT_SSL_NO_VERIFY=1
#RUN git clone https://freeswitch.org/stash/scm/fs/freeswitch.git -b v1.6
RUN git clone https://github.com/signalwire/freeswitch.git -b v1.6 # Bootstrap the build.
WORKDIR freeswitch
RUN ./bootstrap.sh # Enable the desired modules.
ADD build/modules.conf /usr/src/freeswitch/modules.conf # Build FreeSWITCH.
RUN ./configure --enable-core-pgsql-support
RUN make
RUN make install
RUN make uhd-sounds-install
RUN make uhd-moh-install
# RUN make samples # Post install configuration.
ADD sysv/init /etc/init.d/freeswitch
RUN chmod +x /etc/init.d/freeswitch
RUN update-rc.d -f freeswitch defaults
ADD sysv/default /etc/default/freeswitch
ADD build/bashrc /root/.bashrc
ADD conf/fs_sync /bin/fs_sync # Add the freeswitch user.
RUN adduser --gecos "FreeSWITCH Voice Platform" --no-create-home --disabled-login --disabled-password --system --ingroup daemon --home /usr/local/freeswitch freeswitch
RUN chown -R freeswitch:daemon /usr/local/freeswitch # Add confile file
ADD build/lib/* /usr/lib/
RUN ln /usr/lib/x86_64-linux-gnu/libpcre32.so.3.13.2 /usr/lib/libpcre.so.1
RUN ln /usr/lib/x86_64-linux-gnu/libedit.so.2.0.53 /usr/lib/libedit.so.0
RUN ln /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.10
RUN ln /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.10
ADD build/token.txt /usr/local/freeswitch/bin/
ADD build/robot.conf /usr/local/freeswitch/bin/
ADD build/alitoken_time.cfg /usr/local/freeswitch/bin/
ADD build/alitoken /usr/local/freeswitch/bin/
ADD build/mod_vmd.so /usr/local/freeswitch/mod/
ADD conf/* /usr/local/freeswitch/conf/
RUN chmod +x /usr/local/freeswitch/bin/alitoken # Create the log file.
RUN touch /usr/local/freeswitch/log/freeswitch.log
RUN chown freeswitch:daemon /usr/local/freeswitch/log/freeswitch.log # Open the container up to the world.
EXPOSE 5060/tcp 5060/udp 5080/tcp 5080/udp
EXPOSE 5066/tcp 7443/tcp
EXPOSE 8021/tcp
EXPOSE 64535-65535/udp # Start the container.
CMD service snmpd start && service freeswitch start && tail -f /usr/local/freeswitch/log/freeswitch.log

2. 执行构建命令

docker build -t freeswitch .

3. 启动container

CID=$(sudo docker run --name freeswitch -p 5060:5060/tcp -p 5060:5060/udp -p 5080:5080/tcp -p 5080:5080/udp -p 8021:8021/tcp -p 7443:7443/tcp -v /usr/local/freeswitch-container/conf:/usr/local/freeswitch/conf freeswitch)

参数解读:

-d:后台运行;

-p:端口映射   上述左边5060为宿机端口,右边5060为容器内部端口;

-v:文件挂载   指定宿机目录映射到容器内部的目录(上述就是把宿机/usr/local/freeswitch-container/conf的地址映射到容器内部的/usr/local/freeswitch/conf目录里面去)

执行下面命令代替启动命令中加参数 -p 60535-65535:60535-65535/udp

CIP=$(sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $CID)

sudo iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 60535:65535 -j DNAT --to-destination $CIP:60535-65535
sudo iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 60535:65535 -j ACCEPT
sudo iptables -A POSTROUTING -t nat -p udp -m udp -s $CIP/32 -d $CIP/32 --dport 60535:65535 -j MASQUERADE

启动container并进入container shell:

docker run -it freeswitch /bin/bash

进入container:

docker exec -it freeswitch /bin/bash  

查找容器:

docker ps -a

获取容器长ID:

docker inspect -f '{{.ID}}' freeswitch

拷贝本地文件到容器:

docker cp 你的文件路径 容器长ID:docker容器路径

拷贝容器文件到本地:

docker cp <containerId>:/file/path/within/container /host/path/target

Docker部署freeswitch的更多相关文章

  1. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  2. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  3. 程序开发使用docker部署

    我们公司自己研发了一套 grand-line 系统,使用 docker 来部署项目. 我是第一批小白鼠,一开始网络差,build 一次要半个小时,连接进入 web shell 也很慢,部署一个微信项目 ...

  4. 我使用celery以及docker部署遇到的问题

    首先我本机测试时没有问题的,但是在线上docker中,任务一直显示 "Sending due task".超时的任务是 django orm update 操作,本地不会出现这样的 ...

  5. Docker部署SDN环境

    2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...

  6. 在生产环境使用Docker部署应用

    导读 Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程.作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产 ...

  7. Docker 使用指南 (六)—— 使用 Docker 部署 Django 容器栈

    版权声明:本文由田飞雨原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/98 来源:腾云阁 https://www.qclou ...

  8. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  9. 我使用 Docker 部署 Celery 遇到的问题

    问题1 - Sending due task 本机测试时没有问题的,但是在线上 docker 中,任务一直显示 "Sending due task".超时的任务是 Django O ...

随机推荐

  1. 工具类css框架

    @charset "UTF-8"; * {     -webkit-box-sizing: border-box;     box-sizing: border-box;      ...

  2. node - 路由的使用

    一,服务器文件 app.js  .( 要使用路由的文件)   const express = require('express') const app = express() const swig = ...

  3. Hash!

    Panda一个字符串是否是另一个字符串的子串 #include<bits/stdc++.h> using namespace std; const int mod=998244353,tt ...

  4. raspberry pi-php-exec

    遇到的问题是在树莓派上搭建的web服务器,想通过网页操控树莓派的gpio,网页是通过php实现的,通过php的exec函数调用写好的程序实现对gpio的操作,但是赖何没有效果,分析也知道是权限问题,最 ...

  5. 三十七、SAP中文本资源的存放

    一.我们看看之前的代码内容 二.菜单转到->文本元素 三.在文本符号中写入需要替换的内容 四.修改一下代码,可以用text-001来等效替换 五.效果如下

  6. Swift Json解析基础

    func JSONToData(obj:Any) -> Data { //先判断是否可以转换 if !JSONSerialization.isValidJSONObject(obj) { ret ...

  7. composer install、require、update的区别

  8. html 基础 (9.19 第八天)

    一.HTML:超文本标记语言,是一种标签语言,不是编程语言,显示数据有双标签<body></body> 和单标签<img src=# / >, 标签大小写都可以通过 ...

  9. Adobe Photoshop CC2014 for MAC 详细破解步骤

    1,安装Adobe Photoshop CC2014 for MAC,可以断网安装,如果不断网的话,需要申请一个Adobe ID,是免费申请. 2,下载破解工具,https://sdifen.ctfi ...

  10. C3P0模板

    1.创建c3p0-config.xml配置文件放在src下 <?xml version="1.0" encoding="UTF-8"?> <c ...