Docker Grundlagen

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
[codesyntax lang=“php“]

docker
docker info
service docker status

[/codesyntax]

 

Übersicht laufende Container (gestartete Images, die als Prozess auf dem Host-Rechner laufen)
[codesyntax lang=“php“]

docker ps

[/codesyntax]

 

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.
[codesyntax lang=“php“]

docker login
docker run hello-world

[/codesyntax]

Alle laufenden Container anzeigen. Die NICHT laufenden werden nicht angezeigt.
[codesyntax lang=“php“]

docker ps

[/codesyntax]

Alle laufende und die nicht laufenden Container anzeigen
[codesyntax lang=“php“]

docker ps -a

[/codesyntax]

 

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.
[codesyntax lang=“php“]

docker create --name Testcontainer ubuntu:14.04

[/codesyntax]

Image in das lokale Repository Downloaden. Es wird kein Container erstellt.
[codesyntax lang=“php“]

docker pull ubuntu:14.04

[/codesyntax]

 

Installation und starten von Ubuntu (neuste Version) aus einem Image. Um die neuste Version zu erhalten, darf die Version nicht mit angegeben werden.
[codesyntax lang=“php“]

docker run --name Testcontainer ubuntu

[/codesyntax]

 

Docker Image suchen z.B. Suche nach nginx
[codesyntax lang=“php“]

docker search nginx

[/codesyntax]

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
[codesyntax lang=“php“]

docker run ubuntu:14.04 echo "Hello World"

[/codesyntax]

 

Docker Container Lebenszyklus
[codesyntax lang=“php“]

docker start Testcontainer
docker restart Testcontainer
docker stop Testcontainer
docker rm Testcontainer

[/codesyntax]

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
[codesyntax lang=“php“]

docker run -i -t --name Testcontainer ubuntu:14.04 /bin/bash

[/codesyntax]

 

Alle Docker Images anzeigen
[codesyntax lang=“php“]

docker images

[/codesyntax]

 

Docker Image löschen
[codesyntax lang=“php“]

docker rmi < image name/ID >

[/codesyntax]

 

Neues Image auf Basis des vorherigen Images speichern/committen
[codesyntax lang=“php“]

docker commit -m "< message >" < container ID/name > < new image name >
Bsp.:
docker commit -m "Docker Images inkl. Tomcat" b69df6967238 ubuntu_inkl_tomcat

[/codesyntax]

 

OS Console innerhalb laufende Container aufrufen
[codesyntax lang=“php“]

docker exec -it Testcontainer /bin/bash

[/codesyntax]

 

Container logs anzeigen
[codesyntax lang=“php“]

docker logs Testcontainer

[/codesyntax]

 

Log Ausgabe verfolgen. Vergleichbar mit dem ‚tail‘ Befehl
[codesyntax lang=“php“]

docker logs -f Testcontainer

[/codesyntax]

 

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
[codesyntax lang=“php“]

docker run -it --name Testcontainer -v C:/docker/share:/home/data ubuntu:14.04 /bin/bash

[/codesyntax]

 

Erstellung eines Daten-Containers auf Basis von ‚busybox‘
[codesyntax lang=“php“]

docker create --name TestcontainerData -v /data/db busybox true

[/codesyntax]

Container erstellen und Daten-Container zuteilen
[codesyntax lang=“php“]

docker run -it --name Testcontainer --volumes-from TestcontainerData ubuntu:14.04 /bin/bash

[/codesyntax]

 

Aus der Container Console treten ohne den Container zu schließen
[codesyntax lang=“php“]

Strg + p + q

[/codesyntax]

 

Container wieder beitreten
[codesyntax lang=“php“]

docker attach < container ID >

[/codesyntax]

 

Container im Deamon Modus starten
[codesyntax lang=“php“]

docker run -itd --name Testcontainer ubuntu:14.04 /bin/bash

[/codesyntax]

 

Tomcat 8 als Demon downloaden/installieren/starten inkl. Verwendung des Ports 8080
P große geschrieben
[codesyntax lang=“php“]

docker run -d -P tomcat:8080

[/codesyntax]

Das Ganze mit Port-Mapping

Docker Maschine erstellen
[codesyntax lang=“php“]

docker-machine create --driver hyperv default
docker-machine create --driver virtualbox default

[/codesyntax]

 

Docker Maschine starten
[codesyntax lang=“php“]

docker-machine start default

[/codesyntax]

 

Docker Files dienen als Anleitung für die Erstellung von Images.
[codesyntax lang=“php“]

vim Dockerfile

[/codesyntax]
[codesyntax lang=“php“]

# Inhalt der Datei
FROM ubuntu:14.04
RUN apt-get update
RUN apt-get install -y vim

[/codesyntax]

Image auf Basis von Dockerfile bauen
[codesyntax lang=“php“]

docker build -t < username >/< image name >:< version >
docker build -t netperformance/myimage:1.0 . // Punkt nicht vergessen

[/codesyntax]
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
[codesyntax lang=“php“]

docker run -it -v C:/docker/test:/test ubuntu:14.04 /bin/bash

[/codesyntax]

 

Anzeige der 3 Docker Netzwerke und deren Treiber (bridge, host, none)
[codesyntax lang=“php“]

docker network ls

[/codesyntax]

 

Netzwerk (z.B. none) beim Anlegen eines Containers festlegen
[codesyntax lang=“php“]

docker run -it --net=none ubuntu:14.04 /bin/bashdocker run -it --net=none ubuntu:14.04 /bin/bash

[/codesyntax]

 

Anzeige der Netzwerk Konfiguration z.B. der bridge Konfiguration
[codesyntax lang=“php“]

docker network inspect bridge

[/codesyntax]

 

Der ‚inspect‘ befehl kann auch für Container verwendet werden, um low level container Informationen zu erhalten.
[codesyntax lang=“php“]

docker inspect < container >

[/codesyntax]

 

Eigenes docker Netzwerk erzeugen
[codesyntax lang=“php“]

docker network create --driver bridge --subnet=172.< xxx >.0.0/16 < network name >

[/codesyntax]

 

Container mit dem eigenen Netzwerk starten
[codesyntax lang=“php“]

docker run -it --net=newnetwork --name Testcontainer --ip=172.< xxx >.0.1 ubuntu:14.04 /bin/bash

[/codesyntax]

 

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

Schreibe einen Kommentar

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.