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/bash
docker 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 HostEXPOSE
te Ports anderer Container zugreifen, wenn docker run
mit dem Parameter --link
gestartet wird-p 6379:6379
kann vom Host-System nicht auf redis zugegriffen werdenEXPOSE
d), mit --link
docker 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 Containerfrom 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 nginx
redis
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 3ec
VOLUMES
können mit --volumes-from
genutzt werden, mit docker export
umgezogen werden