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.
3. Leichtgewichtige Virtualisierung
-
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
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
9. Ubuntu mit einem Volume
docker run -it --name syp_ubuntu -v my-opt:/opt ubuntu:21.04 /bin/bash
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
9.5. nginx - Step 2
docker run --rm -p 8081:80 --name nginx nginx
docker exec -it nginx /bin/sh
9.6. nginx - Step 3
docker run --rm -v ${PWD}/data:/usr/share/nginx/html -p 8081:80 --name nginx nginx
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
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
-