Historische Entwicklung der Architektur
Docker Client/Server (bzw. Docker Deamon/Engine) Architektur
Die Kommunikation mit dem Server (Deamon bzw. Engine) erfolgt über den Client. Mögliche Clients:
Docker-Console
Kitematic
Client/Server Kommunikation unter Windows und Linux
Ein Docker Client kann sich auch mit einem entfernten Engine/Deamon/Server verbinden.
Hilfe & Info
docker docker info service docker status
Übersicht laufende Container (gestartete Images, die als Prozess auf dem Host-Rechner laufen)
docker ps
Basis-Image (hello-world) aus Deocker-Hub Repository download, innerhalb eines Containers erstellen, ausführen und gleich beenden. Daher zeigt ‚docker ps‘ den Caontainer nicht an. Zunächst jedoch auf Docker-Hub Anmelden.
docker login docker run hello-world
Alle laufenden Container anzeigen. Die NICHT laufenden werden nicht angezeigt.
docker ps
Alle laufende und die nicht laufenden Container anzeigen
docker ps -a
Docker create vs. run vs. start
- docker create: Erstellt ein neuen Container aus einem Image. Startet jedoch den Container nicht. Dieser wird nur vorbereitet.
- docker run: Erstellt ein neuen Container aus einem Image und startet und beendet anschließend den Container.
- docker start: Startet ein Container, der zuvor angehalten wurde.
Image vs. Container: Wenn Image eine Klasse wäre, dann wären Container Instanzen der Klasse. Images sind ‚read only‘.
Ein Image besteht selbst auch unterschiedlichen Layer. Die Abbildung zeigt das tomcat image mit den dazugehörigen Layer und deren Größe.
Installation von Ubuntu 14.04 unter einem Test-Container namens ‚Testcontainer‘ aus einem Image. Der Container wird nach der Erstellung nicht gestartet.
docker create --name Testcontainer ubuntu:14.04
Image in das lokale Repository Downloaden. Es wird kein Container erstellt.
docker pull ubuntu:14.04
Installation und starten von Ubuntu (neuste Version) aus einem Image. Um die neuste Version zu erhalten, darf die Version nicht mit angegeben werden.
docker run --name Testcontainer ubuntu
Docker Image suchen z.B. Suche nach nginx
docker search nginx
Für die Suche kann unter anderem auch die Docker-Hub Webseite verwendet werden:
Container starten (muss bereits existieren) um zu sehen, wie schnell der Container startet
docker run ubuntu:14.04 echo "Hello World"
Docker Container Lebenszyklus
docker start Testcontainer docker restart Testcontainer docker stop Testcontainer docker rm Testcontainer
Mit der Kombination aus ‚run‘ und ‚rm‘ kann ein Container erstellt und anschließend gleich wieder gelöscht werden.
Docker Image inkl. Terminal Simulation starten
-i sorgt dafür, dass der Container zur Laufzeit interaktiv ist.
-t bindet unsere Ein- und Ausgaben an den interaktiven Container
docker run -i -t --name Testcontainer ubuntu:14.04 /bin/bash
Alle Docker Images anzeigen
docker images
Docker Image löschen
docker rmi < image name/ID >
Neues Image auf Basis des vorherigen Images speichern/committen
docker commit -m "< message >" < container ID/name > < new image name > Bsp.: docker commit -m "Docker Images inkl. Tomcat" b69df6967238 ubuntu_inkl_tomcat
OS Console innerhalb laufende Container aufrufen
docker exec -it Testcontainer /bin/bash
Container logs anzeigen
docker logs Testcontainer
Log Ausgabe verfolgen. Vergleichbar mit dem ‚tail‘ Befehl
docker logs -f Testcontainer
Lokales Verzeichnis mappen.
Unter Windows Installation von Docker s. Taskleiste „Docker -> Docker Settings -> Shared Drives -> C“ die entsprechende Festplatte freigeben
Bsp.:
docker run -it –name < container > -v < quelle >:< ziel > ubuntu:14.04 /bin/bash
docker run -it --name Testcontainer -v C:/docker/share:/home/data ubuntu:14.04 /bin/bash
Erstellung eines Daten-Containers auf Basis von ‚busybox‘
docker create --name TestcontainerData -v /data/db busybox true
Container erstellen und Daten-Container zuteilen
docker run -it --name Testcontainer --volumes-from TestcontainerData ubuntu:14.04 /bin/bash
Aus der Container Console treten ohne den Container zu schließen
Strg + p + q
Container wieder beitreten
docker attach < container ID >
Container im Deamon Modus starten
docker run -itd --name Testcontainer ubuntu:14.04 /bin/bash
Tomcat 8 als Demon downloaden/installieren/starten inkl. Verwendung des Ports 8080
P große geschrieben
docker run -d -P tomcat:8080
Das Ganze mit Port-Mapping
Docker Maschine erstellen
docker-machine create --driver hyperv default docker-machine create --driver virtualbox default
Docker Maschine starten
docker-machine start default
Docker Files dienen als Anleitung für die Erstellung von Images.
vim Dockerfile
# Inhalt der Datei FROM ubuntu:14.04 RUN apt-get update RUN apt-get install -y vim
Image auf Basis von Dockerfile bauen
docker build -t < username >/< image name >:< version > docker build -t netperformance/myimage:1.0 . // Punkt nicht vergessen
Sollte die folgende Meldung auftauchen „Error checking context: ‚can’t stat ‚\\?\C:\“, so muss die Docker Datei in einen anderen Ordner verschoben werden (Workaround)
Bei diesem Beispiel wird ein Ubuntu Image erstellt. Zusätzlich wird ‚apt-get update‘ ausgeführt und der Texteditor ‚vim‘ installiert.
Jede Anweisung erzeugt ein Image-Layer für das Ubuntu Image. Es besteht auch die Möglichkeit, alle Anweisungen miteinander zu verketten und somit in einem Layer zu speichern.
Chaching
Wenn der folgende Dockerfile aufgerufen wird, dann sorgt das Caching beim zweiten Aufruf dafür, dass das Image (sofern keine aktuelle Version existiert) nicht neu gezogen wird und das „apt-get update“ ebenfalls nicht nochmal ausgeführt wird, da beide Kommandos zuvor ausgeführt wurden.
Jedoch führt in diesem Fall das Caching dazu, dass der Nutzer unter Umständen ein veraltetes ‚git‘ Paket installiert.
Die Konkatenierung der Befehle spiel beim Thema Caching eine große Rolle. Die Verknüpfung sorgt nämlich dafür, dass ‚apt-get update‘ jedes mal aufgerufen wird.
als Alternative kann auch das Caching auch deaktiviert werden
COPY
Lokale Datei in das Image kopieren. Dockerfile und aaron.txt mussten sich bei dieser Schreibweise im gleichen Ordner befinden.
ADD
Diese Befehl funktioniert so ähnlich wie COPY. Jedoch ist ADD im Stande, die Ressource aus dem Internet zu downloaden und zu entpacken, bevor dieser hinzugefügt wird.
Lokalen Ordner (Volumen -v) in ein Container hinein mounten bzw. Storage (Volume) an Host binden
docker run -it -v C:/docker/test:/test ubuntu:14.04 /bin/bash
Anzeige der 3 Docker Netzwerke und deren Treiber (bridge, host, none)
docker network ls
Netzwerk (z.B. none) beim Anlegen eines Containers festlegen
docker run -it --net=none ubuntu:14.04 /bin/bashdocker run -it --net=none ubuntu:14.04 /bin/bash
Anzeige der Netzwerk Konfiguration z.B. der bridge Konfiguration
docker network inspect bridge
Der ‚inspect‘ befehl kann auch für Container verwendet werden, um low level container Informationen zu erhalten.
docker inspect < container >
Eigenes docker Netzwerk erzeugen
docker network create --driver bridge --subnet=172.< xxx >.0.0/16 < network name >
Container mit dem eigenen Netzwerk starten
docker run -it --net=newnetwork --name Testcontainer --ip=172.< xxx >.0.1 ubuntu:14.04 /bin/bash
Image nach Docker Hub pushen
Zunächst muss das Image mit der Versionsnummer getaggt werden. Trägt das Image als Tag ‚latest‘ kann kein Push vorgenommen werden.
Anschließend kann Push ausgeführt werden