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 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
8. 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
9. 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 ?
...
14. 3 April 2016InstitutVermessung undGeoinformation 14
Standardisierung von (Web-)Services als Container: Docker!
(Quelle: docker.io)
15. 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.
16. 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.
17. 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
18. 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.
19. 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.
20. 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)
21. 3 April 2016InstitutVermessung undGeoinformation 21
Unterschied Linux <-> Windows / Mac
docker-machine ip defaultlocalhost
23. 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 .
24. 3 April 2016InstitutVermessung undGeoinformation 24
docker images # Anzeigen aller Images
docker ps -a
docker run mchristen/myapp
25. 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 .
26. 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
27. 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:
28. 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
29. 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
32. 3 April 2016InstitutVermessung undGeoinformation 32
Docker in PyCharm
Ab PyCharm 5 (Professional Edition):
https://blog.jetbrains.com/pycharm/2015/12/using-docker-in-pycharm/
33. 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.
34. 3 April 2016InstitutVermessung undGeoinformation 34
22-24. Juni 2016 (21. Juni: Codesprint) near Basel, Switzerland
www.geopython.net
#GeoPythonConf