From bbe128904ab07e43a0386f17a500c679ff9059e0 Mon Sep 17 00:00:00 2001 From: peusterm Date: Thu, 7 Sep 2017 13:03:12 +0200 Subject: [PATCH] Added dockerized deployment as third official deployment method. Created a new Dockerfile that uses the Ansible-based installation so we still need to maintain only one installation script. The old Dockerfiles in "utils" is deprecated. Signed-off-by: Manuel Peuster --- Dockerfile | 85 ++++++++++++++++++++++++++++++++++++++ README.md | 15 +++++-- ansible/install.yml | 3 ++ setup.py | 1 - utils/docker/entrypoint.sh | 39 ++++++++++++----- 5 files changed, 129 insertions(+), 14 deletions(-) create mode 100755 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100755 index 0000000..84fa586 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,85 @@ +# Copyright (c) 2017 SONATA-NFV and Paderborn University +# ALL RIGHTS RESERVED. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Neither the name of the SONATA-NFV, Paderborn University +# nor the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# This work has been performed in the framework of the SONATA project, +# funded by the European Commission under Grant number 671517 through +# the Horizon 2020 and 5G-PPP programmes. The authors would like to +# acknowledge the contributions of their colleagues of the SONATA +# partner consortium (www.sonata-nfv.eu). + +FROM ubuntu:xenial + +ENV SON_EMU_IN_DOCKER 1 + +# install required packages +RUN apt-get clean +RUN apt-get update \ + && apt-get install -y git \ + net-tools \ + aptitude \ + build-essential \ + python-setuptools \ + python-dev \ + python-pip \ + software-properties-common \ + ansible \ + curl \ + iptables \ + sudo + +# install containernet (using its Ansible playbook) +RUN git clone https://github.com/containernet/containernet.git +WORKDIR /containernet/ansible +RUN ansible-playbook -i "localhost," -c local --skip-tags "notindocker" install.yml + +# install emulator (using its Ansible playbook) +COPY . /son-emu +WORKDIR /son-emu/ansible +RUN ansible-playbook -i "localhost," -c local --skip-tags "notindocker" install.yml +WORKDIR /son-emu +RUN python setup.py develop + +WORKDIR / + +# Important: This entrypoint is required to start the OVS service +ENTRYPOINT ["/son-emu/utils/docker/entrypoint.sh"] +CMD ["python", "son-emu/examples/default_single_dc_topology.py"] + +# open ports for emulator APIs +# SONATA GK +EXPOSE 5000 +# EMU REST API +EXPOSE 5001 +# Monitoring (Prometheus) +EXPOSE 8081 +# Monitoring (GW) +EXPOSE 9091 +# OpenStack-fake +EXPOSE 4000 +# OpenStack-fake +EXPOSE 10243 +# OpenStack-fake +EXPOSE 9005 +# OpenStack-fake (Keystone) +EXPOSE 6001 +# OpenStack-fake +EXPOSE 9775 +# OpenStack-fake +EXPOSE 10697 diff --git a/README.md b/README.md index 4b7877b..3b4c145 100755 --- a/README.md +++ b/README.md @@ -74,9 +74,9 @@ Contributing to the the emulator is really easy. You must: 4. Follow/answer related [issues](https://github.com/sonata-nfv/son-emu/issues) (see Feedback-Chanel, below). ## Installation -There are two ways to install and use the emulation platform. The simple one is to use Vagrant to create a VirtualBox-based VM on your machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. +There are three ways to install and use the emulation platform. The simple one is to use Vagrant to create a VirtualBox-based VM on your machine that contains the pre-installed and configured emulator. The more complicated installation requires a freshly installed Ubuntu 16.04 LTS and is done by an ansible playbook. The third option is to use a nested Docker environment to run the emulator inside a Docker container. -### Vagrant Installation +### Option 1: Vagrant Installation * Request VirtualBox and Vagrant to be installed on the system. * `git clone https://github.com/sonata-nfv/son-emu.git` @@ -86,7 +86,7 @@ There are two ways to install and use the emulation platform. The simple one is Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. The dummy-gatekeeper's default port 5000 is forwarded to the host machine and can be accessed from it by using, e.g., curl http://127.0.0.1:5000/packages. -### Ansible Installation +### Option 2: Ansible Installation * Requires: Ubuntu 16.04 LTS * `sudo apt-get install ansible git aptitude` @@ -105,6 +105,15 @@ Follow the MOTD in the VM to run the example topology and the dummy-gatekeeper. * `cd ~/son-emu/ansible` * `sudo ansible-playbook -i "localhost," -c local install.yml` +### Option 3: Nested Docker Deployment +This option requires a Docker installation on the host machine on which the emulator should be deployed. + +* `git clone https://github.com/sonata-nfv/son-emu.git` +* `cd ~/son-emu` +* Build the container: `docker build -t son-emu-img .` +* Run the (interactive) container: `docker run --name son-emu -it --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock son-emu-img /bin/bash` + + ## Usage ### Examples diff --git a/ansible/install.yml b/ansible/install.yml index b032b0b..61d12a2 100755 --- a/ansible/install.yml +++ b/ansible/install.yml @@ -89,6 +89,9 @@ - name: install ipaddress pip: name=ipaddress state=latest + - name: install gevent + pip: name=gevent state=latest + #- name: install urllib # pip: name=urllib state=latest diff --git a/setup.py b/setup.py index fd36cf3..a3c9247 100755 --- a/setup.py +++ b/setup.py @@ -43,7 +43,6 @@ setup(name='emuvim', }, install_requires=[ 'pyaml', - 'zerorpc', 'tabulate', 'argparse', 'networkx', diff --git a/utils/docker/entrypoint.sh b/utils/docker/entrypoint.sh index c67e276..bcd4c56 100755 --- a/utils/docker/entrypoint.sh +++ b/utils/docker/entrypoint.sh @@ -1,12 +1,31 @@ -#! /bin/bash -e +#!/bin/bash +# Copyright (c) 2017 SONATA-NFV and Paderborn University +# ALL RIGHTS RESERVED. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# Neither the name of the SONATA-NFV, Paderborn University +# nor the names of its contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# This work has been performed in the framework of the SONATA project, +# funded by the European Commission under Grant number 671517 through +# the Horizon 2020 and 5G-PPP programmes. The authors would like to +# acknowledge the contributions of their colleagues of the SONATA +# partner consortium (www.sonata-nfv.eu). +set -e set -x -#cp /containernet/util/docker/entrypoint.sh /tmp/x.sh -#cat /tmp/x.sh | awk 'NR==1{print; print "set -x"} NR!=1' > /conteinernet/util/docker/entrypoint.sh - -# this cannot be done from the Dockerfile since we have the socket not mounted during build -# this image is needed for the monitoring in son-emu -#echo 'Pulling the "google/cadvisor" image ... please wait' -#docker pull 'google/cadvisor' - -exec /containernet/util/docker/entrypoint.sh $* \ No newline at end of file +# need to call containernet's entrypoint to enable OVS +exec /containernet/util/docker/entrypoint.sh $* -- 2.25.1