前段时间,网站出了李呈一篇文章《Docker部署基于Ryu的SDN环境》,写得很好。而12.5号ONOS控制器也正式发布了,今天正好有时间,所以试验了在Ubuntu Server 14.04 LTS 64-bit系统下,如何在Docker容器中部署ONOS控制器。一切顺利后,记录操作步骤,和大家分享,也请大家多拍砖。
1 安装Docker
安装docker的方法很简单,《Docker部署基于Ryu的SDN环境》写得很清楚,这里简单说下。
1、安装软件包apt-transport-https,使APT系统能够被https解析
Shell1 | $ sudo apt-get install apt-transport-https |
2、添加Docker repository key到本地keychain
Shell1 | $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 |
3、添加docker软件仓库到软件源,升级软件源,安装lxc-docker包
Shell123 | $ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list"$ sudo apt-get update$ sudo apt-get install lxc-docker |
注:上述操作可以使用下面的脚本完成。
Shell1 | $ curl -sSL https://get.docker.com/ubuntu/ | sudo sh |
4、验证docker安装完成,可以使用下面命令测试
Shell1 | $ sudo docker run -i -t ubuntu /bin/bash |
注:其他操作可以使用“docker –help”查看。
2 获取ONOS镜像
2.1 搜索镜像
执行“docker search onos”来搜索相关的镜像,可以从STARS来确定资源的好坏。但是选择“ywang1007/onos-buildenv”镜像,如下图。可能因为ONOS刚出来不久,还没有最完美的镜像。别急,先下载下来再说。
2.2 下载镜像
下载选择的ONOS镜像到本地机器,操作步骤如下,这里需要花费一段时间。
Shell1 | # docker pull ywang1007/onos-buildenv |
2.3 查看镜像
查看已经下载好的镜像。
Shell1 | # docker images |
3 创建容器
创建容器使用下面的命令:
Shell1 | # docker run -i -t -p 0.0.0.0:6633:6633 -p 0.0.0.0:8181:8181 --name ONOS ywang1007/onos-buildenv /bin/bash |
值得说的是,ONOS有web界面,端口是8181,为了可以页面访问ONOS,要做两个端口绑定。容器的6633端口绑定到主机的6633端口,容器的8181端口绑定到主机的8181端口。
创建好后,可以使用“docker ps -a”来查看
4 部署ONOS控制器
下面的操作说明如果在容器中部署ONOS控制器,方法类似于本网站中的《Ubuntu14.04源码安装ONOS》。
4.1 设置ONOS运行环境
1、先了解容器中的环境和目录结构,大致如下。
Java8已经安装。
ONOS主目录在/home/onos目录下
Karaf和maven在/home/onos/Applications目录下
2、了解文件目录后,设置环境变量,编辑/etc/profile文件,在文件底部增加下面几行
Shell12345 | export ONOS_ROOT=/home/onos/onosexport KARAF_ROOT=/home/onos/Applications/apache-karaf-3.0.2export JAVA_HOME=/usr/lib/jvm/java-8-oracleexport M2_HOME=/home/onos/Applications/apache-maven-3.2.2export PATH=$PATH:$M2_HOME/bin |
3、执行命令,使环境变量生效。
Shell12 | # source /etc/profile# source $ONOS_ROOT/tools/dev/bash_profile |
4.2 初始化ONOS文件
编辑/home/onos/Applications/apache-karaf-3.0.2/etc/org.apache.karaf.features.cfg 文件。
修改featuresRepositories的值,添加红字字体部分。
1 | ,mvn:org.onosproject/onos-features/1.0.0/xml/features |
修改featuresBoot的值,添加红色字体部分。
Shell1 | ,onos-api,onos-core-trivial,onos-cli,onos-openflow,onos-app-fwd,onos-app-mobility,onos-gui |
注:这里不明白的,可以参考《Ubuntu14.04源码安装ONOS》。
4.3 构建ONOS
进入ONOS主目录,构建ONOS:
Shell12 | # cd /home/onos/onos# mvn clean install |
4.4 运行ONOS
运行ONOS,使用如下命令:
Shell1 | # karaf clean |
运行ONOS后,可以在容器的“宿主机”上,查看ONOS的6633和8181端口是否监听,操作如下:
Shell1 | # netstat -anput|grep 6633 |
1 | # netstat -anput|grep 8181 |
如果上述操作都没有问题的话,可以访问ONOS的WEB,地址为http://your_host_ip:8181/onos/ui/index.html
4.5 测试ONOS
运行一台Mininet机器(和容器的主机要通信),然后创建一个拓扑,指定控制器为ONOS地址。值得说的是,控制器的IP要写容器所在主机的IP地址,原因详见《Docker部署基于Ryu的SDN环境》。
Shell1 | # mn --topo tree,depth=2,fanout=3 --mac --controller=remote,ip=192.168.5.125,port=6633 --switch ovsk,protocols=OpenFlow13 |
测试Mininet的主机是否通信。
此时,ONOS的WEB页面也能看到拓扑,如下图:
5 上传镜像
Docker可以自己制作镜像并上传,以便下次使用。上传镜像的步骤如下:
1、将部署了ONOS控制器的容器导出来,使用docker export container > file 命令。
Shell1 | # docker export ONOS > onos-1.0.0.tar |
2、将tar文件导入镜像
Shell1 | # cat onos-1.0.0.tar |docker import - ywang1007/onos-1.0.0:sdn |
3、制作好的镜像可以用“docker images”命令查看
注:如果有需要,还可以用“docker push”命令把镜像推送到Dockerhub。
该篇文章仅做抛砖引玉之用,希望有兴趣的同学继续深挖。