Docker安装与ONOS实验环境搭建

Docker

Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。总之就是轻便型的虚拟环境。

考虑到ONOS的实验环境搭建不易,Docker有助于我们移植搭建好的环境。

Docker安装

1、安装软件包apt-transport-https,使APT系统能够被https解析

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

2、添加Docker repository key到本地keychain

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

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

1
2
3
$ 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

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

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

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

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

-i interactive, -t tty, -p port可以多次使用指定多个Port映射, -P端口映射随机分配

ONOS(Open Network Operation System)

ONOS是首款开源的SDN网络操作系统,主要面向服务提供商和企业骨干网。ONOS的设计宗旨是满足网络需求实现可靠性强、性能好、灵活度高。此外,ONOS的北向接口抽象层和API支持简单的应用开发,而通过南向接口抽象层和接口则可以管控OpenFlow或者传统设备。总体来说,ONOS将会实现以下功能:

  • SDN控制层面实现电信级特征(可靠性强,性能好,灵活度高);
  • 提供网络敏捷性强有力保证;
  • 帮助服务提供商从现有网络迁移到白牌设备;
  • 减少服务提供商的资本开支和运营开支。
    下面介绍ONOS安装(Ubuntu源码安装)

1 系统要求

安装ONOS对操作系统有如下要求

  • Ubuntu Server 14.04 LTS 64-bit
  • 2GB or more RAM
  • 2 or more processors

需要安装如下软件,如果不用git获取源码,GIT可以不需要安装。

  • Java 8 JDK (Oracle Java recommended; OpenJDK is not as thoroughly tested)
  • Apache Maven (3.0 and later)
  • git
  • bash (for packaging & testing)
  • Apache Karaf (3.0.2 and later)

2 安装依赖

安装apache-karaf和apache-maven

apache-karaf的版本为3.0.2或以上版本,apache-maven的版本至少为3.0,这里使用版本3.2.2。创建~/Applications目录。之所以要安装到这个目录,是因为onos源码中已经设置将apache-karaf、apache-maven放到~/Applications目录。这个目录也可以通过更改~/onos/tools/dev/bash_profile修改,但是为了避免不必要的操作,这里按照默认创建文件夹。

1
2
3
4
5
6
$ cd; mkdir Downloads Applications
$ cd Downloads
$ wget http://download.nextag.com/apache/karaf/3.0.2/apache-karaf-3.0.2.tar.gz
$ wget http://www.apache.org/dist/maven/binaries/apache-maven-3.2.2-bin.tar.gz
$ tar -zxvf apache-karaf-3.0.2.tar.gz -C ../Applications/
$ tar -zxvf apache-maven-3.2.2-bin.tar.gz -C ../Applications/

安装java8

1
2
3
4
$ sudo apt-get install software-properties-common -y
$ sudo add-apt-repository ppa:webupd8team/java -y
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer oracle-java8-set-default -y

正确安装后,java -version和mvn –version打印的java版本应该一致。

3 安装 ONOS

下载ONOS源码

将ONOS源码下载到合适的目录(笔者放在/home目录下),切换到1.0.0分支

1
$ git clone https://gerrit.onosproject.org/onos -b 1.0.0

环境设置

安装ONOS之前,需要设置ONOS_ROOT和KARAF_ROOT等路径,切换到root权限用户,在/etc/profile文件的最后添加如下设置:

1
2
3
4
5
export ONOS_ROOT=/home/onos/onos-onos-1.0
export KARAF_ROOT=/root/Applications/apache-karaf-3.0.2
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export M2_HOME=/usr/local/apache-maven
export PATH=$PATH:$M2_HOME/bin

保存后执行

1
2
$ source /etc/profile
$ source $ONOS_ROOT/tools/dev/bash_profile

如果没有报错,则表示执行成功
可能的错误有:

  • No such file or directory
  • No such cell: local

构建ONOS

以上的步骤一切顺利后,可以开始构建ONOS,执行下列命令

1
2
$ cd onos/ //目录可能因人而异
$ mvn clean install

安装需要5~10分钟不等.

运行ONOS

需要编辑$KARAF_ROOT/etc/org.apache.karaf.features.cfg文件

添加下面的内容到 featuresRepositories:
mvn:org.onosproject/onos-features/1.0.0/xml/features

接着添加下面的内容到featuresBoot:
onos-api,onos-core-trivial,onos-cli,onos-openflow,onos-app-fwd,onos-app-mobility,onos-gui

之后就可以启动ONOS了:

1
$ karaf clean

启动时间较长,请耐心等待。

但是,Ubuntu源码安装并不总是能够成功的。在执行ONOS_ROOT/tools/dev/bash_profile和构建ONOS时,很容易出错。Docker在这时能发挥它应有的作用。

Docker搭建ONOS环境

声明:建议使用root用户做以下操作,可以省去sudo的麻烦

1
$ sudo -s

1 获取ONOS镜像

搜索镜像

执行“docker search onos”来搜索相关的镜像,可以从STARS来确定资源的好坏。因为ONOS刚出来不久,还没有最完美的镜像。这里我们选择“ywang1007/onos-buildenv”镜像。

下载镜像

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

1
# docker pull ywang1007/onos-buildenv

pull 后面加上 -a可以下载该镜像的所有版本

查看镜像

查看已经下载好的镜像

1
# docker images

里面已经包含了下载好的镜像

创建容器

为了展开实验,我们需要创建一个容器,进行镜像内的实验。

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端口。之后宿主机器访问“http://your ip address:8181/onos/ui/index.html”即可查看ONOS状态。

创建好后,可以使用“docker ps -a”来查看当前容器情况。

-a 全部 -l 最新
和Docker容器相关的命令有

  • docker start 启动某个容器
  • docker stop 关闭某个容器
  • docker attach 连接到某个正在运行的容器
  • docker rm 移除某个停止运行的容器

docker的相关命令可以通过docker –help来得到

之后的操作类似于上一节介绍的,搭建环境,建构运行ONOS。在宿主机器上运行mininet,使用pingall命令,可以证明onos已经在工作。过程略。

好不容易搭建好的onos环境最好用新镜像的方式存储起来,方便下次直接使用。

1
2
3
# docker commit xxx onos-1.0.0 //提交一个新的镜像
# docker save onos-1.0.0 > /home/zinc-fnl/onos-1.0.0.tar //将新镜像保存起来
# docker load < /hoe/zinc-fnl/onos-1.0.0.tar

此时再次查看本机的镜像

1
# docker images

就会发现刚才保存的新的镜像。

总结

本文主要介绍了docker的安装与简单使用以及ONOS的环境搭建。从中可以看到docker对于快速搭建实验环境有很大帮助,相信未来会有长远的发展。另外,这里对ONOS的性能并未做详细分析,笔者将在日后通过实验对ONOS进行考察。

副产品

实验过程中,因为对profile文件做过修改,曾出现过开机无法登陆的情况。orz..

问题:登录成功后,自动跳转回登陆页面

解决方法:

  1. Ctrl+Alt_F1切换到文本模式
  2. 将在profile和bash_profile做过的修改撤销掉
  3. find Xauthor* 将查到的所有文件要么sudo chmod 777 要么rm掉
  4. startx切换回来重新登录即可