docker 服务器,使用docker搭建STUNTURN服务器
大家好,关于docker 服务器很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于使用docker搭建STUN/TURN服务器的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
使用docker搭建STUN/TURN服务器
前言
STUN,首先在RFC3489中定义,作为一个完整的NAT穿透解决方案,英文全称是Simple Traversal of UDP Through NATs,即简单的用UDP穿透NAT。
TURN,首先在RFC5766中定义,英文全称是Traversal Using Relays around NAT:Relay Extensions to Session Traversal Utilities for NAT,即使用中继穿透NAT:STUN的扩展
简单的说,TURN与STURN的共同点都是通过修改应用层中的私网地址达到NAT穿透的效果,异同点是TURN是通过两方通讯的“中间人”方式实现穿透。
ICE的全称Interactive Connectivity Establ.shment(互动式连接建立),由IETF的MMUSIC工作组开发出来的,它所提供的是一种框架,使各种NAT穿透技术可以实现统一。
STUN和TURN服务器和ICE可以参考阅读: P2P技术详解(三):P2P技术之STUN、TURN、ICE详解
本文介绍如何通过DOCKER搭建STUN和TURN服务器,步骤如下
1:创建Dockerfile,内容如下:
FROM ubuntu:14.04
MAINTAINER Patxi Gortázar<patxi.gortazar@gmail.com>
RUN apt-get update&& apt-get install-y\
curl\
libevent-core-2.0-5\
libevent-extra-2.0-5\
libevent-openssl-2.0-5\
libevent-pthreads-2.0-5\
libhiredis0.10\
libmysqlclient18\
libpq5\
telnet\
wget
RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz\
&& tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz\
&& dpkg-i coturn_4.4.2.2-1_amd64.deb
COPY./turnserver.sh/turnserver.sh
ENV TURN_USERNAME test
ENV TURN_PASSWORD test
ENV REALM kurento.org
ENV NAT true
EXPOSE 3478 3478/udp
ENTRYPOINT ["/turnserver.sh"]
2:创建turnserver.sh,内容如下
#!/bin/bash
set-e
if[$NAT="true"-a-z"$EXTERNAL_IP"];then
#Try to get public IP
PUBLIC_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)||echo"No public ip found on http://169.254.169.254/latest/meta-data/public-ipv4"
if[-z"$PUBLIC_IP"];then
PUBLIC_IP=$(curl http://icanhazip.com)||exit1
fi
#Try to get private IP
PRIVATE_IP=$(ifconfig|awk'/inet addr/{print substr($2,6)}'|grep-v 127.0.0.1)||exit1
exportEXTERNAL_IP="$PUBLIC_IP/$PRIVATE_IP"
echo"Starting turn server with external IP:$EXTERNAL_IP"
fi
echo'min-port=49152'>/etc/turnserver.conf
echo'max-port=65535'>>/etc/turnserver.conf
echo'fingerprint'>>/etc/turnserver.conf
echo'lt-cred-mech'>>/etc/turnserver.conf
echo"realm=$REALM">>/etc/turnserver.conf
echo'log-file stdout'>>/etc/turnserver.conf
echo"user=$TURN_USERNAME:$TURN_PASSWORD">>/etc/turnserver.conf
[$NAT="true"]&&echo"external-ip=$EXTERNAL_IP">>/etc/turnserver.conf
exec/usr/bin/turnserver"$@"
3:使用docker build创建镜像,执行结果如下
[root@www]# docker build-t teststurn_1.
Sending build context to Docker daemon 4.096kB
Step 1/11: FROM ubuntu:14.04
---> 6e4f1fe62ff1
Step 2/11: MAINTAINER Patxi Gortázar<patxi.gortazar@gmail.com>
---> Using cache
---> 4460f9f84053
Step 3/11: RUN apt-get update&& apt-get install-y curl libevent-core-2.0-5 libevent-extra-2.0-5 libevent-openssl-2.0-5 libevent-pthreads-2.0-5 libhiredis0.10 libmysqlclient18 libpq5 telnet wget
---> Using cache
---> 05ed9ced48a5
Step 4/11: RUN wget http://turnserver.open-sys.org/downloads/v4.4.2.2/turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz && tar xzf turnserver-4.4.2.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz && dpkg-i coturn_4.4.2.2-1_amd64.deb
---> Using cache
---> d82ed28fdac9
Step 5/11: COPY./turnserver.sh/turnserver.sh
---> Using cache
---> 1d37a488282c
Step 6/11: ENV TURN_USERNAME test
---> Running in bfd88f08db42
Removing intermediate container bfd88f08db42
---> cf8af0504b95
Step 7/11: ENV TURN_PASSWORD test
---> Running in b8ef33b7c213
Removing intermediate container b8ef33b7c213
---> 32a832f23169
Step 8/11: ENV REALM kurento.org
---> Running in bbe129edf5b3
Removing intermediate container bbe129edf5b3
---> 21fdfe34689b
Step 9/11: ENV NAT true
---> Running in 5bdfe8555d5e
Removing intermediate container 5bdfe8555d5e
---> dc7fc896841c
Step 10/11: EXPOSE 3478 3478/udp
---> Running in 67aaa1966f68
Removing intermediate container 67aaa1966f68
---> a12646ed45ff
Step 11/11: ENTRYPOINT ["/turnserver.sh"]
---> Running in b8fc2ff09265
Removing intermediate container b8fc2ff09265
---> f5e5acad0f81
Successfully built f5e5acad0f81
Successfully tagged teststurn_1:latest
执行完后可以看到自己创建的镜像名称为teststurn_1
4:启动docker的镜像,并开启端口3478
docker run-d-p 3478:3478-p 3478:3478/udp teststurn_1
启动后需要等待一两分钟才能测试顺畅
5:测试服务器效果
打开 https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 并输入自己的本机IP和端口,分别测试两种协议服务是否生效
docker的好处,为什么使用docker来部署服务器
Docker的使用
Docker是一个轻量级的虚拟化解决方案,你可以实现秒级的虚拟机启动、非常轻量级的虚拟化。个人使用理解看来,它可以实现一个类似于版本管理Git一样的轻量化的状态保存。
Docker有两个非常重要的概念:镜像和容器。
镜像是呈载容器的实体,所有容器都是运行在镜像之上。用版本管理的角度来看,镜像就像是某一个节点,它可以派生出不同的分支,你可以在不同分支上做不同的事情。可以想象成一棵树,最基本的镜像是主树干,主树干可以分出旁支树干,而旁支树干可以分出更细的旁支,而树干上可以生长树枝。
比如,你使用Docker,从官方仓库下载一个ubuntu镜像,把它作为最基础的镜像。然后在上面运行一个容器,这个容器里下载Nginx,再以这个容器为基础生成一个新的镜像,以后这个镜像生成的容器就都是ubuntu+nginx为基础。但是你工作环境可能需要你使用Apache来工作,你也想有一个ubuntu+apache为基础的镜像,于是你可以使用最基础的ubuntu镜像运行一个容器,在里面下载安装Apache,然后以这个容器为基础,保存一个ubuntu+apache的镜像,以后在这个镜像基础上运行的所有容器都拥有了一个apache环境。
docker 搭建文件服务器
version:'3'//docker-compose版本 3.x
services: //服务的配置信息
FileServer://自己定义的服务
image: nginx:latest //使用的镜像名
container_name:'FileData'// docker容器名
restart: always//重启策略 always总是重新启动
ports:-'8003:8003' //映射端口信息 宿主端口:容器端口
volumes:// 定义了卷信息,提供给 services中的具体容器使用
-'./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf'//用户自己指定的目录:映射目录
-'./nginx/log:/var/log/nginx'
-'./file:/usr/share/nginx/file'
-'./web:/usr/share/nginx/html' //其他html连接目录
command:/bin/bash-c"nginx-g'daemon off;'" //覆盖容器启动后默认执行的命令
autoindex on;//是否显示文件目录 on显示 off关闭显示
autoindex_exact_size on;//显示文件确切大小 on显示字节单位 off 显示出文件的大概大小,单位是KB或者MB或者GB
autoindex_localtime on;//默认为off,显示的文件时间为GMT时间;改为on后,显示的文件时间为文件的服务器时间
charset utf-8,gbk;//显示的字符集
server{//服务配置
listen 8003;//监听端口,也可以加上IP地址,如,listen 127.0.0.1:8080;
server_name _;//定义网站域名,可以写多个,用空格分隔。
//匹配规则,在server{}里可以有很多location配置段
//root/alias是指定文件路径的两种方式 alias相当于重定向路径
//使用alias,目录名后面一定要加“/”
location/{//location后面跟的搜索路径
root/usr/share/nginx/file;//指定文件服务地址这里的目录是 yml文件里配置的映射目录
}
location/web/{
alias/usr/share/nginx/;//多个location的时候这里只需要指定映射目录的上级目录就行了
index index.html index.htm;//配置默认首页
}
}
文章分享结束,docker 服务器和使用docker搭建STUN/TURN服务器的答案你都知道了吗?欢迎再次光临本站哦!