Post on 15-Apr-2017
Martin ChristenFHNW – Fachhochschule NordwestschweizHochschule für Architektur, Bau und GeomatikInstitut Vermessung und Geoinformation
martin.christen@fhnw.ch@MartinChristen
Einführung zu Docker für Python-Entwicklung
+
3 April 2016Institut Vermessung und Geoinformation 2
Kurzvorstellung
Martin ChristenDozent für Geoinformatik und 3D-ComputergrafikFHNW - Fachhochschule NordwestschweizHochschule für Architektur, Bau und GeomatikInstitut 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 2016Institut Vermessung und Geoinformation 3
Ausgangslage: OpenWebGlobe Projekt
3 April 2016Institut Vermessung und Geoinformation 4
Motivation: 3D-Streaming im Webbrowser
MapData © OpenStreetMap contributorsBTh Hürbi/Daetwyler, MTh Lucas Oertli, 2013
3 April 2016Institut Vermessung und Geoinformation 5
90 CityGML files (2.72 GB)26'474 textures (1024x1024), unkomprimierte Grösse ca. 77 GBOrthophoto unkomprimiert ca. 430 GB
3 April 2016Institut Vermessung und Geoinformation 6
OpenStreetMap 3D – 3dmap
Quelle: BTh, Daniel Rettenmund 2015
3 April 2016Institut Vermessung und Geoinformation 7
App: unsichtbares sichtbar machen (Römerstadt Augusta Raurica)
3 April 2016Institut Vermessung und Geoinformation 8
Geodatenprozessierung
Web Viewer
• HTML5, WebGL, JavaScript
Data Processing & Storage/Cache
• Python• JavaScript (node.js)• C++• Optimal im HPCC
Raw data
3 April 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 10
Problematik bei Web-Services
(Quelle: docker.io)
3 April 2016Institut Vermessung und Geoinformation 11
Eine Analogie: Transport von Gütern vor ca. 1950:
(Quelle: docker.io)
3 April 2016Institut Vermessung und Geoinformation 12
Standardisierung: Container als ISO Standard
3 April 2016Institut Vermessung und Geoinformation 13
Standardisierung mit Containern (nach ca. 1950)
(Quelle: docker.io)
3 April 2016Institut Vermessung und Geoinformation 14
Standardisierung von (Web-)Services als Container: Docker!
(Quelle: docker.io)
3 April 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 16
Weshalb Docker ???
Das Anwendungsgebiet von Docker ist sehr gross. Ich benutze Docker primär fürdie Softwareentwicklung (Webservices) und dessen Deployment ->DevOps
Vorteile:
• Jede Entwicklerin, jeder Entwickler hat dieselbe Umgebung. Die Aussage “läuft imMoment 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 dieselbeUmgebung. Die Installation der ist völlig automatisiert! Ideal für ContinousIntegration.
• 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 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 21
Unterschied Linux <-> Windows / Mac
docker-machine ip defaultlocalhost
3 April 2016Institut Vermessung und Geoinformation 22
Docker benutzen
Zunächst öffnen wir das Docker Quickstart Terminal:
3 April 2016Institut Vermessung und Geoinformation 23
Erstellen eines Dockerfiles
vim Dockerfile
# Ausgehend vom image Ubuntu 14.04FROM ubuntu:14.04MAINTAINER Vorname Nachname email@email.com
# Image aktualisierenRUN apt-get update --yes
# Applikation ausführenCMD echo 'hello world'
docker build -t mchristen/myapp .
3 April 2016Institut Vermessung und Geoinformation 24
docker images # Anzeigen aller Images
docker ps -a
docker run mchristen/myapp
3 April 2016Institut Vermessung und Geoinformation 25
Und nun Python…
Wir erstellen ein neues Dockerfile, bei dem wir Python3 installieren:
# Ausgehend vom image Ubuntu 14.04FROM ubuntu:14.04MAINTAINER Vorname Nachname email@email.com
# Image aktualisierenRUN apt-get update --yes
# Python installierenRUN apt-get install -y python3-pip
docker build -t mchristen/python3 .
3 April 2016Institut Vermessung und Geoinformation 26
Python Programm ausführen
print('Hello World! This is Python3')
test.py
docker run –i mchristen/python3 python3 < test.py
3 April 2016Institut Vermessung und Geoinformation 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 3000Wir verwenden dazu auch Ubuntu 14.04 und erstellen folgendes Dockerfile:
3 April 2016Institut Vermessung und Geoinformation 28
Dockerfile# Ausgehend vom image Ubuntu 14.04FROM ubuntu:14.04MAINTAINER Vorname Nachname email@email.com
# Image aktualisierenRUN apt-get update --yes
# Python installierenRUN apt-get install -y python3-pip
# Flask installieren:RUN pip3 install flask
# Port freigebenEXPOSE 3000
# Python (Flask) app hinzufügenADD demo.py /root/demo.py
# Demo ausführenCMD python3 /root/demo.py
WORKDIR /appWORKDIR /app
3 April 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 30
Webservice
3 April 2016Institut Vermessung und Geoinformation 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 2016Institut Vermessung und Geoinformation 32
Docker in PyCharm
Ab PyCharm 5 (Professional Edition):
https://blog.jetbrains.com/pycharm/2015/12/using-docker-in-pycharm/
3 April 2016Institut Vermessung und Geoinformation 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-Betriebssystemgearbeitet 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ührt werden.
• Testing / Continuous Integration ist viel einfacher zu koordinieren.
3 April 2016Institut Vermessung und Geoinformation 34
22-24. Juni 2016 (21. Juni: Codesprint) near Basel, Switzerland
www.geopython.net
#GeoPythonConf
3 April 2016Institut Vermessung und Geoinformation 35
Fragen