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

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

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