‏ ‏ ‎ ‏ ‏ ‎

1. Was ist Docker?

  • Eine Technologie, um eine Application und alle ihre Abhängigkeiten in einen einzelnen, leicht zu transportierenden Container zu packen.

  • Wird eine Applikation in einen Docker-Container gepackt, so ist sichergestellt, dass die Laufzeitumgebung unverändert bleibt, auch wenn der container auf einem anderen Hostsystem läuft.

2. Wie funktioniert Docker?

dockerimage
dockerbuild

3. Leichtgewichtige Virtualisierung

virt1
Figure 1. Virtualisierung
virt2
Figure 2. Leichtgewichtige Virtualisierung

docker lightweight virt

  • Bsp. für "schwergewichtige" Virtualisierung

    • VirtualBox

    • vmWare

    • …​

  • Bsp. für leichtgewichtige Virtualisierung

    • Docker

    • Podman

    • …​

4. Grundprinzip

  • Dockerfile: Kochrezept zum Erstellen des Images

  • Image: Immutable Image

  • Container: Ein gestartetes Image (mutable)

5. Ist Docker installiert?

docker version
% docker version
Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea
 Built:             Wed Nov 13 07:22:34 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea
  Built:            Wed Nov 13 07:29:19 2019
  OS/Arch:          linux/amd64
  Experimental:     true
 containerd:
  Version:          v1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
sudo usermod -a -G docker jenkins

6. Docker Registries

  • a remote repository for storing Docker images

  • public or private

  • self-hosted or third-party service

  • ie Docker Hub, Quay.io

docker architecture

7. Bind Mounts and Volumes

  • Bind Mounts ein File oder Verzeichnis des Containers wird in einem File oder Verzeichnis zugänglich gemacht

    • docker run -v ${PWD}/directory-on-host:/directory-in-container

  • Named Volumes existieren am Host. Sie werden durch die Docker CLI manipuliert.

    • docker volume create my-volume

    • docker run -v my-volume:/directory-in-container

  • Volumes verfügen über mehr Features wie Cloud Storage Backends

8. Erste Beispiele mit Docker

8.1. Image alpine ausführen

docker run alpine echo Hello 4xhix

8.2. Image alpine interaktiv

docker run -it alpine /bin/sh
  • -it → interaktives Terminal

oder

docker run -it ubuntu:21.04 /bin/bash

9. Ubuntu mit einem Volume

docker run -it --name syp_ubuntu -v my-opt:/opt ubuntu:21.04 /bin/bash
ansehen mit
docker volume ls

9.1. Ubuntu mit einem bind mount

docker run -it --name syp_ubuntu -v ${PWD}/my_opt:/opt ubuntu:21.04 /bin/bash

9.2. Ubuntu mit einem volume

docker volume create my_volume
docker run -it --name syp_ubuntu -v my_volume:/opt ubuntu:21.04 /bin/bash
  • erstelle ein file im opt-folder: echo 123 > my-file.txt

  • beende container

  • lösche container

  • erstelle und starte einen neuen Container → das File befindet sich immer noch im Volume

docker bindmount vs volume

9.3. Docker Whalesay

docker run --rm docker/whalesay cowsay hello 4bhif

9.4. nginx - Step 1

Starting nginx
docker run --rm -p 8081:80 --name nginx nginx

docker port mapping

9.5. nginx - Step 2

Terminal 1: Starting nginx
docker run --rm -p 8081:80 --name nginx nginx
Terminal 2: Open a terminal in the docker container
docker exec -it nginx /bin/sh

9.6. nginx - Step 3

Terminal 1: Start nginx with a volume in the current folder
docker run --rm -v ${PWD}/data:/usr/share/nginx/html -p 8081:80 --name nginx nginx

docker starten nginx

Image + Container (w/ port + volume)

docker image container

9.7. PostgreSQL

docker run -it \
           --rm=true \
           --name postgres \
           -v ${PWD}/pgdata:/var/lib/postgresql/data \
           -e POSTGRES_USER=app \
           -e POSTGRES_PASSWORD=app \
           -e POSTGRES_DB=db \
           -p 5432:5432 postgres:10.5

9.8. Minecraft

docker pull itzg/minecraft-server
docker run -d -p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server

10. Unterschied zum Arbeiten ohne Docker

  • Ohne Docker werden auf einer Maschine mehrere Softwareprodukte installiert

  • Bei Verwendung von Docker wird für jedes Softwareprodukt ein eigener Docker-Container erstellt

11. Docker Networks

  • Konfiguriert die Verbindung zwischen Container und zum Internet

  • Container können ports freigeben und so im Internet verfügbar machen

  • Man verwendet die Docker CLI

  • Network Drivers

    • Bridge: Virtuelles Netzwerk, um mehrere Container miteinander zu verbinden

    • Host: Entfernt die Netzwerk-Isolation zwischen Host und Containern. Die Container benutzen das Netzwerk des Hosts direkt

    • Overlay: Verbindet Container die auf unterschiedlichen Docker-Hosts laufen

    • Macvlan: Weist eine MAC-Adresse einem Container zu. Für low-level Netzwerkanforderungen

    • None: Deaktiviert das Netzwerk zwischen den Containern

docker network