Docker/Buch/01 Einführung/Python
Python
Damit auch die Python-Community nicht zu kurz kommt, zeigen wir hier eine dritte Variante des Hello-World-Beispiels in Python
- Egal welche Python-Version Sie auf Ihrem Computer installiert haben (oder ob Sie überhaupt Python installiert haben), mit diesem Dockerfile starten Sie python in der aktuellen Version 3
# Datei hello -world - python / Dockerfi l e ( docbuc / hello - world - python )
FROM python :3
ENV TZ =" Europe / Amsterda m "
COPY server . py / src /
USER www - data
CMD [" python " , "/ src / server . py "]
Der Python-Code für den Webserver ist dem vorangegangenen Node.js-Beispiel sehr ähnlich:
#!/ usr / bin / env python3
from http . server import BaseHTTPReques tH an dl er , HTTPServe r
import os , datetime
class myServer ( BaseHTTP R eq u e s t Ha n d l e r ) :
def do_GET ( self ) :
load = os .getloada v g ()
html = """ <!DOCTYPE html >
<html >
<head >
<title > Hello world </ title >
<meta charset =" utf -8" / >
</head >
<body >
<h1 >Hello world : python </ h1 >
<p > Serverzei t : { now } <br / >
Serverau s la s t u ng ( load ) : { load }
</body >
</html >""". format ( now = datetime .datetime . now () . astimezo ne () ,
load = load [0])
self . send_res p on s e (200)
self . send_hea d er ( 'Content - type ' , 'text / html ')
self . end_head e rs ()
self . wfile . write ( bytes ( html , " utf8 ") )
return
def run () :
addr = ( ' ' , 8080)
httpd = HTTPServ er ( addr , myServer )
httpd .serve_fo r e ve r ()
run ()
Python-Freunde werden sich gleich auskennen: In der run-Funktion wird der Web- server auf Port 8080 gestartet; die do_GET-Funktion in der myServer -Klasse behandelt den HTTP GET-Aufruf, den der Browser beim Aufruf der Adresse http://localhost aus- löst.
- Das HTML-Gerüst in der html-Variablen wird mit dem aktuellen Datum und der load gefüllt, die Ihnen aus den vorigen Abschnitten schon bekannt ist.
- Nach dem Setzen der Kopfzeilen wird die html-Variable in utf8 konvertiert und an den Browser gesendet (self.wfile.write)
Um diesen Service als Docker-Container zu starten, müssen Sie wie bei den vorange- gangenen Beispielen zuerst das Image erzeugen:
docker build -t hello - world - python
Abbildung 1.3 Der Hello-World-Webserver mit dem Python-3-Container im Browser
Anschließend erzeugen und starten Sie den Container mit dem Port-Mapping auf 8080 auf dem lokalen Port (siehe Abbildung):
docker run -d --name hello - world - python \ -p 8080:808 0 hello - world - python
Vergessen Sie nicht, nach den Versuchen aufzuräumen.
- Das bereits erwähnte docker stop hello-world-python gefolgt von docker rm hello-world-python beendet die Aus- führung und löscht den Container.
- Wenn Docker für Sie aufräumen soll, können Sie das Kommando docker system prune verwenden.
- Es löscht alle gestoppten Container
- und andere Ressourcen, die wir aber noch nicht verwendet haben