2014-12-12 00:00:00
来 源
中存储网
Docker
前段时间,网站出了李呈一篇文章《Docker部署基于Ryu的SDN环境》,写得很好。而12.5号ONOS控制器也正式发布了,今天正好有时间,所以试验了在UbuntuServer14.04LTS64-bit系统下,如何在Docker容器中部署ONOS控制器。一切顺利后,记录操作步骤,和大家分享,也
pt-Docker容器部署ONOS控制器教程-2014-12-12

前段时间,网站出了李呈一篇文章《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解析

Shell
1 $ sudo apt-get install apt-transport-https

2、添加Docker repository key到本地keychain

Shell
1 $ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

3、添加docker软件仓库到软件源,升级软件源,安装lxc-docker包

Shell
123 $ 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

注:上述操作可以使用下面的脚本完成。

Shell
1 $ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

4、验证docker安装完成,可以使用下面命令测试

Shell
1 $ sudo docker run -i -t ubuntu /bin/bash

注:其他操作可以使用“docker –help”查看。

2 获取ONOS镜像

2.1 搜索镜像

执行“docker search onos”来搜索相关的镜像,可以从STARS来确定资源的好坏。但是选择“ywang1007/onos-buildenv”镜像,如下图。可能因为ONOS刚出来不久,还没有最完美的镜像。别急,先下载下来再说。

Docker search ONOS

2.2 下载镜像

下载选择的ONOS镜像到本地机器,操作步骤如下,这里需要花费一段时间。

Shell
1 # docker pull ywang1007/onos-buildenv
下载ONOS到本地机器

2.3 查看镜像

查看已经下载好的镜像。

Shell
1 # docker images
docker image

3 创建容器

创建容器使用下面的命令:

Shell
1 # 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”来查看

Docker ps -a

4 部署ONOS控制器

下面的操作说明如果在容器中部署ONOS控制器,方法类似于本网站中的《Ubuntu14.04源码安装ONOS》。

4.1 设置ONOS运行环境

1、先了解容器中的环境和目录结构,大致如下。

Java8已经安装。

Java version版本

ONOS主目录在/home/onos目录下

onos ls

Karaf和maven在/home/onos/Applications目录下

列表maven和karaf

2、了解文件目录后,设置环境变量,编辑/etc/profile文件,在文件底部增加下面几行

Shell
12345 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、执行命令,使环境变量生效。

Shell
12 # 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的值,添加红字字体部分。

Shell
1 ,mvn:org.onosproject/onos-features/1.0.0/xml/features
红色部分1

修改featuresBoot的值,添加红色字体部分。

Shell
1 ,onos-api,onos-core-trivial,onos-cli,onos-openflow,onos-app-fwd,onos-app-mobility,onos-gui
红色部分2

注:这里不明白的,可以参考《Ubuntu14.04源码安装ONOS》。

4.3 构建ONOS

进入ONOS主目录,构建ONOS:

Shell
12 # cd  /home/onos/onos# mvn clean install

4.4 运行ONOS

运行ONOS,使用如下命令:

Shell
1 # karaf clean
执行karaf命令

运行ONOS后,可以在容器的“宿主机”上,查看ONOS的6633和8181端口是否监听,操作如下:

Shell
1 # netstat -anput|grep 6633
6633监听端口查看 Shell
1 # netstat -anput|grep 8181
8181监听端口查看

如果上述操作都没有问题的话,可以访问ONOS的WEB,地址为http://your_host_ip:8181/onos/ui/index.html

ONOS Web first登录界面

4.5 测试ONOS

运行一台Mininet机器(和容器的主机要通信),然后创建一个拓扑,指定控制器为ONOS地址。值得说的是,控制器的IP要写容器所在主机的IP地址,原因详见《Docker部署基于Ryu的SDN环境》。

Shell
1 # mn --topo tree,depth=2,fanout=3  --mac  --controller=remote,ip=192.168.5.125,port=6633 --switch ovsk,protocols=OpenFlow13

测试Mininet的主机是否通信。

pingall通信

此时,ONOS的WEB页面也能看到拓扑,如下图:

ONOS登录图片

5 上传镜像

Docker可以自己制作镜像并上传,以便下次使用。上传镜像的步骤如下:

1、将部署了ONOS控制器的容器导出来,使用docker export container > file 命令。

Shell
1 # docker export ONOS > onos-1.0.0.tar

2、将tar文件导入镜像

Shell
1 # cat onos-1.0.0.tar |docker import - ywang1007/onos-1.0.0:sdn

3、制作好的镜像可以用“docker images”命令查看

Docker image查看

注:如果有需要,还可以用“docker push”命令把镜像推送到Dockerhub。

该篇文章仅做抛砖引玉之用,希望有兴趣的同学继续深挖。

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。