Martin Christen FHNW – Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation martin.christen@fhnw.ch @MartinChristen Einführung zu Docker für Python-Entwicklung +
3 April 2016InstitutVermessung undGeoinformation 2 Kurzvorstellung Martin Christen Dozent für Geoinformatik und 3D-Computergrafik FHNW - Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation Lehrtätigkeit – Python-Programmierung (1. – 3. Semester) – Web-Technologien (1. Semester) – Geoinformatik (5. Semester) – Geoprocessing mit Python (Master-Studiengang) – 3D-Computergrafik (Master-Studiengang) Primäre Forschungsinteressen – 3D-Computergrafik als Webservice (insb. Bildverarbeitung/Ray-Tracing) – Large-Scale 3D-Rendering – Big Data & (Geo-)Datenprozessierung @MartinChristen GitHub: MartinChristen
3 April 2016InstitutVermessung undGeoinformation 3 Ausgangslage:OpenWebGlobe Projekt
3 April 2016InstitutVermessung undGeoinformation 4 Motivation: 3D-Streaming im Webbrowser MapData © OpenStreetMapcontributors BTh Hürbi/Daetwyler,MTh Lucas Oertli,2013
3 April 2016InstitutVermessung undGeoinformation 5 90 CityGML files (2.72 GB) 26'474 textures (1024x1024), unkomprimierte Grösse ca. 77 GB Orthophoto unkomprimiert ca. 430 GB
3 April 2016InstitutVermessung undGeoinformation 6 OpenStreetMap 3D – 3dmap Quelle: BTh, Daniel Rettenmund 2015
3 April 2016InstitutVermessung undGeoinformation 7 App: unsichtbares sichtbar machen (Römerstadt Augusta Raurica)
3 April 2016InstitutVermessung undGeoinformation 8 Geodatenprozessierung Web Viewer • HTML5, WebGL, JavaScript Data Processing & Storage/Cache • Python • JavaScript (node.js) • C++ • Optimal im HPCC Raw data
3 April 2016InstitutVermessung undGeoinformation 9 Geodatenprozessierung Web Viewer • HTML5, WebGL, JavaScript Data Processing & Storage/Cache • Python • JavaScript (node.js) • C++ • Optimal im HPCC Raw data Neue Entwicklerin/neuer Entwickler im Team ? -> Wo beginnen ??? Wie kann ich Entwicklungsumgebung aufsetzen ?? Fehler finden ? Testen ? ...
3 April 2016InstitutVermessung undGeoinformation 10 Problematik bei Web-Services (Quelle: docker.io)
3 April 2016InstitutVermessung undGeoinformation 11 Eine Analogie: Transport von Gütern vor ca. 1950: (Quelle: docker.io)
3 April 2016InstitutVermessung undGeoinformation 12 Standardisierung: Container als ISO Standard
3 April 2016InstitutVermessung undGeoinformation 13 Standardisierung mit Containern (nach ca. 1950) (Quelle: docker.io)
3 April 2016InstitutVermessung undGeoinformation 14 Standardisierung von (Web-)Services als Container: Docker! (Quelle: docker.io)
3 April 2016InstitutVermessung undGeoinformation 15 Weshalb Docker ? • Immer mehr Software-Entwickler setzen bei der täglichen Arbeit auf virtuelle Maschinen in denen sie einen Server replizieren, der dann auch auf dem Produktivsystem zum Einsatz kommt. • Docker ermöglicht, Anwendungen in sogenannten Containern auszuführen. • Diese Container können aufeinander aufbauen und miteinander kommunizieren… z.B. Datenbank / Webserver / … Unterschied zu normalen virtuellen Maschinen: • Nicht jeder Container muss ein komplettes Betriebssystem mitbringen! • Container-basierte Virtualisierung isoliert Applikationen auf einem gemeinsamen Betriebssystem voneinander, um die Auslieferung von Anwendungen zu standardisieren.
3 April 2016InstitutVermessung undGeoinformation 16 Weshalb Docker ??? Das Anwendungsgebietvon Docker ist sehr gross. Ich benutze Docker primär für die Softwareentwicklung (Webservices) und dessen Deployment ->DevOps Vorteile: • Jede Entwicklerin, jeder Entwickler hat dieselbe Umgebung. Die Aussage “läuft im Moment nur auf meinem Laptop” gibt es nicht mehr. • Das Betriebssystem während der Entwicklung ist auch dieselbe wie beim Deployment • Einfacher Einstieg für neue Entwickerinnen und Entwickler. Alle haben exakt dieselbe Umgebung. Die Installation der ist völlig automatisiert! Ideal für Continous Integration. • Schreiben von Tests ist für alle einfacher, alle haben sowieso dieselben Daten, Testdatenbanken etc. installiert. • github ?: Keine Images von virtuellen Maschinen müssen eingechecked werden, sondern nur dessen Beschreibung (Dockerfile), also ideal für Versionsverwaltungen.
3 April 2016InstitutVermessung undGeoinformation 17 Virtuelle Maschinen vs. Docker “Docker creates a common framework for developers and sysadmins to work together on distributed applications” http://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-normal-virtual-machine
3 April 2016InstitutVermessung undGeoinformation 18 Installation (a. Windows) Siehe auch: https://docs.docker.com/engine/installation/windows/ Geht nur mit 64 bit Windows, ab Windows 7. Hyper-V muss deaktiviert sein (ab Windows 8) • Windows-Key + X • Programme und Features (ganz oben) wählen • Windows-Features aktivieren oder deaktivieren • Hyper-V abwählen • Nach Deaktivierung ist ein Neustart erforderlich… Dann kann die Docker Toolbox installiert werden: https://www.docker.com/products/docker-toolbox Danach kann das Docker Terminal gestartet werden.
3 April 2016InstitutVermessung undGeoinformation 19 Installation (b. MacOS X) Siehe auch: https://docs.docker.com/engine/installation/mac/ OSX ab Version 10.8 (Mountain Lion) wird benötigt. Der Installer ist auf https://www.docker.com/products/docker-toolbox zu finden.
3 April 2016InstitutVermessung undGeoinformation 20 Installation (c. Linux) Auch bei Linux geht es nur mit 64-bit, und Kernel ab Version 3.10 Genaue Instruktionen siehe: https://docs.docker.com/engine/installation/linux/ (für verschiedene Linux Distributionen)
3 April 2016InstitutVermessung undGeoinformation 21 Unterschied Linux <-> Windows / Mac docker-machine ip defaultlocalhost
3 April 2016InstitutVermessung undGeoinformation 22 Docker benutzen Zunächstöffnen wir das Docker Quickstart Terminal:
3 April 2016InstitutVermessung undGeoinformation 23 Erstellen eines Dockerfiles vim Dockerfile # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Applikation ausführen CMD echo 'hello world' docker build -t mchristen/myapp .
3 April 2016InstitutVermessung undGeoinformation 24 docker images # Anzeigen aller Images docker ps -a docker run mchristen/myapp
3 April 2016InstitutVermessung undGeoinformation 25 Und nun Python… Wir erstellen ein neues Dockerfile, bei dem wir Python3 installieren: # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Python installieren RUN apt-get install -y python3-pip docker build -t mchristen/python3 .
3 April 2016InstitutVermessung undGeoinformation 26 Python Programm ausführen print('Hello World! This is Python3') test.py docker run –i mchristen/python3 python3 < test.py
3 April 2016InstitutVermessung undGeoinformation 27 Webservice z.B. mit Flask from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello from Docker and Flask' if __name__ == '__main__': app.run(debug=True,host='0.0.0.0', port=3000) demo.py Dieses einfache Flask-App läuft auf port 3000 Wir verwenden dazu auch Ubuntu 14.04 und erstellen folgendes Dockerfile:
3 April 2016InstitutVermessung undGeoinformation 28 Dockerfile # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Python installieren RUN apt-get install -y python3-pip # Flask installieren: RUN pip3 install flask # Port freigeben EXPOSE 3000 # Python (Flask) app hinzufügen ADD demo.py /root/demo.py # Demo ausführen CMD python3 /root/demo.py WORKDIR /app WORKDIR /app
3 April 2016InstitutVermessung undGeoinformation 29 Docker image erstellen und App ausführen docker build -t mchristen/flaskapp . docker run –p 3000:3000 mchristen/flaskapp docker run –p 80:3000 beenden: docker stop CONTAINERID Die Container id erhält man übrigens mittels docker ps
3 April 2016InstitutVermessung undGeoinformation 30 Webservice
3 April 2016InstitutVermessung undGeoinformation 31 Wichtige Docker Commands docker pull ubuntu:latest docker images docker ps # laufende container anzeigen docker ps –a # alle container anzeigen docker rmi IMAGETAG # Löschen image docker rm CONTAINERID # Löschen container docker rm $(docker ps -a -q) # Löschen aller container docker pull ubuntu # image holen # bash starten: docker run -i -t --entrypoint /bin/bash mchristen/python3 docker-machine restart default
3 April 2016InstitutVermessung undGeoinformation 32 Docker in PyCharm Ab PyCharm 5 (Professional Edition): https://blog.jetbrains.com/pycharm/2015/12/using-docker-in-pycharm/
3 April 2016InstitutVermessung undGeoinformation 33 Fazit • Docker und die API (Konsolenkommandos & Python-API) wurden vorgestellt • Docker eignet sich hervorragend zur Entwicklung von Webservices • Mit Python haben alle Entwickler dieselben Modul-Versionen.Installation der Module ist komplett automatisiert, egal mit welchem Host-Betriebssystem gearbeitet wird. • Gerade “schwierig zu installierende” Module wie z.B. OpenCV für Python 3.5 funktioniert damit von allen Betriebssystemen aus • Mit Entwicklungsumgebungen wie z.B. PyCharm kann das direkt auf der Docker-Maschine debugged/ausgeführtwerden. • Testing / Continuous Integration ist viel einfacher zu koordinieren.
3 April 2016InstitutVermessung undGeoinformation 34 22-24. Juni 2016 (21. Juni: Codesprint) near Basel, Switzerland www.geopython.net #GeoPythonConf
3 April 2016InstitutVermessung undGeoinformation 35 Fragen

Docker for Python Development

  • 1.
    Martin Christen FHNW –Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation martin.christen@fhnw.ch @MartinChristen Einführung zu Docker für Python-Entwicklung +
  • 2.
    3 April 2016InstitutVermessungundGeoinformation 2 Kurzvorstellung Martin Christen Dozent für Geoinformatik und 3D-Computergrafik FHNW - Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation Lehrtätigkeit – Python-Programmierung (1. – 3. Semester) – Web-Technologien (1. Semester) – Geoinformatik (5. Semester) – Geoprocessing mit Python (Master-Studiengang) – 3D-Computergrafik (Master-Studiengang) Primäre Forschungsinteressen – 3D-Computergrafik als Webservice (insb. Bildverarbeitung/Ray-Tracing) – Large-Scale 3D-Rendering – Big Data & (Geo-)Datenprozessierung @MartinChristen GitHub: MartinChristen
  • 3.
    3 April 2016InstitutVermessungundGeoinformation 3 Ausgangslage:OpenWebGlobe Projekt
  • 4.
    3 April 2016InstitutVermessungundGeoinformation 4 Motivation: 3D-Streaming im Webbrowser MapData © OpenStreetMapcontributors BTh Hürbi/Daetwyler,MTh Lucas Oertli,2013
  • 5.
    3 April 2016InstitutVermessungundGeoinformation 5 90 CityGML files (2.72 GB) 26'474 textures (1024x1024), unkomprimierte Grösse ca. 77 GB Orthophoto unkomprimiert ca. 430 GB
  • 6.
    3 April 2016InstitutVermessungundGeoinformation 6 OpenStreetMap 3D – 3dmap Quelle: BTh, Daniel Rettenmund 2015
  • 7.
    3 April 2016InstitutVermessungundGeoinformation 7 App: unsichtbares sichtbar machen (Römerstadt Augusta Raurica)
  • 8.
    3 April 2016InstitutVermessungundGeoinformation 8 Geodatenprozessierung Web Viewer • HTML5, WebGL, JavaScript Data Processing & Storage/Cache • Python • JavaScript (node.js) • C++ • Optimal im HPCC Raw data
  • 9.
    3 April 2016InstitutVermessungundGeoinformation 9 Geodatenprozessierung Web Viewer • HTML5, WebGL, JavaScript Data Processing & Storage/Cache • Python • JavaScript (node.js) • C++ • Optimal im HPCC Raw data Neue Entwicklerin/neuer Entwickler im Team ? -> Wo beginnen ??? Wie kann ich Entwicklungsumgebung aufsetzen ?? Fehler finden ? Testen ? ...
  • 10.
    3 April 2016InstitutVermessungundGeoinformation 10 Problematik bei Web-Services (Quelle: docker.io)
  • 11.
    3 April 2016InstitutVermessungundGeoinformation 11 Eine Analogie: Transport von Gütern vor ca. 1950: (Quelle: docker.io)
  • 12.
    3 April 2016InstitutVermessungundGeoinformation 12 Standardisierung: Container als ISO Standard
  • 13.
    3 April 2016InstitutVermessungundGeoinformation 13 Standardisierung mit Containern (nach ca. 1950) (Quelle: docker.io)
  • 14.
    3 April 2016InstitutVermessungundGeoinformation 14 Standardisierung von (Web-)Services als Container: Docker! (Quelle: docker.io)
  • 15.
    3 April 2016InstitutVermessungundGeoinformation 15 Weshalb Docker ? • Immer mehr Software-Entwickler setzen bei der täglichen Arbeit auf virtuelle Maschinen in denen sie einen Server replizieren, der dann auch auf dem Produktivsystem zum Einsatz kommt. • Docker ermöglicht, Anwendungen in sogenannten Containern auszuführen. • Diese Container können aufeinander aufbauen und miteinander kommunizieren… z.B. Datenbank / Webserver / … Unterschied zu normalen virtuellen Maschinen: • Nicht jeder Container muss ein komplettes Betriebssystem mitbringen! • Container-basierte Virtualisierung isoliert Applikationen auf einem gemeinsamen Betriebssystem voneinander, um die Auslieferung von Anwendungen zu standardisieren.
  • 16.
    3 April 2016InstitutVermessungundGeoinformation 16 Weshalb Docker ??? Das Anwendungsgebietvon Docker ist sehr gross. Ich benutze Docker primär für die Softwareentwicklung (Webservices) und dessen Deployment ->DevOps Vorteile: • Jede Entwicklerin, jeder Entwickler hat dieselbe Umgebung. Die Aussage “läuft im Moment nur auf meinem Laptop” gibt es nicht mehr. • Das Betriebssystem während der Entwicklung ist auch dieselbe wie beim Deployment • Einfacher Einstieg für neue Entwickerinnen und Entwickler. Alle haben exakt dieselbe Umgebung. Die Installation der ist völlig automatisiert! Ideal für Continous Integration. • Schreiben von Tests ist für alle einfacher, alle haben sowieso dieselben Daten, Testdatenbanken etc. installiert. • github ?: Keine Images von virtuellen Maschinen müssen eingechecked werden, sondern nur dessen Beschreibung (Dockerfile), also ideal für Versionsverwaltungen.
  • 17.
    3 April 2016InstitutVermessungundGeoinformation 17 Virtuelle Maschinen vs. Docker “Docker creates a common framework for developers and sysadmins to work together on distributed applications” http://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-normal-virtual-machine
  • 18.
    3 April 2016InstitutVermessungundGeoinformation 18 Installation (a. Windows) Siehe auch: https://docs.docker.com/engine/installation/windows/ Geht nur mit 64 bit Windows, ab Windows 7. Hyper-V muss deaktiviert sein (ab Windows 8) • Windows-Key + X • Programme und Features (ganz oben) wählen • Windows-Features aktivieren oder deaktivieren • Hyper-V abwählen • Nach Deaktivierung ist ein Neustart erforderlich… Dann kann die Docker Toolbox installiert werden: https://www.docker.com/products/docker-toolbox Danach kann das Docker Terminal gestartet werden.
  • 19.
    3 April 2016InstitutVermessungundGeoinformation 19 Installation (b. MacOS X) Siehe auch: https://docs.docker.com/engine/installation/mac/ OSX ab Version 10.8 (Mountain Lion) wird benötigt. Der Installer ist auf https://www.docker.com/products/docker-toolbox zu finden.
  • 20.
    3 April 2016InstitutVermessungundGeoinformation 20 Installation (c. Linux) Auch bei Linux geht es nur mit 64-bit, und Kernel ab Version 3.10 Genaue Instruktionen siehe: https://docs.docker.com/engine/installation/linux/ (für verschiedene Linux Distributionen)
  • 21.
    3 April 2016InstitutVermessungundGeoinformation 21 Unterschied Linux <-> Windows / Mac docker-machine ip defaultlocalhost
  • 22.
    3 April 2016InstitutVermessungundGeoinformation 22 Docker benutzen Zunächstöffnen wir das Docker Quickstart Terminal:
  • 23.
    3 April 2016InstitutVermessungundGeoinformation 23 Erstellen eines Dockerfiles vim Dockerfile # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Applikation ausführen CMD echo 'hello world' docker build -t mchristen/myapp .
  • 24.
    3 April 2016InstitutVermessungundGeoinformation 24 docker images # Anzeigen aller Images docker ps -a docker run mchristen/myapp
  • 25.
    3 April 2016InstitutVermessungundGeoinformation 25 Und nun Python… Wir erstellen ein neues Dockerfile, bei dem wir Python3 installieren: # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Python installieren RUN apt-get install -y python3-pip docker build -t mchristen/python3 .
  • 26.
    3 April 2016InstitutVermessungundGeoinformation 26 Python Programm ausführen print('Hello World! This is Python3') test.py docker run –i mchristen/python3 python3 < test.py
  • 27.
    3 April 2016InstitutVermessungundGeoinformation 27 Webservice z.B. mit Flask from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello from Docker and Flask' if __name__ == '__main__': app.run(debug=True,host='0.0.0.0', port=3000) demo.py Dieses einfache Flask-App läuft auf port 3000 Wir verwenden dazu auch Ubuntu 14.04 und erstellen folgendes Dockerfile:
  • 28.
    3 April 2016InstitutVermessungundGeoinformation 28 Dockerfile # Ausgehend vom image Ubuntu 14.04 FROM ubuntu:14.04 MAINTAINER Vorname Nachname email@email.com # Image aktualisieren RUN apt-get update --yes # Python installieren RUN apt-get install -y python3-pip # Flask installieren: RUN pip3 install flask # Port freigeben EXPOSE 3000 # Python (Flask) app hinzufügen ADD demo.py /root/demo.py # Demo ausführen CMD python3 /root/demo.py WORKDIR /app WORKDIR /app
  • 29.
    3 April 2016InstitutVermessungundGeoinformation 29 Docker image erstellen und App ausführen docker build -t mchristen/flaskapp . docker run –p 3000:3000 mchristen/flaskapp docker run –p 80:3000 beenden: docker stop CONTAINERID Die Container id erhält man übrigens mittels docker ps
  • 30.
    3 April 2016InstitutVermessungundGeoinformation 30 Webservice
  • 31.
    3 April 2016InstitutVermessungundGeoinformation 31 Wichtige Docker Commands docker pull ubuntu:latest docker images docker ps # laufende container anzeigen docker ps –a # alle container anzeigen docker rmi IMAGETAG # Löschen image docker rm CONTAINERID # Löschen container docker rm $(docker ps -a -q) # Löschen aller container docker pull ubuntu # image holen # bash starten: docker run -i -t --entrypoint /bin/bash mchristen/python3 docker-machine restart default
  • 32.
    3 April 2016InstitutVermessungundGeoinformation 32 Docker in PyCharm Ab PyCharm 5 (Professional Edition): https://blog.jetbrains.com/pycharm/2015/12/using-docker-in-pycharm/
  • 33.
    3 April 2016InstitutVermessungundGeoinformation 33 Fazit • Docker und die API (Konsolenkommandos & Python-API) wurden vorgestellt • Docker eignet sich hervorragend zur Entwicklung von Webservices • Mit Python haben alle Entwickler dieselben Modul-Versionen.Installation der Module ist komplett automatisiert, egal mit welchem Host-Betriebssystem gearbeitet wird. • Gerade “schwierig zu installierende” Module wie z.B. OpenCV für Python 3.5 funktioniert damit von allen Betriebssystemen aus • Mit Entwicklungsumgebungen wie z.B. PyCharm kann das direkt auf der Docker-Maschine debugged/ausgeführtwerden. • Testing / Continuous Integration ist viel einfacher zu koordinieren.
  • 34.
    3 April 2016InstitutVermessungundGeoinformation 34 22-24. Juni 2016 (21. Juni: Codesprint) near Basel, Switzerland www.geopython.net #GeoPythonConf
  • 35.
    3 April 2016InstitutVermessungundGeoinformation 35 Fragen