35
Martin Christen FHNW – Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation [email protected] @MartinChristen Einführung zu Docker für Python-Entwicklung +

Docker for Python Development

Embed Size (px)

Citation preview

Page 1: Docker for Python Development

Martin ChristenFHNW – Fachhochschule NordwestschweizHochschule für Architektur, Bau und GeomatikInstitut Vermessung und Geoinformation

[email protected]@MartinChristen

Einführung zu Docker für Python-Entwicklung

+

Page 2: Docker for Python Development

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

Page 3: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 3

Ausgangslage: OpenWebGlobe Projekt

Page 4: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 4

Motivation: 3D-Streaming im Webbrowser

MapData © OpenStreetMap contributorsBTh Hürbi/Daetwyler, MTh Lucas Oertli, 2013

Page 5: Docker for Python Development

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

Page 6: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 6

OpenStreetMap 3D – 3dmap

Quelle: BTh, Daniel Rettenmund 2015

Page 7: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 7

App: unsichtbares sichtbar machen (Römerstadt Augusta Raurica)

Page 8: Docker for Python Development

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

Page 9: Docker for Python Development

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 ?...

Page 10: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 10

Problematik bei Web-Services

(Quelle: docker.io)

Page 11: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 11

Eine Analogie: Transport von Gütern vor ca. 1950:

(Quelle: docker.io)

Page 12: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 12

Standardisierung: Container als ISO Standard

Page 13: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 13

Standardisierung mit Containern (nach ca. 1950)

(Quelle: docker.io)

Page 14: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 14

Standardisierung von (Web-)Services als Container: Docker!

(Quelle: docker.io)

Page 15: Docker for Python Development

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.

Page 16: Docker for Python Development

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.

Page 17: Docker for Python Development

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

Page 18: Docker for Python Development

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.

Page 19: Docker for Python Development

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.

Page 20: Docker for Python Development

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)

Page 21: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 21

Unterschied Linux <-> Windows / Mac

docker-machine ip defaultlocalhost

Page 22: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 22

Docker benutzen

Zunächst öffnen wir das Docker Quickstart Terminal:

Page 23: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 23

Erstellen eines Dockerfiles

vim Dockerfile

# Ausgehend vom image Ubuntu 14.04FROM ubuntu:14.04MAINTAINER Vorname Nachname [email protected]

# Image aktualisierenRUN apt-get update --yes

# Applikation ausführenCMD echo 'hello world'

docker build -t mchristen/myapp .

Page 24: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 24

docker images # Anzeigen aller Images

docker ps -a

docker run mchristen/myapp

Page 25: Docker for Python Development

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 protected]

# Image aktualisierenRUN apt-get update --yes

# Python installierenRUN apt-get install -y python3-pip

docker build -t mchristen/python3 .

Page 26: Docker for Python Development

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

Page 27: Docker for Python Development

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:

Page 28: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 28

Dockerfile# Ausgehend vom image Ubuntu 14.04FROM ubuntu:14.04MAINTAINER Vorname Nachname [email protected]

# 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

Page 29: Docker for Python Development

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

Page 30: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 30

Webservice

Page 31: Docker for Python Development

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

Page 32: Docker for Python Development

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/

Page 33: Docker for Python Development

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.

Page 34: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 34

22-24. Juni 2016 (21. Juni: Codesprint) near Basel, Switzerland

www.geopython.net

#GeoPythonConf

Page 35: Docker for Python Development

3 April 2016Institut Vermessung und Geoinformation 35

Fragen