Zum Inhalt springen

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