 
				https://www.docker.com/whatisdocker/
 
				 
                docker run führt automatisch download (docker pull) durch/etc/issue gibt Debian 7 aus, aber uname -r Arch Linux (Host-OS)docker run -ti --rm debian:wheezy /bin/bashdocker run erstellt einen neuen Container aus einem Image-t öffnet ein Pseudo-Terminal (für Output)-i gibt Zugriff auf stdin--rm sorgt dafür dass Container gelöscht wird nach Beendigung
                            docker restart neu gestartet werdendebian:wheezy ist der Name des Images, hier mit Tag wheezy. Ohne Tag würde automatisch :latest verwendet./bin/bash ist das Kommando das vom Container ausgeführt werden soll. Images haben in der Regel ein Default-Kommando, das zur Laufzeit überschrieben werden kann.FROM debian:wheezy)RUN apt-get update werden in eigenen Containern durchgeführt, erzeugen Layer → Layer können von mehreren Images verwendet werden, ermöglichen build cachingEXPOSE 80 im Dockerfile gibt Port 80 frei, vorerst nur für andere Containerdocker run -p 80:80 forwarded Port 80 auf Host
                            docker run -p [interface:]80:80 bindet Port an bestimmtes Interface (z.B. localhost)docker run -p 8000:80 forwarded Container-Port 80 auf 8000 auf dem HostEXPOSEte Ports anderer Container zugreifen, wenn docker run mit dem Parameter --link gestartet wird-p 6379:6379 kann vom Host-System nicht auf redis zugegriffen werdenEXPOSEd), mit --linkdocker run -v angelegt werden, bzw. mit VOLUME im Dockerfile--volumes-from einbindendocker run -v /lokaler/pfad:/pfad/im/container können Verzeichnisse des Hosts-Systems in den Container gemountet werdenpython3 -m http.server startet development Server auf Port 8000-v $(pwd):/opt mountet das aktuelle Verzeichnis in das Verzeichnis /opt im Container 
                    from flask import Flask, render_template, redirect, url_for, json, request
from flask.ext.sse import sse, send_event
app = Flask(__name__)
app.config['SSE_REDIS_HOST'] = 'redis' #default=='localhost'; 'redis' => --link
app.register_blueprint(sse, url_prefix='/events')
@app.route('/new')
def new():
    return render_template('message.html')
@app.route('/send', methods=['POST'])
def send():
    data = {"message": request.form.get('message', 'Hello, world!')}
    send_event("testevent", json.dumps(data), channel='test')
    return redirect(url_for('new'))
@app.route('/')
def index():
    return render_template('index.html')# python2 wegen gevent, wheezy basiertes Image da sonst Probleme mit gevent
# https://github.com/gevent/gevent/issues/513
FROM python:2.7.9-wheezy
MAINTAINER Jesaja Everling <jesaja@everling.email>
ENV MODIFIED_AT 201512061738
RUN pip install gunicorn gevent \
"git+https://github.com/DazWorrall/flask-sse.git"
ADD flask-sse/example /opt/flask-sse
WORKDIR /opt/flask-sse
CMD /opt/flask-sse/run.sh
/opt/flask-sse geschoben
                            docker build -t flask-sse_gunicorn .flask-sse_gunicorn getaggt, Container kann deshalb mit docker run flask-sse_gunicorn gestartet werdenFROM nginx:1.7.9
ADD default.conf /etc/nginx/conf.d/default.conf
upstream gunicorn {
    server flask-sse_gunicorn:5000 fail_timeout=0;
}
server {
    listen 80;
    location / {
      proxy_redirect off;
      proxy_set_header Host $http_host;
      # http://stackoverflow.com/a/13673298/204706
      proxy_set_header Connection '';
      proxy_http_version 1.1;
      chunked_transfer_encoding off;
      proxy_buffering off;
      proxy_cache off;
      proxy_pass http://gunicorn;
    }
}
default.conf ersetzt
                        docker run -v$(pwd)/default.conf:/etc/nginx/conf.d/default.conf nginxredis Container zugreifendocker run -d --name=redis redis:2.8.19
                            --name ist notwendig für --link (docker generiert ansonsten automatisch Namen)docker run -d --link=redis:redis --name=flask-sse_gunicorn flask-sse_gunicorn
                            --link sorgt dafür dass DNS Eintrag für redis auf die IP des Containers verweistdocker run -d -p 80:80 --link=flask-sse_gunicorn:flask-sse_gunicorn flask-sse_nginx
                            apt-get install -y (sonst Eingabe erforderlich)ENV MODIFIED_AT (deaktiviert den Cache wenn geändert)docker exec erlaubt es in laufenden Containern Prozesse zu starten (z.B. /bin/bash zur Fehlersuche)docker ps zeigt laufende Container an, docker images vorhandene Imagesdocker stop/rm $(docker ps -a -q) stoppt/löscht alle Containerdocker history zeigt die Layer eines Images ansystemd unit files oder fig benutzen um zusammengehörige Container zu startenUSER www-data im Dockerfile einen User für den Prozess festlegen oder den Prozess entsprechend konfigurieren (z.B. user www-data; in nginx.conf)docker rm 3ecVOLUMES können mit --volumes-from genutzt werden, mit docker export umgezogen werden