souvikdas95 / containernet

Mininet fork that adds container (e.g. Docker) support.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Containernet

Join the chat at https://gitter.im/mpeuster/containernet Build Status

Containernet: Mininet fork that allows to use Docker containers as hosts in emulated networks

This fork of Mininet allows to use Docker containers as Mininet hosts. This enables interesting functionalities to built networking/cloud testbeds. The integration is done by subclassing the original Host class.

Based on: Mininet 2.2.1

Cite this work

If you use Containernet for your research and/or other publications, please cite (beside the original Mininet paper) the following paper to reference our work:

NFV multi-PoP Extension

There is an extension of Containernet called MeDICINE which is a full-featured multi-PoP emulation platform for NFV scenarios which is developed as part of the SONATA project.

Features

  • Add, remove Docker containers to Mininet topologies
  • Connect Docker containers to topology (to switches, other containers, or legacy Mininet hosts )
  • Execute commands inside Docker containers by using the Mininet CLI
  • Dynamic topology changes (lets behave like a small cloud ;-) )
  • Add Hosts/Docker containers to a running Mininet topology
  • Connect Hosts/Docker containers to a running Mininet topology
  • Remove Hosts/Docker containers/Links from a running Mininet topology
  • Resource limitation of Docker containers
  • CPU limitation with Docker CPU share option
  • CPU limitation with Docker CFS period/quota options
  • Memory/swap limitation
  • Change CPU/mem limitations at runtime!
  • Traffic control links (delay, bw, loss, jitter)
  • (missing: TCLink support for dynamically added containers/hosts)
  • Automated unit tests for all new features
  • Automated installation based on Ansible playbook

Installation

Automatic installation is provided through an Ansible playbook.

  • Requires: Ubuntu 16.04 LTS
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install ansible git aptitude
  • sudo vim /etc/ansible/hosts
  • Add: localhost ansible_connection=local
  • git clone https://github.com/containernet/containernet.git
  • cd containernet/ansible
  • sudo ansible-playbook install.yml
  • Wait (and have a coffee) ...

Usage / Run

Start example topology with some empty Docker containers connected to the network.

  • cd containernet
  • run: sudo python examples/dockerhosts.py
  • use: containernet> d1 ifconfig to see config of container d1

Topology example

In your custom topology script you can add Docker hosts as follows:

info('*** Adding docker containers\n')
d1 = net.addDocker('d1', ip='10.0.0.251', dimage="ubuntu:trusty")
d2 = net.addDocker('d2', ip='10.0.0.252', dimage="ubuntu:trusty", cpu_period=50000, cpu_quota=25000)
d3 = net.addHost('d3', ip='11.0.0.253', cls=Docker, dimage="ubuntu:trusty", cpu_shares=20)
d4 = net.addDocker('d4', dimage="ubuntu:trusty", volumes=["/:/mnt/vol1:rw"])

Tests

There is a set of Containernet specific unit tests located in mininet/test/test_containernet.py. To run these, do:

  • sudo py.test -v mininet/test/test_containernet.py

Vagrant support

Using the provided Vagrantfile is the most simple way to run and test Containernet:

git clone https://github.com/containernet/containernet.git
cd containernet
vagrant up
vagrant ssh

Work based on Containernet

Contact

Manuel Peuster manuel (dot) peuster (at) upb (dot) de

About

Mininet fork that adds container (e.g. Docker) support.

License:Other


Languages

Language:Python 78.8%Language:C 11.5%Language:Shell 9.1%Language:Makefile 0.5%